😎

UnityでビルドしたiOSアプリのビルド設定を自動で変更する

2024/11/12に公開

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 DestinationsMac (Designed for iPad)Apple Vision (Designed for iPad) が存在している。

これにより iOS 向けに作成したゲームが Mac や Apple Vision で動かせるわけだが、何やかんや動かないことも多い。

自分のゲームでは Admob で広告を実装しているが、User Messaging Platform を使って出した同意フォームが Mac ではクリックできない問題がある。

https://github.com/googleads/googleads-mobile-unity/issues/3674

そこで、致し方なくこの二つを削除するよう設定を変更している。

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 に渡す引数を調べるには以下のようにするとよい。

  1. 生成した Xcode プロジェクトのディレクトリに cd
  2. git init && git add -A
    1. このとき、Libraries Pods Il2CppOutputProject あたりがあると add に時間がかかるため ignore しておく
  3. Xcode でプロジェクトの任意の設定を変更
  4. git diff

これで Xcode で変更したプロジェクトがどのように設定ファイルに影響を及ぼしたかがわかるので、それをそのまま引数として渡す。

GitHubで編集を提案

Discussion