diff --git a/Assets/Scripts/GoogleSignInIOSBuildPatch.cs b/Assets/Scripts/GoogleSignInIOSBuildPatch.cs new file mode 100644 index 00000000..34446859 --- /dev/null +++ b/Assets/Scripts/GoogleSignInIOSBuildPatch.cs @@ -0,0 +1,63 @@ +#if UNITY_IOS +using System.IO; +using UnityEditor; +using UnityEditor.Callbacks; +using UnityEditor.iOS.Xcode; +using UnityEngine; + +public class GoogleSignInIOSBuildPatch +{ + [PostProcessBuild(100)] + public static void OnPostProcessBuild(BuildTarget buildTarget, string pathToBuiltProject) + { + if (buildTarget != BuildTarget.iOS) return; + + string plistPath = Path.Combine(pathToBuiltProject, "Info.plist"); + + // === Modify Info.plist === + PlistDocument plist = new PlistDocument(); + plist.ReadFromFile(plistPath); + PlistElementDict rootDict = plist.root; + + // 1. Add GIDClientID + rootDict.SetString("GIDClientID", GameConstants.iOS_ClientID); + + // 2. Add custom URL scheme + PlistElementArray urlTypes = rootDict.CreateArray("CFBundleURLTypes"); + PlistElementDict urlDict = urlTypes.AddDict(); + PlistElementArray schemes = urlDict.CreateArray("CFBundleURLSchemes"); + schemes.AddString(GameConstants.iOS_URL_Scheme); + + plist.WriteToFile(plistPath); + Debug.Log("✅ Info.plist patched with GIDClientID and CFBundleURLSchemes."); + + // === Modify UnityAppController.mm === + string appControllerPath = Path.Combine(pathToBuiltProject, "Classes", "UnityAppController.mm"); + if (!File.Exists(appControllerPath)) + { + Debug.LogWarning("⚠️ UnityAppController.mm not found. Skipping patch."); + return; + } + + string content = File.ReadAllText(appControllerPath); + string injection = $"[GIDSignIn sharedInstance].clientID = @\"{GameConstants.iOS_ClientID}\";"; + + if (!content.Contains(injection)) + { + string marker = "didFinishLaunchingWithOptions:(NSDictionary*)launchOptions"; + int index = content.IndexOf(marker); + if (index > -1) + { + int insertAfter = content.IndexOf("{", index) + 1; + content = content.Insert(insertAfter, "\n " + injection); + File.WriteAllText(appControllerPath, content); + Debug.Log("✅ UnityAppController.mm patched with GIDClientID."); + } + else + { + Debug.LogWarning("⚠️ didFinishLaunchingWithOptions not found in UnityAppController.mm"); + } + } + } +} +#endif diff --git a/Assets/Scripts/GoogleSignInIOSBuildPatch.cs.meta b/Assets/Scripts/GoogleSignInIOSBuildPatch.cs.meta new file mode 100644 index 00000000..6024a282 --- /dev/null +++ b/Assets/Scripts/GoogleSignInIOSBuildPatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 74a4088da3768004389d6516bc9a559a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: