Xcode 8.3以降でAutomatically manage signingが有効になっているプロジェクトで、コマンドライン(xcodebuild)を使ってipaファイルを作成することができず、途中でビルドエラーが発生してしまう問題にぶち当たりました。
個人的な感想としては、Xcode 8.3でxcrun PackageApplication
が使えなくなったのが全部悪い!(暴言)
開発環境について
- Xcode 8.3.1
- 僕のアカウントのRoleはDeveloper (たぶん)
以前の失敗例
少し前にxcrun PackageApplication
が使えなくなりビルドに失敗するようになってしまいました。その際の解決方法については以下の記事で書きました。
この記事でビルドしていた時のプロジェクトは、Automatically manage signingを無効にしているプロジェクトだったので意識しませんでしたが、Automatically manage signingを有効にしている場合に外部から証明書やProvisioning Profileを指定するとコンフリクトを起こして失敗してしまいます。
MyApplication has conflicting provisioning settings. MyApplication is automatically signed, but provisioning profile iOS Team Provisioning Profile: jp.ch3cooh.MyApplication has been manually specified. Set the provisioning profile value to "Automatic" in the build settings editor, or switch to manual signing in the project editor.
Automatically manage signingが有効になっているプロジェクトでipaファイルが出力できなくなってしまった
いつもの手順。
- xcodebuildで.xcarchiveを作成
- .xcarchiveをipaでエクスポートする
- ダウンロードページを作成
- S3にアップロード
いまの状態
- xcodebuildで.xcarchiveを作成
- .xcarchiveをipaでエクスポートする (失敗)
.xcarchiveをipaでエクスポートに失敗する
.xcarchiveまで作ってしまえば、通常は下記のコマンドでipaファイルが出力されます。
xcodebuild -exportArchive \ -archivePath /PATH/myapplication.xcarchiv \ -exportPath PATH \ -exportOptionsPlist /PATH/exportOptions.plist
2.の手順でコマンドライン上で表示される失敗理由は、
No provisioning profiles matching an applicable signing identity were found.
.xcarchive は手動でもipaをエクスポートすることができるので、手動でやってみると下図のようなエラーが発生しています。
exportOptions.plistのmethodをdevelopmentに変更するとエクスポートはできる
exportOptions.plistのmethodを'development'に変更するとエクスポートはできた。
仮説と対策
仮説を立ててみた。
Xcode 8.2まではAutomatically manage signingが有効でも証明書とppを明示的に指定することでipaファイルを生成することができた*1。
Xcode 8.3からはコマンドラインでipaファイルを生成する際には、xcarciveからipaをエクスポートする必要があるが、Automatically manage signingを有効にしていると(必要なppがインストールされていたとしても)ログインしているアカウントのroleに依存してしまう。Distribution用のppは、ユーザーのRoleがAdmin以上でなければいけない。
仮に対策を考えてみた。
- ログインユーザーのroleをadminにする
- エクスポートしたipaのppを差し替えて強制的に署名してしまう
1.は対策としては簡単だけど、受託案件の場合、お客さまからアカウントを発行してもらうのが常でroleはdeveloperで、Adminはもらえなさそう。
2.がいいかもしれない。
解決編
CI用にAdminに昇格してもらった。
関連記事
xcodebuildについての関連記事はこちらでも確認することができます。
*1:というよりもxcrun PackageApplicationがよしなにしてくれていた