アプリ起動時
public void Start() { #if UNITY_IOS // iOS ATT 対応 var status = ATTrackingStatusBinding.GetAuthorizationTrackingStatus(); switch (status) { case ATTrackingStatusBinding.AuthorizationTrackingStatus.NOT_DETERMINED: // ATT 許可依頼ダイアログを表示 ATTrackingStatusBinding.RequestAuthorizationTracking(); break; case ATTrackingStatusBinding.AuthorizationTrackingStatus.AUTHORIZED: //TODO: トラッキングが許可された場合の処理 break; case ATTrackingStatusBinding.AuthorizationTrackingStatus.DENIED: case ATTrackingStatusBinding.AuthorizationTrackingStatus.RESTRICTED: //TODO: トラッキングが不許可・制限された場合の処理 break; } #endif }
そんでもっとビルド時
#if UNITY_IOS using UnityEditor; using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEditor.iOS.Xcode.Extensions; public class ATTLocalizationPostProcess { [PostProcessBuild(999)] public static void OnPostProcessBuild(BuildTarget target, string pathToBuildProject) { if (target != BuildTarget.iOS) return; string projPath = PBXProject.GetPBXProjectPath(pathToBuildProject); var proj = new PBXProject(); proj.ReadFromFile(projPath); string targetGUID = proj.GetUnityMainTargetGuid(); var translations = new Dictionary<string, string> { { "en", "This identifier will be used to deliver personalized ads to you." }, { "ja", "この識別子は、パーソナライズされた広告を配信するために使用されます。" }, { "id", "Pengenal ini akan digunakan untuk menayangkan iklan yang dipersonalisasi kepada Anda." }, { "fr", "Cet identifiant sera utilisé pour vous fournir des publicités personnalisées." }, { "es", "Este identificador se utilizará para ofrecerte anuncios personalizados." }, { "it", "Questo identificatore verrà utilizzato per fornirti annunci personalizzati." }, { "de", "Diese Kennung wird verwendet, um dir personalisierte Werbung zu liefern." }, { "ko", "이 식별자는 맞춤형 광고를 제공하는 데 사용됩니다." }, { "ar", "سيتم استخدام هذا المعرّف لتقديم إعلانات مخصصة لك." }, { "af", "Hierdie identifiseerder sal gebruik word om persoonlike advertensies aan jou te lewer." }, { "uk", "Цей ідентифікатор буде використовуватися для показу персоналізованої реклами." }, { "eu", "Identifikatzaile hau iragarki pertsonalizatuak eskaintzeko erabiliko da." }, { "bg", "Този идентификатор ще се използва за предоставяне на персонализирани реклами." }, { "ca", "Aquest identificador s'utilitzarà per oferir anuncis personalitzats." }, { "cs", "Tento identifikátor bude použit k doručení personalizovaných reklam." }, { "pt", "Este identificador será usado para entregar anúncios personalizados para você." }, { "da", "Denne identifikator vil blive brugt til at levere personlige annoncer til dig." }, { "nl", "Deze id wordt gebruikt om gepersonaliseerde advertenties aan je te leveren." }, { "et", "See identifikaatorit kasutatakse isikupärastatud reklaamide edastamiseks teile." }, }; foreach (var kv in translations) { string lang = kv.Key; string text = kv.Value; // パス生成 string relFolderPath = $"{lang}.lproj"; string relFilePath = Path.Combine(relFolderPath, "InfoPlist.strings"); string absFolderPath = Path.Combine(pathToBuildProject, relFolderPath); string absFilePath = Path.Combine(absFolderPath, "InfoPlist.strings"); // 書き込み Directory.CreateDirectory(absFolderPath); File.WriteAllText(absFilePath, $"\"NSUserTrackingUsageDescription\" = \"{text}\";\n"); // Xcodeに登録 string fileGuid = proj.AddFile(relFilePath, relFilePath, PBXSourceTree.Source); proj.AddFileToBuild(targetGUID, fileGuid); // ← これだけでOKな場合が多い Debug.Log($"✅ Added localization: {relFilePath}"); } proj.WriteToFile(projPath); Debug.Log("✅ ATTローカライズ書き出し完了!"); } } #endif
info.plist 追加
#if UNITY_IOS using UnityEditor; using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; using System.IO; public class PlistModifier { [PostProcessBuild(888)] public static void OnPostProcessBuild(BuildTarget target, string pathToBuildProject) { if (target != BuildTarget.iOS) return; string plistPath = Path.Combine(pathToBuildProject, "Info.plist"); var plist = new PlistDocument(); plist.ReadFromFile(plistPath); PlistElementDict rootDict = plist.root; rootDict.SetString("NSUserTrackingUsageDescription", "This identifier will be used to deliver personalized ads to you."); plist.WriteToFile(plistPath); } } #endif
スクリプトでは追加できなかった、xx.lproj をドラッグアンドドロップでXcodeのプロジェクトに追加