Posted at

Xcodeのバージョンがまた上がったことによるコードサインの諸問題

More than 1 year has passed since last update.

いつの間にか、またMacのJenkinsでのUnity自動ビルドが失敗するようになりました…。


xcodebuild: error: invalid option '-exportProvisioningProfile'.


正確には、Xcodeビルド(アーカイブ)後のコードサインのためのxcodebuild -exportArchiveで失敗。どうやらいつの間にかXcodeのバージョンが8.3に上がっていて(誰がやったんだ…?)、ProvisioningProfileを指定する-exportProvisioningProfileオプションがなくなったようです。

試しに-exportProvisioningProfileを外すと、今度は


xcodebuild: error: The flag -exportOptionsPlist is required when specifying -exportArchive.


と言われます。となれば、ExportOptionsPlistを作って差し上げましょう。

プロパティリスト(.plist)は適当なテキストエディタでも作れるんですが、文字コードとかヘッダとかいろいろ細かい問題があると困るので、Xcodeで作ります。

Xcodeのメニューバーから"File->New->File..."で"Resource"の"Property List"を選択してください。あとは"Key"の+ボタンをクリックすると、項目が追加できます。

必要な項目(キー)は、

xcodebuild -help

をすると最後のほうに設定可能なキーのリストが出てきます。私の場合はアドホック用のビルドなので、

Key
Value
メモ

method
ad-hoc
他にapp-store,package等がある

teamID
**********
いつもの10桁の英数字

のみ設定しました。ProvisioningProfileはteamIDとBundleIdから勝手に参照するようです(もしかしたらこれも不要かも?)。

最終的にコマンドラインで

xcodebuild -exportArchive -archivePath Hoge.xcarchive -exportPath Hoge.ipa -exportOptionsPlist Hoge.plist

とすると、コードサインが行われて.ipaファイルが生成されます。

…と思ったら、なんか以前(Xcode 8.2.1)と挙動が違う。以前と同じexportPathだと"Hoge.ipa/"というフォルダに.ipaファイルが書き出されてしまいます…。しかも、ipaファイルの名前は勝手にApplicationPropertiesのNameにされてしまうようです。

ということで、

xcodebuild -exportArchive -archivePath Hoge.xcarchive -exportPath . -exportOptionsPlist Hoge.plist

mv Unity-iPhone.ipa Hoge.ipa

の二段構えでなんとかなりました。Unity-iPhone.ipaの部分は環境に合わせて変更してください。.xcarchive内のinfo.plistを見て差し替えるという手もありますが、時間が無いのでこれで。

それにしても、iOSアプリ開発はXcodeがバージョンアップするたびに手法が変わって、追いつくのが大変…。