しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

Unity で iOS 14 の ATT 対応の Xcode 設定手順を自動化する

※ これは 2021/04/09 時点の Unity 2020.3.3f1, Xcode 12.4 の情報です

最新版では動作が異なる可能性がありますのでご注意ください

前回までで AdMob、Firebase の iOS 14 ATT 対応を行ったが、下記で触れている Xcode の設定手順は一部手でやる必要がありめんどくさい

というわけで今回はこの手順を省けるよう自動化してみたい

というわけで今回は広告表示のほぼデファクトになりつつある AdMob SDK を利用する場合、上記前回の手順に加えて必要になる iOS 14 ATT 対応を試してみる

まずは下記のような PostProcessBuild.csAssets/Editor 直下に作る

using System.IO;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
using UnityEngine;

/// <summary>
/// ビルド後処理。
/// </summary>
public class PostprocessBuild : MonoBehaviour
{
    /// <summary>
    /// ビルド後処理
    /// </summary>
    /// <param name="buildTarget">ビルドターゲット情報</param>
    /// <param name="path">出力先パス</param>
    [PostProcessBuild(1)]
    public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
    {
        if (buildTarget == BuildTarget.iOS)
        {
            BuildIOS(buildTarget, path);
        }
    }

    /// <summary>
    /// iOS 用ビルド後処理
    /// </summary>
    /// <param name="buildTarget">ビルドターゲット情報</param>
    /// <param name="path">出力先パス</param>
    public static void BuildIOS(BuildTarget buildTarget, string path)
    {
        var exportPath = new DirectoryInfo(path).FullName;
        var projectPath = new DirectoryInfo(
            Path.Combine(Path.Combine(exportPath, "Unity-iPhone.xcodeproj"), "project.pbxproj")).FullName;

        // Unity が出力した Xcode プロジェクトファイルを読み込む
        var project = new PBXProject();
        project.ReadFromFile(projectPath);

        // Xcode プロジェクト内のターゲット参照
        var frameworks = project.GetUnityMainTargetGuid();

        // ATT 用フレームワーク参照追加
        project.AddFrameworkToProject(frameworks, "AppTrackingTransparency.framework", false);

        // Info.plist の書き換え
        var plist = new PlistDocument();
        var plistPath = Path.Combine(path, "Info.plist");
        plist.ReadFromFile(plistPath);

        // ATT 用説明文追加
        plist.root.SetString("NSUserTrackingUsageDescription", "上記は広告表示と利用状況の分析に使用されます");

        // Xcode のプロジェクトファイルに書き戻し
        plist.WriteToFile(plistPath);
        project.WriteToFile(projectPath);
    }
}

フレームワーク参照の追加先が Unity-iPhoneではなく UnityFramework なのは注意

あとはビルドするだけ!できた Xcode のプロジェクトを開くと・・・

フレームワーク参照と

ATT フレームワーク参照

ダイアログ用の説明文も自動で追加されている!

ATT の説明文

これならかんたん