#if UNITY_IOS || UNITY_TVOS #define UNITY_XCODE_EXTENSIONS_AVAILABLE #endif using UnityEditor; using System.IO; using UnityEngine; #if UNITY_IOS && UNITY_EDITOR using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; #endif using AppleAuth.Editor; #if UNITY_XCODE_EXTENSIONS_AVAILABLE //using UnityEditor.iOS.Xcode; #endif public static class XCodePostProcessBuild { #if UNITY_IOS && UNITY_EDITOR private static readonly string[] csAddFrameworks = new string[]{ "Security.framework","WebKit.framework", "CoreGraphics.framework" }; [PostProcessBuild(1)] public static void OnPostprocessBuild(BuildTarget target, string path) { if (BuildTarget.iOS != target) { return; } string projectPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; SetFrameworksAndBuildSettings(projectPath); SetInfoList(path, "com.xmjssvr.BowArrow", "wxfe29f3f64e3c5d16"); SetAssociatedDomains(projectPath, "xmjssvr.cn"); setSignInWithApple(projectPath); } private static void SetFrameworksAndBuildSettings(string path) { PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(path)); string target = proj.GetUnityMainTargetGuid(); string frameworkGuid = proj.GetUnityFrameworkTargetGuid(); Debug.Log("Target Name is " + target); // 设置 BuildSettings proj.AddBuildProperty(target, "Other Linker Flags", "-Objc -all_load"); proj.SetBuildProperty(target, "ENABLE_BITCODE", "NO"); proj.SetBuildProperty(frameworkGuid, "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); } 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); // 在 “info”标签栏的“LSApplicationQueriesSchemes“添加weixin wechat和weixinULAPI PlistElementArray wxArray = plist.root.CreateArray("LSApplicationQueriesSchemes"); wxArray.AddString("weixin"); wxArray.AddString("wechat"); wxArray.AddString("weixinULAPI"); PlistElementDict ed = plist.root; ed.SetString("NSBluetoothAlwaysUsageDescription", "您是否允此App使用蓝牙,来搜索和连接设备?"); ed.SetString("NSBluetoothPeripheralUsageDescription", "您是否允此App使用蓝牙,来搜索和连接设备?"); ed.SetString("NSCameraUsageDescription", "App需要您的同意,才能访问照相机"); ed.SetString("NSPhotoLibraryUsageDescription", "App需要您的同意,才能访问相册"); ed.SetString("NSLocationWhenInUseUsageDescription", "我们需要通过您的地理位置信息获取您周边的相关数据"); ed.SetString("NSLocationAlwaysUsageDescription", "我们需要通过您的地理位置信息获取您周边的相关数据"); 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.WriteToFile(); } // 设置Associated Domains public static void setSignInWithApple(string pbxProjectPath) { //默认 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 project = new PBXProject(); project.ReadFromString(System.IO.File.ReadAllText(pbxProjectPath)); var entitlements = new ProjectCapabilityManager(pbxProjectPath, entitlementsFileName, targetName, project.GetUnityMainTargetGuid()); entitlements.AddSignInWithAppleWithCompatibility(project.GetUnityFrameworkTargetGuid()); entitlements.WriteToFile(); } #endif }