アプリ起動時
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のプロジェクトに追加