2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-07-13

概要

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 の連携方法」にまとめています。

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およびプロビジョニングプロファイルの準備は、

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

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

Library/Secure files

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

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

さいごに

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

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

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

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

 

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?