😎
UnityでビルドしたiOSアプリのビルド設定を自動で変更する
Unity で iOS アプリをビルドすると Xcode プロジェクトが生成されるが、Xcode で設定を書き換えてもビルドするたびに書き換えた設定はリセットされてしまう。
それをなんとかする方法。
IPostprocessBuildWithReport
Assets/Editor というディレクトリを作って、そこに IPostprocessBuildWithReport
を実装したクラスを置いておくと、ビルド完了後にスクリプトを走らせることができる。
IPreprocessBuildWithReport
というのもあってビルド前にも処理を挟めるが、あまり使うことはなさそう。
インターフェースはいたってシンプル。
BuildPostprocessor.cs
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
public class BuildPostprocessor : IPostprocessBuildWithReport {
public int callbackOrder => 1;
public void OnPostprocessBuild(BuildReport report) {
// ここで色々処理できる
}
}
使用例
例として、実際に自分が使っているスクリプトを書いておく。
Unity でビルドした Xcode のプロジェクトは、デフォルトで Supported Destinations
に Mac (Designed for iPad)
と Apple Vision (Designed for iPad)
が存在している。
これにより iOS 向けに作成したゲームが Mac や Apple Vision で動かせるわけだが、何やかんや動かないことも多い。
自分のゲームでは Admob で広告を実装しているが、User Messaging Platform を使って出した同意フォームが Mac ではクリックできない問題がある。
そこで、致し方なくこの二つを削除するよう設定を変更している。
BuildPostprocessor.cs
using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEditor.iOS.Xcode;
public class BuildPostprocessor : IPostprocessBuildWithReport {
public int callbackOrder => 1;
public void OnPostprocessBuild(BuildReport report) {
var buildTarget = report.summary.platform;
if (buildTarget == BuildTarget.iOS) ProcessForiOS(report);
}
void ProcessForiOS(BuildReport report) {
var project = new PBXProject();
var buildOutputPath = report.summary.outputPath;
var pbxProjectPath = PBXProject.GetPBXProjectPath(buildOutputPath);
project.ReadFromFile(pbxProjectPath);
var mainTarget = project.GetUnityMainTargetGuid();
project.SetBuildProperty(mainTarget, "SUPPORTS_MACCATALYST", "NO");
project.SetBuildProperty(mainTarget, "SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD", "NO");
project.SetBuildProperty(mainTarget, "SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD", "NO");
project.WriteToFile(pbxProjectPath);
}
}
設定値の調べ方
Xcode の設定変更に対応した SetBuildProperty
に渡す引数を調べるには以下のようにするとよい。
- 生成した Xcode プロジェクトのディレクトリに cd
-
git init && git add -A
- このとき、
Libraries
Pods
Il2CppOutputProject
あたりがあると add に時間がかかるため ignore しておく
- このとき、
- Xcode でプロジェクトの任意の設定を変更
git diff
これで Xcode で変更したプロジェクトがどのように設定ファイルに影響を及ぼしたかがわかるので、それをそのまま引数として渡す。
Discussion