Microsoft 系のあれこれ

港区の SIer で よくわからんことをしている人です。Xamarin 中心でした。(過去形)

AzureDevOpsとAppCenterでiOSアプリをCI/CDする

ほぼほぼ参考にさせていただいたこちらのサイト(iOSアプリのCI/CD〜Azure Pipelines編〜 - Qiita)の通りですが、特殊な箇所やハマったところがいくつかあったので、残しておきます。
iOS 開発ナニモワカラナイので、誤りがあったらご指摘ください。

contents:

AzureDevOps のエディター

YAML とかよくわかんないので GUI で設定できるようにパイプライン作成時に以下を選択して作ります。
f:id:ShunsukeKawai:20191213144454p:plain

XCode のバージョン指定

今回はやんごとなき事情で XCode の10.1 をビルドに使いたかったのでバージョン指定しました。
「Specify path」を選択して Path に/Applications/Xcode_10.1.appと入力します。

f:id:ShunsukeKawai:20191213140544p:plain
XCode Build タスクの Xcode version

バージョンに指定する値は下記サイトに記載があります。(対象のOSのREADMEになにがそのOSに入っているかが書いてある)
https://github.com/actions/virtual-environments/blob/master/images


署名

冒頭で紹介した参考サイトにも記載されていますが、署名のところで色々うまくいかなかったです。
結局参考サイトと同じ以下の設定にしました。

f:id:ShunsukeKawai:20191213150922p:plain
XCode Build タスクの Signing & provisioning

マニュアル署名だと、すべてのプロジェクトに署名しようとしてしまい Pod で参照しているライブラリに対して does not support provisioning profiles. と以下のエラーが全ライブラリに対して出まくります。

❌  error: R.swift.Library does not support provisioning profiles. R.swift.Library does not support provisioning profiles, but provisioning profile XXXXXXXXXXXXX has been manually specified. Set the provisioning profile value to "Automatic" in the build settings editor. (in target 'R.swift.Library')
** ARCHIVE FAILED **
##[error]Error: /usr/bin/xcodebuild failed with return code: 65
##[section]Finishing: Xcode build

そのため、参考サイトと同じ様に Podfile の末尾に追記しました。

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings['PROVISIONING_PROFILE_SPECIFIER'] = ''
    config.build_settings['CODE_SIGNING_REQUIRED'] = 'NO'
    config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
  end
end

そしてこれだけでなく、今回の案件では Dynamic Library を使用していて、そこでも同じエラーが発生していました。
project.pbxprojを適当なエディターで開いてライブラリの対象 Configuration の buildSettings に以下を追記します。(たぶん XCode でやればいいんだけど、Windows だけで作業してたため直編集しちゃった…)

CODE_SIGNING_ALLOWED = NO;
CODE_SIGNING_REQUIRED = NO;
PROVISIONING_PROFILE = '';
PROVISIONING_PROFILE_SPECIFIER = '';

以上でなんとかビルドが成功するようになりました。

dSYM を AppCenter にアップロードする

AppCenter でテストアプリを配布するのは参考サイトの通りですが、クラッシュログ分析のため、シンボルファイルを AppCenter にアップロードする設定を追加しました。

デフォでできている Copy Files to: $(build.artifactstagingdirectory)のタスクをクローンします。
f:id:ShunsukeKawai:20191213164644p:plain
Target Folder の箇所を$(build.artifactstagingdirectory)/dSYMsに変更します。
Contents を**/*.dSYM/**に変更します。

f:id:ShunsukeKawai:20191213164942p:plain
Copy Files設定後
続いてPublish Artifactsのタスクもクローンして、先ほど設定した$(build.artifactstagingdirectory)/dSYMsを Path to publish に設定します。
Artifact name は適当にdSYMsとかにしておきましょう。
f:id:ShunsukeKawai:20191213171724p:plain
Publish Artifacts設定後
そして最後に AppCenter の Deploy タスクの Symbols のところの dSYM path に$(build.artifactstagingdirectory)/dSYMsを設定します。
そうすると自動でアップロードしてくれるようになります。
f:id:ShunsukeKawai:20191213171822p:plain
Deploy **/*.ipa to Visual Studio App Center 設定後
デプロイ完了後、AppCenter のシンボルの箇所を見るとアップロードされています。
f:id:ShunsukeKawai:20191213172136p:plain
AppCenter にアップされてる