woshidan's blog

そんなことよりコードにダイブ。

XCode Tools CLIのバージョンアップとビルドに必要なパラメータ、権限の変化について

お仕事の都合で古いOSに対してもXCode Tools CLIを使ってビルドする必要があって調べてみても要領を得なかったんだけど少しわかった気がするので、わかったところまで整理してみます*1

アプリとして実機やシミュレータにインストールできるファイルの種類について

説明
.app xcrun simctl を経由して iPhone simulatorへインストールできる。 xcodebuild build コマンドやXCodeでシミュレータへ向けてビルドすることで作成可能
.ipa アプリストアへリリースしたり、実機へデプロイするときに作成する必要があるファイル形式。 .app.xcarchive ファイルから開発者の証明書を何らかの形でアタッチするようなプロセスを経て作成

参考

XCode7時代の .ipa 作成方法とXCode8時代の .ipa 作成方法

  • XCodeが7の頃は .ipa 作成に関して .app ファイルを渡せば xcrunPackageApplication がうまくやってくれていた
  • XCode8.3. で PackageApplication が廃止されてしまった
    • XCode8.3.2 を使う場合 xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH というメッセージが出るようになっている
  • このため、 xcrun PackageApplication の代わりに xcodebuild archive を使う必要がある
    • xcodebuild.xcarchive を作成した後、 .ipa を作成する際に exportProvisioningProfile などを自分で設定する必要がある
    • これの具体的なパス (SampleXXX的なノリなのではなく 'MyMobileApp Distribution Profile' みたいなのりでファイル名などが想像しにくい例が多い) がよくわからなくてつらい

参考

XCode 8.2 -> XCode 8.3 で Automatically manage signing が有効になっているプロジェクトにおいて .ipa へのエクスポートが失敗するように

  • [試せていない] exportOptions.plistmethod の値が development でない場合、XCodeでビルドしているときに、ログインしているアカウントが Admin でない場合、、証明書(開発者登録. キーチェーンに登録している) と Provisioning Profile (開発者とappIdに紐づいている) が揃っていても権限がたりなくて export に失敗する
    • [試せていない] CI用にadminにする?
  • [試せていない] xcodebuild -exportArchive -exportOptionsPlist /PATH/exportOptions.plist で指定する exportOptions.plistmethod の値を development にすればうまくいくかも?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>method</key>
    <string>development</string>
    <key>teamID</key>
    <string>GLPGBQ39X8</string>
</dict>
</plist>

参考

どうすればいいかわかったら今後追記しますが、詳しい人教えて欲しい感じです。

*1:上長許可あり