#if UNITY_IOS && UNITY_EDITOR using UnityEditor; using System.IO; using UnityEngine; using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; using System; #endif public static class XCodePostProcessBuild { #if UNITY_IOS && UNITY_EDITOR private static readonly string[] csAddFrameworks = new string[]{ "Security.framework","WebKit.framework", "CoreGraphics.framework" }; [PostProcessBuild(11)] public static void OnPostprocessBuild(BuildTarget buildTarget, string pathToBuiltProject) { if (BuildTarget.iOS != buildTarget) { return; } string projectPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; SetFrameworksAndBuildSettings(projectPath); AddGooglePlist(pathToBuiltProject,projectPath); SetInfoList(pathToBuiltProject, "com.ZhiXingPai.PowerFun", "wxe3573a84e7e29902"); SetAssociatedDomains(projectPath, "wx.powerfun.com.cn"); Assets.NativeLocale.AddLocalizedStringsIOS(pathToBuiltProject, Path.Combine(Application.dataPath, "Editor/Locale")); } private static void AddGooglePlist(string pathToBuiltProject,string path) { PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(path)); // This is the Xcode target in the generated project string target = proj.GetUnityMainTargetGuid(); // Copy plist from the project folder to the build folder FileUtil.CopyFileOrDirectory("Assets/Plugins/iOS/GoogleService-Info.plist", pathToBuiltProject + "/GoogleService-Info.plist"); proj.AddFileToBuild(target, proj.AddFile("GoogleService-Info.plist", "GoogleService-Info.plist")); // Write PBXProject object back to the file proj.WriteToFile(path); } private static void SetFrameworksAndBuildSettings(string path) { PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(path)); string target = proj.GetUnityMainTargetGuid(); Debug.Log("Target Name is " + target); // 设置 BuildSettings proj.AddBuildProperty(target, "Other Linker Flags", "-Objc -all_load"); proj.SetBuildProperty(target, "ENABLE_BITCODE", "NO"); //根据微信SDK文档的要求,加入相关的Frameworks for (int i = 0; i < csAddFrameworks.Length; ++i) { if (!proj.ContainsFramework(target, csAddFrameworks[i])) proj.AddFrameworkToProject(target, csAddFrameworks[i], false); } //苹果登录配置项 //proj.AddCapability(target, PBXCapabilityType.SignInWithApple); proj.AddFrameworkToProject(proj.GetUnityFrameworkTargetGuid(), "AuthenticationServices.framework", false); //移除无用配置项 proj.RemoveFrameworkFromProject(proj.GetUnityFrameworkTargetGuid(), "Chromium Embedded Framework.framework"); proj.SetBuildProperty(proj.ProjectGuid(), "ENABLE_BITCODE", "NO"); proj.SetBuildProperty(proj.ProjectGuid(), "CLANG_ENABLE_MODULES", "YES"); File.WriteAllText(path, proj.WriteToString()); } public static void SetInfoList(string buildPath, string wxUrlName, string wxScheme) { string listPath = buildPath + "/Info.plist"; PlistDocument plist = new PlistDocument(); plist.ReadFromString(File.ReadAllText(listPath)); // 在“info”标签栏的“URL type“添加“URL scheme”,值为你在微信后台注册的应用程序的 AppID PlistElementArray urlArray = plist.root.CreateArray("CFBundleURLTypes"); PlistElementDict dict = urlArray.AddDict(); dict.SetString("CFBundleTypeRole", "Editor"); dict.SetString("CFBundleURLName", wxUrlName); PlistElementArray urlSchemes = dict.CreateArray("CFBundleURLSchemes"); urlSchemes.AddString(wxScheme); PlistElementDict dictMine = urlArray.AddDict(); dictMine.SetString("CFBundleTypeRole", "Editor"); dictMine.SetString("CFBundleURLName", "powerfunx"); PlistElementArray urlSchemesMine = dictMine.CreateArray("CFBundleURLSchemes"); urlSchemesMine.AddString("powerfunx"); PlistElementDict dictGG = urlArray.AddDict(); dictGG.SetString("CFBundleTypeRole", "Editor"); dictGG.SetString("CFBundleURLName", "google"); PlistElementArray urlSchemesGG = dictGG.CreateArray("CFBundleURLSchemes"); urlSchemesGG.AddString("com.googleusercontent.apps.492440200766-spo9287smn7epmlarib2pek9kficsq86"); // 在 “info”标签栏的“LSApplicationQueriesSchemes“添加weixin wechat和weixinULAPI PlistElementArray wxArray = plist.root.CreateArray("LSApplicationQueriesSchemes"); wxArray.AddString("weixin"); wxArray.AddString("wechat"); wxArray.AddString("weixinULAPI"); wxArray.AddString("powerfun"); // 设置转向 //var orientations = plist.root.CreateArray("UISupportedInterfaceOrientations"); //orientations.AddString("UIInterfaceOrientationLandscapeRight"); //orientations.AddString("UIInterfaceOrientationLandscapeLeft"); PlistElementDict qxLoc = plist.root.CreateDict("NSLocationWhenInUseUsageDescription"); qxLoc.SetBoolean("NSLocationWhenInUseUsageDescription", true); plist.root.SetString("NSCameraUsageDescription","Use the camera to scan the QR code or take a photo or take a video to upload."); plist.root.SetString("NSPhotoLibraryUsageDescription", "Need to access your image file to upload."); plist.root.SetString("NSLocationWhenInUseUsageDescription", "Need to get your geographic location in order to push the route for you."); plist.root.SetBoolean("ITSAppUsesNonExemptEncryption", false); File.WriteAllText(listPath, plist.WriteToString()); } // 设置Associated Domains public static void SetAssociatedDomains(string pbxProjectPath, string domainUrl) { //默认 Target Name, 你自己的可能不一样 string targetName = "Unity-iPhone"; //Set the entitlements file name to what you want but make sure it has this extension string entitlementsFileName = "my_app.entitlements"; var entitlements = new ProjectCapabilityManager(pbxProjectPath, entitlementsFileName, targetName); entitlements.AddAssociatedDomains(new string[] { "applinks:" + domainUrl }); //苹果登录 entitlements.AddSignInWithApple(); entitlements.AddPushNotifications(false); entitlements.WriteToFile(); } #endif }