|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public class XCodeProjectMod | 
|---|
|  |  |  | { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private const string CODE_SIGN_DEVELOPER = ""; | 
|---|
|  |  |  | private const string CODE_SIGN_DISTRIBUTION = ""; | 
|---|
|  |  |  | private const string PROVISIONING_DEVELOPER = ""; | 
|---|
|  |  |  | private const string PROVISIONING_DISTRIBUTION = ""; | 
|---|
|  |  |  | private const string TEAM = "5X26T385YZ"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #if UNITY_IOS | 
|---|
|  |  |  | [UnityEditor.Callbacks.PostProcessBuild(999)] | 
|---|
|  |  |  | public static void OnPostprocessBuild(BuildTarget buildTarget, string path) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | string _projectPath = PBXProject.GetPBXProjectPath(path); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | PBXProject _project = new PBXProject(); | 
|---|
|  |  |  | _project.ReadFromString(File.ReadAllText(_projectPath)); | 
|---|
|  |  |  | PBXProject project = new PBXProject(); | 
|---|
|  |  |  | project.ReadFromString(File.ReadAllText(_projectPath)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | string _targetGUID = _project.TargetGuidByName(PBXProject.GetUnityTargetName()); | 
|---|
|  |  |  | string targetGUID = project.TargetGuidByName(PBXProject.GetUnityTargetName()); | 
|---|
|  |  |  | string fwTargetGUID = project.TargetGuidByName("UnityFramework"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //var _codeSign = Debug.isDebugBuild ? CODE_SIGN_DEVELOPER : CODE_SIGN_DISTRIBUTION; | 
|---|
|  |  |  | //var _provision = Debug.isDebugBuild ? PROVISIONING_DEVELOPER : PROVISIONING_DISTRIBUTION; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // BuildSetting里的相关设置 | 
|---|
|  |  |  | _project.SetBuildProperty(_targetGUID, "ENABLE_BITCODE", "NO"); | 
|---|
|  |  |  | _project.SetBuildProperty(_targetGUID, "DEVELOPMENT_TEAM", TEAM); | 
|---|
|  |  |  | project.SetBuildProperty(targetGUID, "ENABLE_BITCODE", "NO"); | 
|---|
|  |  |  | project.SetBuildProperty(targetGUID, "DEVELOPMENT_TEAM", TEAM); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _project.AddBuildProperty(_targetGUID, "OTHER_LDFLAGS", "-ObjC"); | 
|---|
|  |  |  | _project.AddBuildProperty(_targetGUID, "GCC_GENERATE_DEBUGGING_SYMBOLS", "NO"); | 
|---|
|  |  |  | project.AddBuildProperty(targetGUID, "OTHER_LDFLAGS", "-ObjC"); | 
|---|
|  |  |  | project.AddBuildProperty(targetGUID, "GCC_GENERATE_DEBUGGING_SYMBOLS", "NO"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 处理 Framework | 
|---|
|  |  |  | // FreeSDK | 
|---|
|  |  |  | _project.AddFrameworkToProject(_targetGUID, "CoreGraphics.framework", true); | 
|---|
|  |  |  | _project.AddFrameworkToProject(_targetGUID, "Security.framework", true); | 
|---|
|  |  |  | _project.AddFrameworkToProject(_targetGUID, "CoreTelephony.framework", true); | 
|---|
|  |  |  | _project.AddFrameworkToProject(_targetGUID, "StoreKit.framework", true); | 
|---|
|  |  |  | _project.AddFrameworkToProject(_targetGUID, "MobileCoreServices.framework", true); | 
|---|
|  |  |  | _project.AddFrameworkToProject(_targetGUID, "SystemConfiguration.framework", true); | 
|---|
|  |  |  | _project.AddFrameworkToProject(_targetGUID, "AdSupport.framework", true); | 
|---|
|  |  |  | //bugly | 
|---|
|  |  |  | project.AddFrameworkToProject(fwTargetGUID, "SystemConfiguration.framework", true); | 
|---|
|  |  |  | project.AddFrameworkToProject(fwTargetGUID, "Security.framework", true); | 
|---|
|  |  |  | project.AddFrameworkToProject(fwTargetGUID, "JavaScriptCore.framework", true); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 极光推送 | 
|---|
|  |  |  | // JPush | 
|---|
|  |  |  | _project.AddFrameworkToProject(_targetGUID, "CFNetwork.framework", true); | 
|---|
|  |  |  | _project.AddFrameworkToProject(_targetGUID, "CoreFoundation.framework", true); | 
|---|
|  |  |  | _project.AddFrameworkToProject(_targetGUID, "Foundation.framework", true); | 
|---|
|  |  |  | _project.AddFrameworkToProject(_targetGUID, "UIKit.framework", true); | 
|---|
|  |  |  | _project.AddFrameworkToProject(_targetGUID, "UserNotifications.framework", true); | 
|---|
|  |  |  | //三峡sdk | 
|---|
|  |  |  | project.AddFrameworkToProject(fwTargetGUID, "StoreKit.framework", true); | 
|---|
|  |  |  | //project.AddFrameworkToProject(fwTargetGUID, "SystemConfiguration.framework", true); | 
|---|
|  |  |  | project.AddFrameworkToProject(fwTargetGUID, "CFNetwork.framework", true); | 
|---|
|  |  |  | project.AddFrameworkToProject(fwTargetGUID, "CoreTelephony.framework", true); | 
|---|
|  |  |  | //project.AddFrameworkToProject(fwTargetGUID, "Security.framework", true); | 
|---|
|  |  |  | project.AddFrameworkToProject(fwTargetGUID, "CoreMotion.framework", true); | 
|---|
|  |  |  | project.AddFrameworkToProject(fwTargetGUID, "UIKit.framework", true); | 
|---|
|  |  |  | project.AddFrameworkToProject(fwTargetGUID, "CoreGraphics.framework", true); | 
|---|
|  |  |  | project.AddFrameworkToProject(fwTargetGUID, "Foundation.framework", true); | 
|---|
|  |  |  | //project.AddFrameworkToProject(fwTargetGUID, "JavaScriptCore.frameWork", true); | 
|---|
|  |  |  | project.AddFrameworkToProject(fwTargetGUID, "Accelerate.framework", true); | 
|---|
|  |  |  | project.AddFrameworkToProject(fwTargetGUID, "SafariServices.framework", true); | 
|---|
|  |  |  | project.AddFrameworkToProject(fwTargetGUID, "authenticationservices.framework", true); | 
|---|
|  |  |  | project.AddFrameworkToProject(fwTargetGUID, "LocalAuthentication.framework", true); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 处理 库文件 | 
|---|
|  |  |  | _project.AddFileToBuild(_targetGUID, _project.AddFile("/usr/lib/libz.tbd", "Frameworks/libz.tbd", PBXSourceTree.Sdk)); | 
|---|
|  |  |  | _project.AddFileToBuild(_targetGUID, _project.AddFile("/usr/lib/libsqlite3.tbd", "Frameworks/libsqlite3.tbd", PBXSourceTree.Sdk)); | 
|---|
|  |  |  | _project.AddFileToBuild(_targetGUID, _project.AddFile("/usr/lib/libc++.tbd", "Frameworks/libc++.tbd", PBXSourceTree.Sdk)); | 
|---|
|  |  |  | _project.AddFileToBuild(_targetGUID, _project.AddFile("/usr/lib/libiconv.tbd", "Frameworks/libiconv.tbd", PBXSourceTree.Sdk)); | 
|---|
|  |  |  | _project.AddFileToBuild(_targetGUID, _project.AddFile("/usr/lib/libresolv.tbd", "Frameworks/libresolv.tbd", PBXSourceTree.Sdk)); | 
|---|
|  |  |  | project.AddFileToBuild(fwTargetGUID, project.AddFile("/usr/lib/libz.tbd", "Frameworks/libz.tbd", PBXSourceTree.Sdk)); | 
|---|
|  |  |  | project.AddFileToBuild(fwTargetGUID, project.AddFile("/usr/lib/libsqlite3.tbd", "Frameworks/libsqlite3.tbd", PBXSourceTree.Sdk)); | 
|---|
|  |  |  | project.AddFileToBuild(fwTargetGUID, project.AddFile("/usr/lib/libc++.tbd", "Frameworks/libc++.tbd", PBXSourceTree.Sdk)); | 
|---|
|  |  |  | project.AddFileToBuild(fwTargetGUID, project.AddFile("/usr/lib/libiconv.tbd", "Frameworks/libiconv.tbd", PBXSourceTree.Sdk)); | 
|---|
|  |  |  | project.AddFileToBuild(fwTargetGUID, project.AddFile("/usr/lib/libresolv.tbd", "Frameworks/libresolv.tbd", PBXSourceTree.Sdk)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 针对猫儿sdk的处理 | 
|---|
|  |  |  | HandleMrSDK(_project); | 
|---|
|  |  |  | //UnityFramework | 
|---|
|  |  |  | project.AddBuildProperty(fwTargetGUID, "OTHER_LDFLAGS", "-ObjC"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | File.WriteAllText(_projectPath, _project.WriteToString()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var _capabilityMgr = new ProjectCapabilityManager(_projectPath, "game003.entitlements", PBXProject.GetUnityTargetName()); | 
|---|
|  |  |  | _capabilityMgr.AddInAppPurchase(); | 
|---|
|  |  |  | _capabilityMgr.AddPushNotifications(true); | 
|---|
|  |  |  | _capabilityMgr.WriteToFile(); | 
|---|
|  |  |  | File.WriteAllText(_projectPath, project.WriteToString()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //加推送 | 
|---|
|  |  |  | //var _capabilityMgr = new ProjectCapabilityManager(_projectPath, "game003.entitlements", PBXProject.GetUnityTargetName()); | 
|---|
|  |  |  | //_capabilityMgr.AddInAppPurchase(); | 
|---|
|  |  |  | //_capabilityMgr.AddPushNotifications(true); | 
|---|
|  |  |  | //_capabilityMgr.WriteToFile(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | BuildPlist(path); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | ModifyFile(path); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | #endif | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private static void BuildPlist(string path) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | string _plistPath = path + "/Info.plist"; | 
|---|
|  |  |  | string plistPath = path + "/Info.plist"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | PlistDocument _plist = new PlistDocument(); | 
|---|
|  |  |  | _plist.ReadFromString(File.ReadAllText(_plistPath)); | 
|---|
|  |  |  | PlistDocument plist = new PlistDocument(); | 
|---|
|  |  |  | plist.ReadFromString(File.ReadAllText(plistPath)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | PlistElementDict _rootDict = _plist.root; | 
|---|
|  |  |  | PlistElementDict _nsAppTransportSecurity = _rootDict.CreateDict("NSAppTransportSecurity"); | 
|---|
|  |  |  | _nsAppTransportSecurity.SetBoolean("NSAllowsArbitraryLoads", true); | 
|---|
|  |  |  | PlistElementDict _dict = _nsAppTransportSecurity.CreateDict("Exception Domains"); | 
|---|
|  |  |  | _dict = _dict.CreateDict("jpush.cn"); | 
|---|
|  |  |  | _dict.SetBoolean("NSIncludesSubdomains", true); | 
|---|
|  |  |  | _dict.SetBoolean("NSExceptionAllowsInsecureHTTPLoads", true); | 
|---|
|  |  |  | PlistElementDict rootDict = plist.root; | 
|---|
|  |  |  | PlistElementDict nsAppTransportSecurity = rootDict.CreateDict("NSAppTransportSecurity"); | 
|---|
|  |  |  | nsAppTransportSecurity.SetBoolean("NSAllowsArbitraryLoads", true); | 
|---|
|  |  |  | PlistElementDict dict = nsAppTransportSecurity.CreateDict("Exception Domains"); | 
|---|
|  |  |  | dict = dict.CreateDict("jpush.cn"); | 
|---|
|  |  |  | dict.SetBoolean("NSIncludesSubdomains", true); | 
|---|
|  |  |  | dict.SetBoolean("NSExceptionAllowsInsecureHTTPLoads", true); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _rootDict.SetString("NSMicrophoneUsageDescription", "使用麦克风权限"); | 
|---|
|  |  |  | _rootDict.SetString("NSPhotoLibraryAddUsageDescription", "使用相册权限,用以存储截屏的账号信息,以防忘记账号密码"); | 
|---|
|  |  |  | rootDict.SetString("NSMicrophoneUsageDescription", "使用麦克风权限"); | 
|---|
|  |  |  | rootDict.SetString("NSPhotoLibraryAddUsageDescription", "使用相册权限,用以存储截屏的账号信息,以防忘记账号密码"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _rootDict.SetString("YLChannelId", "1000"); | 
|---|
|  |  |  | _rootDict.SetString("YLPlatformId", "1000"); | 
|---|
|  |  |  | rootDict.SetString("FacebookAppID", "1749518565212194"); | 
|---|
|  |  |  | rootDict.SetString("FacebookDisplayName", "镇魔诀"); | 
|---|
|  |  |  | var array = nsAppTransportSecurity.CreateArray("LSApplicationQueriesSchemes"); | 
|---|
|  |  |  | array.AddString("fbapi"); | 
|---|
|  |  |  | array.AddString("fbauth2"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | File.WriteAllText(_plistPath, _plist.WriteToString()); | 
|---|
|  |  |  | File.WriteAllText(plistPath, plist.WriteToString()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private static void ModifyFile(string projectPath) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // -------------- UnityAppController.mm | 
|---|
|  |  |  | //读取UnityAppController.mm文件 | 
|---|
|  |  |  | //修改UnityAppController.mm 文件 | 
|---|
|  |  |  | var _xclass = new XClass(projectPath + "/Classes/UnityAppController.mm"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //在指定代码后面增加一行代码 | 
|---|
|  |  |  | _xclass.WriteBelow("#include \"PluginBase/AppDelegateListener.h\"", "#include \"UniversalSDK.h\"\n#include \"JPushService.h\""); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //引入UniversalSDK | 
|---|
|  |  |  | _xclass.WriteBelow("#include \"PluginBase/AppDelegateListener.h\"", "#include \"UniversalSDK.h\""); | 
|---|
|  |  |  | //unity交互调用的方法 | 
|---|
|  |  |  | string newCode = "\n" + | 
|---|
|  |  |  | "extern \"C\" void IOSMessageHandle(const char* jsonString) {\n" + | 
|---|
|  |  |  | "    [GetAppController().universalSDK HandleUnityMessage:[NSString stringWithUTF8String:jsonString]];\n" + | 
|---|
|  |  |  | "}"; | 
|---|
|  |  |  | _xclass.WriteBelow("extern \"C\" ScreenOrientation    UnityCurrentOrientation()   { return GetAppController().unityView.contentOrientation; }", | 
|---|
|  |  |  | newCode); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | "extern \"C\" void IOSMessageHandle(const char* jsonString) {\n" + | 
|---|
|  |  |  | "    [GetAppController().universalSDK HandleUnityMessage:[NSString stringWithUTF8String:jsonString]];\n" + | 
|---|
|  |  |  | "}"; | 
|---|
|  |  |  | _xclass.WriteBelow("extern \"C\" ScreenOrientation    UnityCurrentOrientation()   { return GetAppController().unityView.contentOrientation; }", newCode); | 
|---|
|  |  |  | //初始化UniversalSDK | 
|---|
|  |  |  | newCode = "\n" + | 
|---|
|  |  |  | "    _universalSDK = [[UniversalSDK alloc] init];\n" + | 
|---|
|  |  |  | "    [_universalSDK JPushInit:launchOptions];"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //在指定代码后面增加一大行代码 | 
|---|
|  |  |  | "    _universalSDK = [[UniversalSDK alloc] init];\n    [_universalSDK QuickSDKInit:application didFinishLaunchingWithOptions:launchOptions];"; | 
|---|
|  |  |  | _xclass.WriteBelow("[KeyboardDelegate Initialize];", newCode); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _xclass.WriteBelow("UnitySendDeviceToken(deviceToken);", "    [JPUSHService registerDeviceToken:deviceToken];"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | newCode = "UnitySendRemoteNotification(userInfo);\n" + | 
|---|
|  |  |  | "    [JPUSHService handleRemoteNotification:userInfo];\n"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _xclass.Replace("UnitySendRemoteNotification(userInfo);", newCode); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | newCode = "[application setApplicationIconBadgeNumber:0];\n" + | 
|---|
|  |  |  | "    [application cancelAllLocalNotifications];\n"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _xclass.WriteBelow("::printf(\"-> applicationWillEnterForeground()\\n\");", newCode); | 
|---|
|  |  |  | _xclass.WriteBelow("::printf(\"-> applicationDidEnterBackground()\\n\");", "[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];\n"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | newCode = "    CGRect _winSize = [UIScreen mainScreen].bounds;\n" + | 
|---|
|  |  |  | "    if(KIsiPhoneX){\n" + | 
|---|
|  |  |  | "        _winSize.origin.x = 40;\n" + | 
|---|
|  |  |  | "        _winSize.size.width -= 92;\n" + | 
|---|
|  |  |  | "        _winSize.size.height -= 15;\n" + | 
|---|
|  |  |  | "    }\n" + | 
|---|
|  |  |  | "    _window = [[UIWindow alloc] initWithFrame:_winSize];\n"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _xclass.Replace("_window         = [[UIWindow alloc] initWithFrame: [UIScreen mainScreen].bounds];", newCode); | 
|---|
|  |  |  | // -------------- UnityAppController.h | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //修改UnityAppController.h 文件 | 
|---|
|  |  |  | _xclass = new XClass(projectPath + "/Classes/UnityAppController.h"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _xclass.WriteBelow("@class DisplayConnection;", "@class UniversalSDK;"); | 
|---|
|  |  |  | _xclass.WriteBelow("// auto-rotation view contoller goes to index=0", "UniversalSDK* _universalSDK;"); | 
|---|
|  |  |  | _xclass.WriteBelow("DisplayConnection*  _mainDisplay;", "UniversalSDK* _universalSDK;"); | 
|---|
|  |  |  | _xclass.WriteBelow("@property (readonly, copy, nonatomic) DisplayConnection*    mainDisplay;", | 
|---|
|  |  |  | "@property (readonly, copy, nonatomic) UniversalSDK*         universalSDK;"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _xclass = new XClass(projectPath + "/Classes/UI/UnityView.mm"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _xclass.WriteBelow("#include \"Unity/UnityMetalSupport.h\"", "#include \"UniversalSDK.h\""); | 
|---|
|  |  |  | _xclass.WriteBelow("_curOrientation = OrientationAfterTransform(_curOrientation, TransformBetweenOrientations(from, to));", | 
|---|
|  |  |  | @"if(KIsiPhoneX) { | 
|---|
|  |  |  | CGRect _winSize = [UIScreen mainScreen].bounds; | 
|---|
|  |  |  | if(to == landscapeLeft){ | 
|---|
|  |  |  | _winSize.origin.x = 0; | 
|---|
|  |  |  | _winSize.origin.y = 0; | 
|---|
|  |  |  | _winSize.size.width = 720; | 
|---|
|  |  |  | _winSize.size.height = 360; | 
|---|
|  |  |  | }else if(to == landscapeRight){ | 
|---|
|  |  |  | _winSize.origin.x = 0; | 
|---|
|  |  |  | _winSize.origin.y = -15; | 
|---|
|  |  |  | _winSize.size.width = 720; | 
|---|
|  |  |  | _winSize.size.height = 360; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | [self setFrame:_winSize]; | 
|---|
|  |  |  | }"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _xclass = new XClass(projectPath + "/Classes/UI/UnityViewControllerBaseiOS.mm"); | 
|---|
|  |  |  | _xclass.Replace("return res;", "return UIRectEdgeAll;"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private static string GetBuildPath() | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | s_IsAppend = true; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | BuildPipeline.BuildPlayer(ClientPackage.baseLevels, _buildPath, BuildTarget.iOS, BuildOptions.Il2CPP | BuildOptions.AcceptExternalModificationsToPlayer); | 
|---|
|  |  |  | PlayerSettings.SetScriptingBackend(BuildTargetGroup.iOS, ScriptingImplementation.IL2CPP); | 
|---|
|  |  |  | BuildPipeline.BuildPlayer(ClientPackage.baseLevels, _buildPath, BuildTarget.iOS, BuildOptions.AcceptExternalModificationsToPlayer); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static void BuildIOSProject_Replace() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | s_IsAppend = false; | 
|---|
|  |  |  | BuildPipeline.BuildPlayer(ClientPackage.baseLevels, GetBuildPath(), BuildTarget.iOS, BuildOptions.Il2CPP); | 
|---|
|  |  |  | PlayerSettings.SetScriptingBackend(BuildTargetGroup.iOS, ScriptingImplementation.IL2CPP); | 
|---|
|  |  |  | BuildPipeline.BuildPlayer(ClientPackage.baseLevels, GetBuildPath(), BuildTarget.iOS, BuildOptions.None); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #if UNITY_IOS | 
|---|
|  |  |  | [MenuItem("Build/ipa")] | 
|---|
|  |  |  | public static void BuildIPA() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var _p = new System.Diagnostics.Process(); | 
|---|
|  |  |  | _p.StartInfo.FileName = "osascript"; | 
|---|
|  |  |  | _p.StartInfo.Arguments = string.Format("-e 'tell application \"Terminal\" \n activate \n do script \"cd {0} && sh {1} {2}\" \n end tell'", | 
|---|
|  |  |  | var p = new System.Diagnostics.Process(); | 
|---|
|  |  |  | p.StartInfo.FileName = "osascript"; | 
|---|
|  |  |  | p.StartInfo.Arguments = string.Format("-e 'tell application \"Terminal\" \n activate \n do script \"cd {0} && sh {1} {2}\" \n end tell'", | 
|---|
|  |  |  | Application.dataPath + "/../", | 
|---|
|  |  |  | "buildipa.sh", | 
|---|
|  |  |  | GetBuildPath()); | 
|---|
|  |  |  | _p.StartInfo.UseShellExecute = false; | 
|---|
|  |  |  | _p.StartInfo.RedirectStandardOutput = false; | 
|---|
|  |  |  | _p.Start(); | 
|---|
|  |  |  | _p.WaitForExit(); | 
|---|
|  |  |  | p.StartInfo.UseShellExecute = false; | 
|---|
|  |  |  | p.StartInfo.RedirectStandardOutput = false; | 
|---|
|  |  |  | p.Start(); | 
|---|
|  |  |  | p.WaitForExit(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | private static void HandleMrSDK(PBXProject project) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | string _mrPlistPath = Application.dataPath + "/Plugins/iOS/MyMRSDK/MRSDKInfo.plist"; | 
|---|
|  |  |  | if (File.Exists(_mrPlistPath)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | string _targetGUID = project.TargetGuidByName(PBXProject.GetUnityTargetName()); | 
|---|
|  |  |  | string _fileGUID = project.AddFile(_mrPlistPath, "Frameworks/Plugins/iOS/MyMRSDK/MRSDKInfo.plist"); | 
|---|
|  |  |  | project.AddFileToBuild(_targetGUID, _fileGUID); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | #endif | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|