概要
iOSアプリのビルドをAzurePipelinesでCI/CD対応した際にP12およびプロビジョニングプロファイルの設定が必要になります。
そのため、P12およびプロビジョニングプロファイルの準備とAzurePipelinesに設定する方法をまとめます。
「Azure Pipelinesとは何か」などの初歩的な話は、過去にまとめた「App Center と Azure Pipelines について」があるので割愛します。
また、公式ドキュメントに大筋があるので先にこちらを確認しておくと把握しやすいと思います。
- Azure DevOps/Azure Pipelines/エコシステムと統合/Xcode アプリのビルド、テスト、デプロイ
- Azure DevOps/Azure Pipelines/アプリをデプロイする/モバイル アプリのデプロイ/署名証明書の管理
azure-pipelines.yml
azure-pipelines.ymlの完成版がこちらになります。
triggerのところはよしなに調整してください。
InstallAppleProvisioningProfileとInstallAppleCertificateで取得しているP12およびプロビジョニングプロファイルのデータをこれから用意していきます。
certPwdをコメントアウトしているのは、P12出力時にパスワードを設定できるんですが、その際にパスワードなしでP12を作るとcertPwdの設定はいらなくなります。
最後にAppCenterと連携していますが、詳細は、「Azure Pipelines と App Center の連携方法」にまとめています。
pool:
vmImage: 'macOS-11'
variables:
XCODE_ROOT_PATH: '/Applications/Xcode_13.2.1.app'
steps:
- task: InstallAppleProvisioningProfile@1
inputs:
provisioningProfileLocation: 'secureFiles'
provProfileSecureFile: '$(mobileprovision_filename)'
removeProfile: true
- task: InstallAppleCertificate@2
inputs:
certSecureFile: '$(distribution_filename)'
# certPwd: '$(p12pass)'
keychain: 'temp'
deleteCert: true
- task: Xcode@5
inputs:
actions: 'clean build analyze archive'
scheme: '$(XCODE_PROJECT_NAME)'
sdk: 'iphoneos'
configuration: 'Release'
xcWorkspacePath: './*.xcodeproj'
xcodeVersion: 'default'
signingOption: 'manual'
signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'
packageApp: true
exportPath: '$(agent.buildDirectory)/output/iphoneos/Release'
- task: PublishBuildArtifacts@1
inputs:
pathToPublish: '$(agent.buildDirectory)/output'
artifactName: 'Publish'
- task: AppCenterDistribute@3
inputs:
serverEndpoint: 'AppCenter'
appSlug: 'gremito/iOSAppSample'
appFile: '$(agent.buildDirectory)/output/iphoneos/Release/*.ipa'
buildVersion: '$(Build.BuildNumber)'
symbolsOption: 'iOS'
releaseNotesOption: 'input'
releaseNotesInput: 'New release!'
destinationType: 'groups'
.p12/.mobileprovision
P12およびプロビジョニングプロファイルの準備は、
- iOS 証明書 & Provisioning Profile & Apple Developer Program の更新をやったメモ(1年ぶりn回目)
- プッシュ通知に必要な証明書の作り方2021
- Provisioning profile "XXXXXX" doesn't include signing certificate YYYY って出る場合の対処法(2019/10/9版)
などを参考に作りました。
まず、Xcode上からDistributionを作成します。
コンソール画面上でもできますが、これが一覧手軽で作業しやすかったです。

作成されたことを確認します。
コンソール画面上から操作するとCertificateファイルをダウンロードして展開しますが、Xcodeから操作したので不要です。

次にプロビジョニングプロファイル(.mobileprovision)を作成します。
参考記事通りに作ったらダウンロードして保管とこの後のAzurePipelinesで扱います。

最後にP12を作成します。
これも参考記事通りに作ったら保管とAzurePipelinesで扱います。

Library/Secure files
AzurePipelinesのLibraryにあるSecure filesに先ほど作った、P12およびプロビジョニングプロファイルのアップロードします。
リスト上に表示されているP12とプロビジョニングプロファイルを選んで、Pipeline permissionsからビルドするパイプラインを選んでおきましょう。
この設定を忘れていてもパイプラインを実行した際に警告が表示されてそこから設定することもできます。
P12とプロビジョニングプロファイルの名前は、azure-pipelines.ymlで設定しているInstallAppleProvisioningProfileとInstallAppleCertificateのファイル指定で使うことになります。
間違ったとしてもエラーになり、途中でパイプラインが止まります。

さいごに
これでAzurePipelinesでビルドされたアプリが正常に起動すれば、CI/CD対応が完了となります。
P12およびプロビジョニングプロファイルの設定は、どちらともDistributionでなければなりません。
そのため、どちらかがDevelopmentだと
error: Provisioning profile プロビジョニングプロファイル名 doesn't include signing certificate Certificate名
というエラーでパイプラインが止まります。
もし、ビルドが成功してAppCenterに配布されたアプリが起動直後にクラッシュされた場合は、手元でビルドして問題ないことを確認しましょう。
それでもAzurePipelinesでビルドしたアプリだけが問題の場合は、パイプラインからipaファイルをダウンロードし、手元でビルドしたipaファイルをもとに証明書の内容を確認することでAzurePipelinesの問題なのか大元のアプリの問題なのか区別できると思います。