#if UNITY_IOS using System; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; using UnityEngine; public class IOSCredentialsPostProcess : ScriptableObject { public IOSCredentialsList ConfigurationsList; [PostProcessBuild(0)] public static void OnPostProcess(BuildTarget buildTarget, string buildPath) { if(buildTarget != BuildTarget.iOS) return; // var config = PickEntitlementsConfig(); // if(config == null) // return; // // var entitlements_path = AssetDatabase.GetAssetPath(config.Entitlements); // var proj_path = PBXProject.GetPBXProjectPath(buildPath); // var proj = new PBXProject(); // proj.ReadFromFile(proj_path); // // var target_name = "Unity-iPhone"; // // var target_name = PBXProject.GetUnityTargetName(); // var target_guid = proj.TargetGuidByName(target_name); // var file_name = Path.GetFileName(entitlements_path); // var dst = $"{buildPath}/{target_name}/{file_name}"; // FileUtil.CopyFileOrDirectory(entitlements_path, dst); // proj.AddFile($"{target_name}/{file_name}", file_name); // proj.AddBuildProperty(target_guid, "CODE_SIGN_ENTITLEMENTS", $"{target_name}/{file_name}"); // AddLocalFile(buildPath, proj, target_guid, "Assets", "GoogleService-Info.plist"); // proj.WriteToFile(proj_path); } public static void ReplaceFirebasePlistAccordingToBundleID() { ReplaceFirebasePlist(PickEntitlementsConfig()); } static void ReplaceFirebasePlist(IOSCredentialsList.Configuration config) { var firebase_plist_path = AssetDatabase.GetAssetPath(config.FirebasePlist); var firebase_expected_path = $"{Application.dataPath}/GoogleService-Info.plist"; File.Copy(firebase_plist_path, firebase_expected_path, overwrite: true); } static void AddLocalFile(string buildPath, PBXProject proj, string targetName, string fileDir, string fileName) { var filePath = Path.Combine(fileDir, fileName); File.Copy(filePath, Path.Combine(buildPath, fileName)); proj.AddFileToBuild(targetName, proj.AddFile(fileName, fileName)); } static IOSCredentialsList.Configuration PickEntitlementsConfig() { var dummy = ScriptableObject.CreateInstance(); try { string app_id = $"{Settings.IOS_TEAM_ID}.{Settings.PACKAGE_ID_FULL}"; string search_term = $"{app_id}"; var options = dummy.ConfigurationsList.Configurations; for(int i = 0; i < options.Count; i++) { var option = options[i]; if(option == null) continue; var path = AssetDatabase.GetAssetPath(option.Entitlements); string contents = File.ReadAllText(path); if(contents.Contains(search_term)) { Debug.Log($"Using iOS entitlements file {path} and Firebase plist {option.FirebasePlist.name}"); return option; } } throw new Exception($"None of listed entitlements match current App Id '{app_id}'!"); } finally { ScriptableObject.DestroyImmediate(dummy); } } } #endif