いつの間にか、また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がバージョンアップするたびに手法が変わって、追いつくのが大変…。