はじめに
macOSおよびXcodeは定期的にバージョンアップの必要があります。
今回、macOSのアップデートに伴いXcodeをXcode14にアップデートしたところ
コマンドラインからビルドする際に問題が発生したためその時の対応をまとめます。
環境
- macOS Monterey
- Unity 2019.4.26f1
アプデ後に発生した問題
当環境ではiOSビルドをMac上でコマンドラインから行っているのですが
アプデ後、iOSアプリをArchiveしようとした際に
does not contain bitcode.
とエラーがでてipaファイルが作成できなくなりました。
原因を調べたところ以下のような記事を発見。
iOSアプリのArchiveでdoes not contain bitcodeと言われる解決方法
Xcode14からBitcodeオプションは非推奨になった
要はXcode上の設定で
「Build Settings > Build Options」の「EnableBitcode」が「Yes」になっているとエラーになるようでした。
こちらを「No」に変更すれば、Xcodeから「Archive」→「DisrtibuteApp」を行うことで
ipaファイルのエクスポートは一応可能になりました。
ですが、これではコマンドライン実行でipaファイルの作成まで一発で完了できないので
(Unityエディタ上でXcodeプロジェクトビルド、Xcodeから「Archive」を行う必要がある)
Unity上で対応を行うことにしました。
対応
Unityの「OnPostprocessBuild」を使用してビルド後にXcodeプロジェクトの設定を書き換えて
コマンドライン実行でipaファイルの作成まで通るようにしました。
具体的なコードは以下のようになります。
// OnPostprocessBuild:ビルドの完了後のコールバック処理として実行される
public void OnPostprocessBuild(BuildReport report) {
string projectPath = PBXProject.GetPBXProjectPath(report.summary.outputPath);
setBitCode(projectPath);
}
// Bitcodeのパラメータをセット
private void setBitCode(string projectPath){
PBXProject localPbxProject = new PBXProject();
localPbxProject.ReadFromFile(projectPath);
// Main
string target = localPbxProject.GetUnityMainTargetGuid();
localPbxProject.SetBuildProperty(target, "ENABLE_BITCODE", "NO");
// ビルドターゲットが複数ある場合はそちらの設定も変更する
localPbxProject.WriteToFile(projectPath);
}
上記の処理を追加することによりビルド後のxcworkspace上で
「EnableBitcode」の設定が自動で「No」になります。
最後に
以上の対応でコマンドラインビルドからのipaファイル作成が可能になりました。
ビルドターゲットを指定する部分は環境に応じてターゲットの追加が必要になるかと思います。