#if UNITY_IOS using System.IO; using UnityEditor; using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; using UnityEngine; public class iOSPostBuildProcessor : MonoBehaviour { [PostProcessBuild] public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { if (buildTarget != BuildTarget.iOS) return; const string kURLScheme = "internetidentity"; const string kURLIdentifier = "authorize"; // Patch the plist file to add URL schemes. PatchPlist(path, kURLScheme, kURLIdentifier); } private static void PatchPlist(string path, string urlScheme, string urlIdentifier) { var plistPath = path + "/Info.plist"; var plist = new PlistDocument(); plist.ReadFromString(File.ReadAllText(plistPath)); var rootDict = plist.root; var needsToWriteChanges = false; const string kURLTypesKey = "CFBundleURLTypes"; const string kURLNameKey = "CFBundleURLName"; const string kURLSchemeKey = "CFBundleURLSchemes"; if (!rootDict.values.ContainsKey(kURLTypesKey)) { var urlTypesArray = rootDict.CreateArray(kURLTypesKey); var itemDict = urlTypesArray.AddDict(); itemDict.SetString(kURLNameKey, urlIdentifier); var schemeArray = itemDict.CreateArray(kURLSchemeKey); schemeArray.AddString(urlScheme); needsToWriteChanges = true; } else { // TODO: Check if the url shceme has been updated. } if (needsToWriteChanges) { File.WriteAllText(plistPath, plist.WriteToString()); } } } #endif