Azure Pipelines で iOS ビルドの設定について


概要

iOSアプリのビルドをAzurePipelinesでCI/CD対応した際にP12およびプロビジョニングプロファイルの設定が必要になります。

そのため、P12およびプロビジョニングプロファイルの準備とAzurePipelinesに設定する方法をまとめます。

「Azure Pipelinesとは何か」などの初歩的な話は、過去にまとめた「App Center と Azure Pipelines について」があるので割愛します。

また、公式ドキュメントに大筋があるので先にこちらを確認しておくと把握しやすいと思います。

azure-pipelines.yml

azure-pipelines.ymlの完成版がこちらになります。
triggerのところはよしなに調整してください。

InstallAppleProvisioningProfileInstallAppleCertificateで取得しているP12およびプロビジョニングプロファイルのデータをこれから用意していきます。
certPwdをコメントアウトしているのは、P12出力時にパスワードを設定できるんですが、その際にパスワードなしでP12を作るとcertPwdの設定はいらなくなります。

最後にAppCenterと連携していますが、詳細は、「Azure Pipelines と App Center の連携方法」にまとめています。

trigger:
  branches:
    include:
      - '*'
  tags:
    include:
      - '*'

pool:
  vmImage: 'macos-latest'

steps:

- task: InstallAppleProvisioningProfile@1
  inputs:
    provisioningProfileLocation: 'secureFiles'
    provProfileSecureFile: 'Ad_Hoc_202107.mobileprovision'
    removeProfile: true

- task: InstallAppleCertificate@2
  inputs:
    certSecureFile: 'distribution_202107.p12'
    #certPwd: '$(p12pass)'
    keychain: 'temp'
    deleteCert: true

- task: Xcode@5
  inputs:
    actions: 'clean build analyze archive'
    scheme: '$(scheme_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)'
    artifactName: 'Publish'

- task: AppCenterDistribute@3
  inputs:
    serverEndpoint: 'AppCenter'
    appSlug: 'gremito/$(scheme_name)'
    appFile: '$(agent.buildDirectory)/output/iphoneos/Release/*.ipa'
    buildVersion: '$(Build.BuildNumber)'
    symbolsOption: 'iOS'
    releaseNotesOption: 'input'
    releaseNotesInput: 'New release!'
    destinationType: 'groups'

.p12/.mobileprovision

P12およびプロビジョニングプロファイルの準備は、

などを参考に作りました。

まず、Xcode上からDistributionを作成します。
コンソール画面上でもできますが、これが一覧手軽で作業しやすかったです。
 
作成されたことを確認します。
コンソール画面上から操作するとCertificateファイルをダウンロードして展開しますが、Xcodeから操作したので不要です。
 
次にプロビジョニングプロファイル(.mobileprovision)を作成します。
参考記事通りに作ったらダウンロードして保管とこの後のAzurePipelinesで扱います。
 
最後にP12を作成します。
これも参考記事通りに作ったら保管とAzurePipelinesで扱います。 
 

Library/Secure files

AzurePipelinesのLibraryにあるSecure filesに先ほど作った、P12およびプロビジョニングプロファイルのアップロードします。
リスト上に表示されているP12とプロビジョニングプロファイルを選んで、Pipeline permissionsからビルドするパイプラインを選んでおきましょう。
この設定を忘れていてもパイプラインを実行した際に警告が表示されてそこから設定することもできます。

P12とプロビジョニングプロファイルの名前は、azure-pipelines.ymlで設定しているInstallAppleProvisioningProfileInstallAppleCertificateのファイル指定で使うことになります。
間違ったとしてもエラーになり、途中でパイプラインが止まります。
 

さいごに

これでAzurePipelinesでビルドされたアプリが正常に起動すれば、CI/CD対応が完了となります。
P12およびプロビジョニングプロファイルの設定は、どちらともDistributionでなければなりません。
そのため、どちらかがDevelopmentだと

error: Provisioning profile プロビジョニングプロファイル名 doesn't include signing certificate Certificate名

というエラーでパイプラインが止まります。

もし、ビルドが成功してAppCenterに配布されたアプリが起動直後にクラッシュされた場合は、手元でビルドして問題ないことを確認しましょう。
それでもAzurePipelinesでビルドしたアプリだけが問題の場合は、パイプラインからipaファイルをダウンロードし、手元でビルドしたipaファイルをもとに証明書の内容を確認することでAzurePipelinesの問題なのか大元のアプリの問題なのか区別できると思います。