public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { if (buildTarget == BuildTarget.iOS) { string projPath = PBXProject.GetPBXProjectPath(path); PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string target = proj.TargetGuidByName("Unity-iPhone"); // システムのフレームワークを追加 proj.AddFrameworkToProject(target, "AssetsLibrary.framework", false); // 自前のフレームワークを追加 CopyAndReplaceDirectory("Assets/Lib/mylib.framework", Path.Combine(path, "Frameworks/mylib.framework")); proj.AddFileToBuild(target, proj.AddFile("Frameworks/mylib.framework", "Frameworks/mylib.framework", PBXSourceTree.Source)); // ファイルを追加 var fileName = "my_file.xml"; var filePath = Path.Combine("Assets/Lib", fileName); File.Copy(filePath, Path.Combine(path, fileName)); proj.AddFileToBuild(target, proj.AddFile(fileName, fileName, PBXSourceTree.Source)); // Yosemiteでipaが書き出せないエラーに対応するための設定 proj.SetBuildProperty(target, "CODE_SIGN_RESOURCE_RULES_PATH", "$(SDKROOT)/ResourceRules.plist"); // フレームワークの検索パスを設定・追加 proj.SetBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(inherited)"); proj.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(PROJECT_DIR)/Frameworks"); // 書き出し File.WriteAllText(projPath, proj.WriteToString()); } }
public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject) { if (target == BuildTarget.iOS) { //Disable metal for the remote display sample. Metal is not supported due to shaders used in the source Unity sample. PlayerSettings.SetUseDefaultGraphicsAPIs(BuildTarget.iOS, false); GraphicsDeviceType[] apis = { GraphicsDeviceType.OpenGLES2 }; PlayerSettings.SetGraphicsAPIs(BuildTarget.iOS, apis); // We use UnityEditor.iOS.Xcode API which only exists in iOS editor module #if UNITY_IOS string projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; UnityEditor.iOS.Xcode.PBXProject proj = new UnityEditor.iOS.Xcode.PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string projTarget = proj.TargetGuidByName("Unity-iPhone"); var file = "ULSGPUAssets.bin"; var dstLocalPath = "Frameworks/" + file; var dstPath = Path.Combine(pathToBuiltProject, dstLocalPath); File.Copy("Assets/ULSFaceTracker/Plugins/iOS/" + file, dstPath, true); proj.AddFileToBuild(projTarget, proj.AddFile(dstLocalPath, dstLocalPath)); File.WriteAllText(projPath, proj.WriteToString()); #endif } else if (target == BuildTarget.StandaloneWindows || target == BuildTarget.StandaloneWindows64) { string path = pathToBuiltProject.Substring(0, pathToBuiltProject.IndexOf(".exe")) + "_Data/Plugins/model"; FileUtil.CopyFileOrDirectory("Assets/ULSFaceTracker/Plugins/model", path); } }
private static void ProcessPostBuild (BuildTarget buildTarget, string path) { string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string target = proj.TargetGuidByName("Unity-iPhone"); // //Required Frameworks proj.AddFrameworkToProject(target, "AudioToolbox.framework", false); proj.AddFrameworkToProject(target, "AVFoundation.framework", false); proj.AddFrameworkToProject(target, "CoreGraphics.framework", false); proj.AddFrameworkToProject(target, "CoreTelephony.framework", false); proj.AddFrameworkToProject(target, "CoreMedia.framework", false); proj.AddFrameworkToProject(target, "EventKit.framework", false); proj.AddFrameworkToProject(target, "EventKitUI.framework", false); proj.AddFrameworkToProject(target, "MediaPlayer.framework", false); proj.AddFrameworkToProject(target, "MessageUI.framework", false); proj.AddFrameworkToProject(target, "QuartzCore.framework", false); proj.AddFrameworkToProject(target, "SystemConfiguration.framework", false); proj.AddFileToBuild(target, proj.AddFile("usr/lib/libz.1.2.5.dylib", "Frameworks/libz.1.2.5.dylib", PBXSourceTree.Sdk)); //Optional Frameworks proj.AddFrameworkToProject(target, "AdSupport.framework", true); proj.AddFrameworkToProject(target, "Social.framework", true); proj.AddFrameworkToProject(target, "StoreKit.framework", true); proj.AddFrameworkToProject(target, "Webkit.framework", true); File.WriteAllText(projPath, proj.WriteToString()); }
public static void OnPostProcessBuild(BuildTarget target, string path) { if (target != BuildTarget.iOS) { Debug.Log("Target is not iOS. JoypacXCodeBuildEditor will not run."); return; } // Read. string projectPath = UnityEditor.iOS.Xcode.PBXProject.GetPBXProjectPath(path); UnityEditor.iOS.Xcode.PBXProject project = new UnityEditor.iOS.Xcode.PBXProject(); project.ReadFromString(File.ReadAllText(projectPath)); #if UNITY_2019_3_OR_NEWER string xcodeTarget = project.GetUnityFrameworkTargetGuid(); #else string xcodeTarget = project.TargetGuidByName("Unity-iPhone"); #endif //string targetFrameworkGUID = project.GetUnityFrameworkTargetGuid(); //string targetMainGUID = project.GetUnityMainTargetGuid(); AddFrameworks(project, xcodeTarget); AddBuildProperties(project, xcodeTarget); EditorPlist(path); // Write. File.WriteAllText(projectPath, project.WriteToString()); }
public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { #if UNITY_5 var expectedTarget = BuildTarget.iOS; #else var expectedTarget = BuildTarget.iPhone; #endif if (buildTarget == expectedTarget) { var projectPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; var project = new PBXProject(); project.ReadFromString(File.ReadAllText(projectPath)); var target = project.TargetGuidByName("Unity-iPhone"); foreach (var frameworkName in StrongFrameworks) { project.AddFrameworkToProject(target, frameworkName + ".framework", false); } foreach (var frameworkName in WeakFrameworks) { project.AddFrameworkToProject(target, frameworkName + ".framework", true); } foreach (var flag in LDFlags) { project.AddBuildProperty(target, "OTHER_LDFLAGS", flag); } foreach (var libraryName in Libraries) { project.AddBuildProperty(target, "OTHER_LDFLAGS", "-l" + libraryName); } File.WriteAllText(projectPath, project.WriteToString()); } }
private static void OnPostprocessBuildIOS(string pathToBuiltProject) { // We use UnityEditor.iOS.Xcode API which only exists in iOS editor module #if UNITY_IOS string projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; UnityEditor.iOS.Xcode.PBXProject proj = new UnityEditor.iOS.Xcode.PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string target = proj.TargetGuidByName("Unity-iPhone"); Directory.CreateDirectory(Path.Combine(pathToBuiltProject, "Libraries/Unity")); string[] filesToCopy = new string[] { "PlatformBase.h", "RenderAPI_Metal.mm", "RenderAPI_OpenGLCoreES.cpp", "RenderAPI.cpp", "RenderAPI.h", "RenderingPlugin.cpp", }; for (int i = 0; i < filesToCopy.Length; ++i) { var srcPath = Path.Combine("../PluginSource/source", filesToCopy[i]); var dstLocalPath = "Libraries/" + filesToCopy[i]; var dstPath = Path.Combine(pathToBuiltProject, dstLocalPath); File.Copy(srcPath, dstPath, true); proj.AddFileToBuild(target, proj.AddFile(dstLocalPath, dstLocalPath)); } File.WriteAllText(projPath, proj.WriteToString()); #endif // #if UNITY_IOS }
static void runPodUpdate(string path) { // Copy the podfile into the project. string podfile = "Assets/GoogleMobileAds/Editor/Podfile"; string destpodfile = path + "/Podfile"; if(!System.IO.File.Exists(destpodfile)) { FileUtil.CopyFileOrDirectory(podfile, destpodfile); } try { CocoaPodHelper.Update(path); } catch (Exception e) { UnityEngine.Debug.Log("Could not create a new Xcode project with CocoaPods: " + e.Message); } #if UNITY_5 string pbxprojPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject project = new PBXProject(); project.ReadFromString(File.ReadAllText(pbxprojPath)); string target = project.TargetGuidByName("Unity-iPhone"); project.SetBuildProperty(target, "CLANG_ENABLE_MODULES", "YES"); project.AddBuildProperty(target, "OTHER_LDFLAGS", "$(inherited)"); File.WriteAllText(pbxprojPath, project.WriteToString()); #else UnityEngine.Debug.Log("Unable to modify build settings in XCode project. Build " + "settings must be set manually"); #endif }
public static void OnPostProcessBuild(BuildTarget target, string path) { if (target == BuildTarget.iOS) { // Get target for Xcode project string projPath = PBXProject.GetPBXProjectPath(path); PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string targetName = PBXProject.GetUnityTargetName(); string projectTarget = proj.TargetGuidByName(targetName); // Add dependencies proj.AddFrameworkToProject(projectTarget, "AssetsLibrary.framework", false); proj.AddFrameworkToProject(projectTarget, "CoreText.framework", false); proj.AddFrameworkToProject(projectTarget, "MobileCoreServices.framework", false); proj.AddFrameworkToProject(projectTarget, "QuickLook.framework", false); proj.AddFrameworkToProject(projectTarget, "Security.framework", false); File.WriteAllText(projPath, proj.WriteToString()); InsertAuthCodeIntoControllerClass(path); InsertUILoadedCallbackIntoControllerClass(path); } }
private static void OnPostprocessBuildIOS(string pathToBuiltProject) { // We use UnityEditor.iOS.Xcode API which only exists in iOS editor module #if UNITY_IOS string projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; UnityEditor.iOS.Xcode.PBXProject proj = new UnityEditor.iOS.Xcode.PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); proj.AddFrameworkToProject(proj.TargetGuidByName("Unity-iPhone"), "ARKit.framework", false); string target = proj.TargetGuidByName("Unity-iPhone"); proj.SetBuildProperty(target, "DEVELOPMENT_TEAM", "Z6SFPV59E3"); Directory.CreateDirectory(Path.Combine(pathToBuiltProject, "Libraries/Unity")); string[] filesToCopy = new string[] { }; for (int i = 0; i < filesToCopy.Length; ++i) { var srcPath = Path.Combine("../PluginSource/source", filesToCopy[i]); var dstLocalPath = "Libraries/" + filesToCopy[i]; var dstPath = Path.Combine(pathToBuiltProject, dstLocalPath); File.Copy(srcPath, dstPath, true); proj.AddFileToBuild(target, proj.AddFile(dstLocalPath, dstLocalPath)); } File.WriteAllText(projPath, proj.WriteToString()); #endif // #if UNITY_IOS }
private static void onPostProcessBuildPlayer(BuildTarget target, string pathToBuiltProject) { #if UNITY_4_X if (target == BuildTarget.iPhone) { #else if (target == BuildTarget.iOS) { #endif #if UNITY_EDITOR_OSX UnityEngine.Debug.Log ("Path to built project: " + pathToBuiltProject); string projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; UnityEngine.Debug.Log ("Project Path: " + projPath); PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string projTarget = proj.TargetGuidByName("Unity-iPhone"); UnityEngine.Debug.Log ("Project Target: " + projTarget); proj.AddFrameworkToProject(projTarget, "Security.framework", false); proj.AddBuildProperty(projTarget, "OTHER_LDFLAGS", "-ObjC -lz -lstdc++"); File.WriteAllText(projPath, proj.WriteToString()); #endif } if (target == BuildTarget.WP8Player) { postProcessWP8Build(pathToBuiltProject); } }
public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { #if UNITY_4_6 if (buildTarget == BuildTarget.iPhone) #else if (buildTarget == BuildTarget.iOS) #endif { string projPath = PBXProject.GetPBXProjectPath(path); // Fix on 4.6.x #if UNITY_4_6 if(!projPath.Contains("Unity-iPhone.xcodeproj")) { projPath = projPath.Replace("Unity-iPhone", "Unity-iPhone.xcodeproj"); } #endif PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string targetName = PBXProject.GetUnityTargetName(); string target = proj.TargetGuidByName(targetName); proj.AddFileToBuild(target, proj.AddFile("usr/lib/libsqlite3.dylib", "Frameworks/libsqlite3.dylib", PBXSourceTree.Sdk)); proj.AddFileToBuild(target, proj.AddFile("usr/lib/libz.dylib", "Frameworks/libz.dylib", PBXSourceTree.Sdk)); proj.AddFileToBuild(target, proj.AddFile("Frameworks/AdSupport.framework", "Frameworks/AdSupport.framework", PBXSourceTree.Sdk)); File.WriteAllText(projPath, proj.WriteToString()); } }
private static void OnPostprocessBuildIOS(string pathToBuiltProject) { // We use UnityEditor.iOS.Xcode API which only exists in iOS editor module #if UNITY_IOS string projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; UnityEditor.iOS.Xcode.PBXProject proj = new UnityEditor.iOS.Xcode.PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); proj.AddFrameworkToProject(proj.TargetGuidByName("Unity-iPhone"), "ARKit.framework", false); string target = proj.TargetGuidByName("Unity-iPhone"); Directory.CreateDirectory(Path.Combine(pathToBuiltProject, "Libraries/Unity")); //check UnityARKitPluginSettings UnityARKitPluginSettings ps = LoadSettings(); if (ps.AppRequiresARKit) { //add plist entry string plistPath = Path.Combine(pathToBuiltProject, "Info.plist"); PlistDocument plist = new PlistDocument(); plist.ReadFromString(File.ReadAllText(plistPath)); PlistElementDict rootDict = plist.root; const string capsKey = "UIRequiredDeviceCapabilities"; PlistElementArray capsArray; PlistElement pel; if (rootDict.values.TryGetValue(capsKey, out pel)) { capsArray = pel.AsArray(); } else { capsArray = rootDict.CreateArray(capsKey); } capsArray.AddString("arkit"); File.WriteAllText(plistPath, plist.WriteToString()); } //add or replace define for facetracking UpdateDefinesInFile(pathToBuiltProject + "/Classes/Preprocessor.h", new Dictionary <string, bool>() { { "ARKIT_USES_FACETRACKING", ps.m_ARKitUsesFacetracking } }); string[] filesToCopy = new string[] { }; for (int i = 0; i < filesToCopy.Length; ++i) { var srcPath = Path.Combine("../PluginSource/source", filesToCopy[i]); var dstLocalPath = "Libraries/" + filesToCopy[i]; var dstPath = Path.Combine(pathToBuiltProject, dstLocalPath); File.Copy(srcPath, dstPath, true); proj.AddFileToBuild(target, proj.AddFile(dstLocalPath, dstLocalPath)); } File.WriteAllText(projPath, proj.WriteToString()); #endif // #if UNITY_IOS }
private static void configureSwiftBuild(string targetPath) { var projPath = UnityEditor.iOS.Xcode.PBXProject.GetPBXProjectPath(targetPath); var proj = new UnityEditor.iOS.Xcode.PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); #if UNITY_2019_3_OR_NEWER var targetGuid = proj.GetUnityFrameworkTargetGuid(); #else var targetGuid = proj.TargetGuidByName("Unity-iPhone"); #endif proj.SetBuildProperty(targetGuid, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES"); proj.SetBuildProperty(targetGuid, "SWIFT_VERSION", "5.0"); #if UNITY_2019_3_OR_NEWER string podFilePath = Path.Combine(targetPath, "Podfile"); string podFileContents = File.ReadAllText(podFilePath); string targetUnityiPhone = "\ntarget 'Unity-iPhone' do"; string inheritSearchPaths = "\n inherit! :search_paths"; if (podFileContents.Contains("Unity-iPhone")) { podFileContents = podFileContents.Replace(targetUnityiPhone, targetUnityiPhone + inheritSearchPaths); File.WriteAllText(podFilePath, podFileContents); } else { File.AppendAllText(podFilePath, targetUnityiPhone + inheritSearchPaths + "\nend"); } File.AppendAllText(podFilePath, "\npost_install do |installer|\n installer.pods_project.targets.each do |target|\n target.build_configurations.each do |config|\n if ['RxSwift', 'Willow'].include? target.name\n config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'\n end\n end\n end\n end"); var iphoneGuid = proj.GetUnityMainTargetGuid(); proj.SetBuildProperty(iphoneGuid, "SWIFT_OBJC_BRIDGING_HEADER", "Libraries/ScaleMonk Ads/Plugins/iOS/SMAds-Bridging-Header.h"); #else proj.SetBuildProperty(targetGuid, "SWIFT_OBJC_BRIDGING_HEADER", "Libraries/ScaleMonk Ads/Plugins/iOS/SMAds-Bridging-Header.h"); using (var sw = File.AppendText(targetPath + "/Podfile")) { sw.WriteLine("\npost_install do |installer|\n installer.pods_project.targets.each do |target|\n target.build_configurations.each do |config|\n if ['RxSwift', 'Willow'].include? target.name\n config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'\n end\n end\n end\n end"); } #endif proj.SetBuildProperty(targetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "NO"); proj.SetBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "@executable_path/Frameworks"); File.WriteAllText(projPath, proj.WriteToString()); }
public static void OnPostProcessBuild(BuildTarget buildTarget, string path) { string projPath = Path.Combine(path, "Unity-iPhone.xcodeproj/project.pbxproj"); PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string target = proj.TargetGuidByName("Unity-iPhone"); proj.AddFileToBuild(target, proj.AddFile("usr/lib/libz.1.2.5.tbd", "Frameworks/libz.1.2.5.tbd", PBXSourceTree.Sdk)); File.WriteAllText(projPath, proj.WriteToString()); }
public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { if (buildTarget == BuildTarget.iOS) { string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string target = proj.TargetGuidByName("Unity-iPhone"); proj.AddFrameworkToProject(target, "WebKit.framework", false); File.WriteAllText(projPath, proj.WriteToString()); } }
private static void OnPostprocessBuildIOS(string pathToBuiltProject) { // We use UnityEditor.iOS.Xcode API which only exists in iOS editor module #if UNITY_IOS string projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; UnityEditor.iOS.Xcode.PBXProject proj = new UnityEditor.iOS.Xcode.PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); proj.AddFrameworkToProject(proj.TargetGuidByName("Unity-iPhone"), "opencv2.framework", false); File.WriteAllText(projPath, proj.WriteToString()); #endif // #if UNITY_IOS }
private static void AddGrowthbeatDependencyFramework(string path) { string projectPath = PBXProject.GetPBXProjectPath(path); PBXProject pbxProject = new PBXProject(); pbxProject.ReadFromString(File.ReadAllText(projectPath)); string target = pbxProject.TargetGuidByName("Unity-iPhone"); pbxProject.AddFrameworkToProject(target, "AdSupport.framework", false); pbxProject.AddFrameworkToProject(target, "SafariServices.framework", false); pbxProject.AddFrameworkToProject(target, "Security.framework", false); File.WriteAllText(projectPath, pbxProject.WriteToString()); }
public static void OnPostprocessBuild(string xcodePath, string configPath) { pluginPath = configPath.Replace("XcodeSetting.json", ""); string projPath = PBXProject.GetPBXProjectPath(xcodePath); PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string plistPath = xcodePath + "/Info.plist"; PlistDocument plist = new PlistDocument(); plist.ReadFromString(File.ReadAllText(plistPath)); PlistElementDict rootDict = plist.root; //string target = proj.TargetGuidByName(PBXProject.GetUnityTargetName()); //string target = proj.TargetGuidByName("UnityFramework"); //string productName = proj.GetBuildPropertyForAnyConfig(target, "PRODUCT_NAME"); string entitlementFilePath = Path.Combine(PBXProject.GetUnityTargetName(), "usdk.entitlements"); ProjectCapabilityManager pcbManager = new ProjectCapabilityManager(proj, projPath, entitlementFilePath, PBXProject.GetUnityTargetName()); //读取配置文件 string json = File.ReadAllText(configPath); Hashtable table = json.hashtableFromJson(); embedFrameworksTable = table.SGet <Hashtable>("embedframeworks"); //plist SetPlist(proj, rootDict, table.SGet <Hashtable>("plist")); plist.WriteToFile(plistPath); //lib SetLibs(proj, table.SGet <Hashtable>("libs")); //framework SetFrameworks(proj, table.SGet <Hashtable>("frameworks")); //building setting SetBuildProperties(proj, table.SGet <Hashtable>("properties")); SetShellScriptBuildPhase(proj, table.SGet <Hashtable>("shellscript")); //复制文件 CopyFiles(proj, xcodePath, table.SGet <Hashtable>("files")); //复制文件夹 CopyFolders(proj, xcodePath, table.SGet <Hashtable>("folders")); //文件编译符号 SetFilesCompileFlag(proj, table.SGet <Hashtable>("filesCompileFlag")); //加入能力 SetCapabilitys(pcbManager, table.SGet <Hashtable>("capabilitys")); //写入 File.WriteAllText(projPath, proj.WriteToString()); Console.WriteLine("***Info.plist*****\n" + File.ReadAllText(plistPath)); }
public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { #if UNITY_5 if (buildTarget == BuildTarget.iOS) #else if (buildTarget == BuildTarget.iPhone) #endif { string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string target = proj.TargetGuidByName("Unity-iPhone"); // Add custom system frameworks. Duplicate frameworks are ignored. // needed by our native plugin in Assets/Plugins/iOS proj.AddFrameworkToProject(target, "Security.framework", false /*not weak*/); proj.AddFrameworkToProject(target, "Social.framework", false /*not weak*/); proj.AddFrameworkToProject(target, "Accounts.framework", false /*not weak*/); proj.AddFrameworkToProject(target, "MediaPlayer.framework", false /*not weak*/); proj.AddFrameworkToProject(target, "MessageUI.framework", false /*not weak*/); proj.AddFrameworkToProject(target, "MobileCoreServices.framework", false /*not weak*/); proj.AddFrameworkToProject(target, "libc++.dylib", false /*not weak*/); // Add our framework directory to the framework include path //proj.SetBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(inherited)"); //proj.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(PROJECT_DIR)/Frameworks"); // Set a custom link flag proj.AddBuildProperty(target, "GCC_PREPROCESSOR_DEFINITIONS", "$(CONFIGURATION) $(inherited)"); proj.AddBuildProperty(target, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES"); File.WriteAllText(projPath, proj.WriteToString()); } // edit Info.plist /*var plistPath = Path.Combine(path, "Info.plist"); var plist = new PlistDocument(); plist.ReadFromFile(plistPath); plist.root.SetString("UIBackgroundModes", "voip"); plist.WriteToFile(plistPath);*/ }
public static void ChangeXcodePlist(BuildTarget buildTarget, string pathToBuiltProject) { #if UNITY_IOS string temp = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(temp)); string target = proj.TargetGuidByName(PBXProject.GetUnityTargetName()); proj.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC"); proj.AddBuildProperty(target, "OTHER_LDFLAGS", "-lc++"); proj.AddBuildProperty(target, "CODE_SIGN_RESOURCE_RULES_PATH", "$(SDKROOT)/ResourceRules.plist"); proj.AddBuildProperty(target, "CLANG_ENABLE_MODULES","YES"); File.WriteAllText(temp, proj.WriteToString()); #endif }
private static void OnPostprocessBuildIOS(string pathToBuiltProject) { // We use UnityEditor.iOS.Xcode API which only exists in iOS editor module #if UNITY_IOS string projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; UnityEditor.iOS.Xcode.PBXProject proj = new UnityEditor.iOS.Xcode.PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); proj.AddFrameworkToProject(proj.TargetGuidByName("Unity-iPhone"), "AssetsLibrary.framework", false); string target = proj.TargetGuidByName("Unity-iPhone"); Directory.CreateDirectory(Path.Combine(pathToBuiltProject, "Libraries/Sturfee/Plugins/iOS/Shared")); string[] sturGLoaderfilesToCopy = new string[] { "PlatformBase.hpp", "UnityInterface.hpp", }; string[] sharedFilesToCopy = new string[] { "SturgProcesser.hpp", "SFDataStream.hpp", "SFLogger.hpp", }; for (int i = 0; i < sturGLoaderfilesToCopy.Length; ++i) { var srcPath = Path.Combine(Path.Combine(Application.dataPath, "Sturfee/Plugins/iOS/SturGLoader/Include"), sturGLoaderfilesToCopy[i]); var dstLocalPath = "Libraries/Sturfee/Plugins/iOS/SturGLoader/Include/" + sturGLoaderfilesToCopy[i]; var dstPath = Path.Combine(pathToBuiltProject, dstLocalPath); File.Copy(srcPath, dstPath, true); proj.AddFileToBuild(target, proj.AddFile(dstLocalPath, dstLocalPath)); } for (int i = 0; i < sharedFilesToCopy.Length; ++i) { var srcPath = Path.Combine(Path.Combine(Application.dataPath, "Sturfee/Plugins/iOS/Shared"), sharedFilesToCopy[i]); var dstLocalPath = "Libraries/Sturfee/Plugins/iOS/Shared/" + sharedFilesToCopy[i]; var dstPath = Path.Combine(pathToBuiltProject, dstLocalPath); File.Copy(srcPath, dstPath, true); proj.AddFileToBuild(target, proj.AddFile(dstLocalPath, dstLocalPath)); } File.WriteAllText(projPath, proj.WriteToString()); #endif // #if UNITY_IOS }
private static void OnPostprocessBuildIOS(string pathToBuiltProject) { // We use UnityEditor.iOS.Xcode API which only exists in iOS editor module #if UNITY_IOS //Handle plist string plistPath = pathToBuiltProject + "/Info.plist"; PlistDocument plist = new PlistDocument(); plist.ReadFromString(File.ReadAllText(plistPath)); PlistElementDict rootDict = plist.root; rootDict.SetString("CFBundleVersion", "1.0.67"); rootDict.SetString("NSPhotoLibraryUsageDescription", "Use Photo"); rootDict.SetString("NSPhotoLibraryAddUsageDescription", "Use Photo 11"); rootDict.SetString("NSCameraUsageDescription", "Use Camera"); File.WriteAllText(plistPath, plist.WriteToString()); string projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; UnityEditor.iOS.Xcode.PBXProject proj = new UnityEditor.iOS.Xcode.PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); proj.AddFrameworkToProject(proj.TargetGuidByName("Unity-iPhone"), "CoreImage.framework", false); proj.AddFrameworkToProject(proj.TargetGuidByName("Unity-iPhone"), "Accelerate.framework", false); string target = proj.TargetGuidByName("Unity-iPhone"); Directory.CreateDirectory(Path.Combine(pathToBuiltProject, "Libraries/Unity")); string[] filesToCopy = new string[] { }; for (int i = 0; i < filesToCopy.Length; ++i) { var srcPath = Path.Combine("../PluginSource/source", filesToCopy[i]); var dstLocalPath = "Libraries/" + filesToCopy[i]; var dstPath = Path.Combine(pathToBuiltProject, dstLocalPath); File.Copy(srcPath, dstPath, true); proj.AddFileToBuild(target, proj.AddFile(dstLocalPath, dstLocalPath)); } File.WriteAllText(projPath, proj.WriteToString()); CopyFile("GestureFile/libpaddle_capi_layers.a", "libpaddle_capi_layers.a", pathToBuiltProject); CopyFile("pose/pose.bin", "pose.bin", pathToBuiltProject); // CopyFile("pose/opencv2.framework.zip", "opencv2.framework.zip", pathToBuiltProject); // CopyFile("IOS_Pose/libpaddle_capi_layers.a" ,pathToBuiltProject); #endif }
public static void OnPostProcessBuild(BuildTarget buildTarget, string pathToBuiltProject) { if (buildTarget != BuildTarget.iOS) { return; } PBXProject project = new PBXProject(); string pbxProjectPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; project.ReadFromString(File.ReadAllText(pbxProjectPath)); string target = project.TargetGuidByName(PBXProject.GetUnityTargetName()); string testTarget = project.TargetGuidByName(PBXProject.GetUnityTestTargetName()); // Linker flags. project.SetBuildProperty(target, "ARCHS", "$(ARCHS_STANDARD)"); project.SetBuildProperty(testTarget, "ARCHS", "$(ARCHS_STANDARD)"); project.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC"); project.AddBuildProperty(testTarget, "OTHER_LDFLAGS", "-ObjC"); project.AddBuildProperty(target, "OTHER_LDFLAGS", "-lz"); project.AddBuildProperty(testTarget, "OTHER_LDFLAGS", "-lz"); // Search paths. project.SetBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(inherited)"); project.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(PROJECT_DIR)/Frameworks"); // Framework dependencies. project.AddFrameworkToProject(target, "AVFoundation.framework", true); project.AddFrameworkToProject(target, "Accelerate.framework", true); project.AddFrameworkToProject(target, "CFNetwork.framework", true); project.AddFrameworkToProject(target, "CoreBluetooth.framework", true); project.AddFrameworkToProject(target, "CoreText.framework", true); project.AddFrameworkToProject(target, "MediaPlayer.framework", true); project.AddFrameworkToProject(target, "MediaToolbox.framework", true); project.AddFrameworkToProject(target, "Metal.framework", true); project.AddFrameworkToProject(target, "Security.framework", true); project.AddFrameworkToProject(target, "SystemConfiguration.framework", true); // Dynamic library dependencies. string sqlite3dylibGuid = project.AddFile("usr/lib/libsqlite3.dylib", "usr/lib/libsqlite3.dylib", PBXSourceTree.Sdk); project.AddFileToBuild(target, sqlite3dylibGuid); string libCppdylibGuid = project.AddFile("usr/lib/libc++.dylib", "usr/lib/libc++.dylib", PBXSourceTree.Sdk); project.AddFileToBuild(target, libCppdylibGuid); File.WriteAllText(pbxProjectPath, project.WriteToString()); }
public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { if (buildTarget == BuildTarget.iOS) { string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string target = proj.TargetGuidByName("Unity-iPhone"); proj.AddFileToBuild(target, proj.AddFile("usr/lib/Security.framework", "Frameworks/Security.framework", PBXSourceTree.Sdk)); proj.SetBuildProperty(target, "ENABLE_BITCODE", "false"); File.WriteAllText(projPath, proj.WriteToString()); } }
public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { if (buildTarget == BuildTarget.iOS) { string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string target = proj.TargetGuidByName("Unity-iPhone"); proj.AddFileToBuild(target, proj.AddFile("usr/lib/libsqlite3.dylib", "Frameworks/libsqlite3.dylib", PBXSourceTree.Sdk)); proj.AddFileToBuild(target, proj.AddFile("usr/lib/libz.dylib", "Frameworks/libz.dylib", PBXSourceTree.Sdk)); proj.AddFileToBuild(target, proj.AddFile("Frameworks/AdSupport.framework", "Frameworks/AdSupport.framework", PBXSourceTree.Sdk)); File.WriteAllText(projPath, proj.WriteToString()); } }
public static void OnPostProcessBuildIOS(string pathToBuiltProject) { #if UNITY_IOS string projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject proj = new UnityEditor.iOS.Xcode.PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); proj.AddFrameworkToProject(proj.TargetGuidByName("Unity-iPhone"), "Photos.framework", false); File.WriteAllText(projPath, proj.WriteToString()); string plistPath = Path.Combine(pathToBuiltProject, "Info.plist"); var plist = new PlistDocument(); plist.ReadFromFile(plistPath); const string key = "NSPhotoLibraryUsageDescription"; const string description = "Camera roll access permission is necessary for saving an image."; plist.root.SetString(key, description); plist.WriteToFile(plistPath); #endif //UNITY_IOS }
public static void OnPostProcessBuild(BuildTarget target, string path) { #if UNITY_IPHONE if (target != BuildTarget.iOS) return; string buildName = Path.GetFileNameWithoutExtension(path); string pbxprojPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(pbxprojPath)); string buildTarget = proj.TargetGuidByName("Unity-iPhone"); DirectoryInfo projectParent = Directory.GetParent(Application.dataPath); char divider = Path.DirectorySeparatorChar; DirectoryInfo destinationFolder = new DirectoryInfo(path + divider + "Frameworks"); foreach(DirectoryInfo file in destinationFolder.GetDirectories()) { string filePath = "Frameworks/"+ file.Name; proj.AddFile(filePath, filePath, PBXSourceTree.Source); proj.AddFrameworkToProject (buildTarget, file.Name, false); } proj.SetBuildProperty( buildTarget, "FRAMEWORK_SEARCH_PATHS", "$(SRCROOT)/Frameworks" ); proj.AddBuildProperty( buildTarget, "FRAMEWORK_SEARCH_PATHS", "$(inherited)" ); proj.SetBuildProperty(buildTarget, "CLANG_ENABLE_MODULES", "YES"); File.WriteAllText(pbxprojPath, proj.WriteToString()); #endif }
public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { if (buildTarget == BuildTarget.iOS) { string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string target = proj.TargetGuidByName("Unity-iPhone"); // Add user packages to project. Most other source or resource files and packages // can be added the same way. /* CopyAndReplaceDirectory("NativeAssets/TestLib.bundle", Path.Combine(path, "Frameworks/TestLib.bundle")); proj.AddFileToBuild(target, proj.AddFile("Frameworks/TestLib.bundle", "Frameworks/TestLib.bundle", PBXSourceTree.Source)); CopyAndReplaceDirectory("NativeAssets/TestLib.framework", Path.Combine(path, "Frameworks/TestLib.framework")); proj.AddFileToBuild(target, proj.AddFile("Frameworks/TestLib.framework", "Frameworks/TestLib.framework", PBXSourceTree.Source)); */ // Add custom system frameworks. Duplicate frameworks are ignored. // needed by our native plugin in Assets/Plugins/iOS proj.AddFrameworkToProject(target, "MessageUI.framework", false /*not weak*/); // Add our framework directory to the framework include path proj.SetBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(inherited)"); proj.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(PROJECT_DIR)/Frameworks"); // Set a custom link flag proj.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC"); File.WriteAllText(projPath, proj.WriteToString()); } }
static void _AddDeviceCapabilities(string path) { string pbxprojPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject project = new PBXProject(); project.ReadFromString(File.ReadAllText(pbxprojPath)); string target = project.TargetGuidByName("Unity-iPhone"); project.AddFrameworkToProject(target, "AdSupport.framework", false); project.AddFrameworkToProject(target, "AudioToolbox.framework", false); project.AddFrameworkToProject(target, "AVFoundation.framework", false); project.AddFrameworkToProject(target, "CoreGraphics.framework", false); project.AddFrameworkToProject(target, "CoreTelephony.framework", false); project.AddFrameworkToProject(target, "EventKit.framework", false); project.AddFrameworkToProject(target, "EventKitUI.framework", false); project.AddFrameworkToProject(target, "MessageUI.framework", false); project.AddFrameworkToProject(target, "StoreKit.framework", false); project.AddFrameworkToProject(target, "SystemConfiguration.framework", false); project.SetBuildProperty(target, "CLANG_ENABLE_MODULES", "YES"); File.WriteAllText(pbxprojPath, project.WriteToString()); string infoPlistPath = Path.Combine(path, "./Info.plist"); PlistDocument plist = new PlistDocument(); plist.ReadFromString(File.ReadAllText(infoPlistPath)); PlistElementDict rootDict = plist.root; PlistElementArray deviceCapabilityArray = rootDict.CreateArray("UIRequiredDeviceCapabilities"); deviceCapabilityArray.AddString("armv7"); deviceCapabilityArray.AddString("gamekit"); rootDict.SetBoolean("UIRequiresFullScreen", true); File.WriteAllText(infoPlistPath, plist.WriteToString()); }
private static void OnPostprocessBuildIOS(string pathToBuiltProject) { // We use UnityEditor.iOS.Xcode API which only exists in iOS editor module #if UNITY_IOS string projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; UnityEditor.iOS.Xcode.PBXProject proj = new UnityEditor.iOS.Xcode.PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); proj.AddFrameworkToProject(proj.TargetGuidByName("Unity-iPhone"), "ARKit.framework", false); string target = proj.TargetGuidByName("Unity-iPhone"); Directory.CreateDirectory(Path.Combine(pathToBuiltProject, "Libraries/Unity")); // Check UnityARKitPluginSettings UnityARKitPluginSettings ps = LoadSettings(); string plistPath = Path.Combine(pathToBuiltProject, "Info.plist"); PlistDocument plist = new PlistDocument(); plist.ReadFromString(File.ReadAllText(plistPath)); PlistElementDict rootDict = plist.root; // Get or create array to manage device capabilities const string capsKey = "UIRequiredDeviceCapabilities"; PlistElementArray capsArray; PlistElement pel; if (rootDict.values.TryGetValue(capsKey, out pel)) { capsArray = pel.AsArray(); } else { capsArray = rootDict.CreateArray(capsKey); } // Remove any existing "arkit" plist entries const string arkitStr = "arkit"; capsArray.values.RemoveAll(x => arkitStr.Equals(x.AsString())); if (ps.AppRequiresARKit) { // Add "arkit" plist entry capsArray.AddString(arkitStr); } File.WriteAllText(plistPath, plist.WriteToString()); foreach (ARReferenceImagesSet ar in imageSets) { AddReferenceImagesSetToAssetCatalog(ar, pathToBuiltProject, proj); } //TODO: remove this when XCode actool is able to handles ARResources despite deployment target if (imageSets.Count > 0) { proj.SetBuildProperty(target, "IPHONEOS_DEPLOYMENT_TARGET", "11.3"); } // Add or replace define for facetracking UpdateDefinesInFile(pathToBuiltProject + "/Classes/Preprocessor.h", new Dictionary <string, bool>() { { "ARKIT_USES_FACETRACKING", ps.m_ARKitUsesFacetracking } }); string[] filesToCopy = new string[] { }; for (int i = 0; i < filesToCopy.Length; ++i) { var srcPath = Path.Combine("../PluginSource/source", filesToCopy[i]); var dstLocalPath = "Libraries/" + filesToCopy[i]; var dstPath = Path.Combine(pathToBuiltProject, dstLocalPath); File.Copy(srcPath, dstPath, true); proj.AddFileToBuild(target, proj.AddFile(dstLocalPath, dstLocalPath)); } File.WriteAllText(projPath, proj.WriteToString()); #endif // #if UNITY_IOS }
/// <summary> /// Updates the generated pbxproj to reduce manual work required by developers. Currently /// this adds the '-fobjc-arc' flag for the Play Games ObjC source file. /// </summary> /// <param name="pbxprojPath">Pbxproj path.</param> private static void UpdateGeneratedPbxproj(string pbxprojPath) { PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(pbxprojPath)); string target = proj.TargetGuidByName(PBXProject.GetUnityTargetName()); string testTarget = proj.TargetGuidByName(PBXProject.GetUnityTestTargetName()); proj.AddBuildProperty(target, "OTHER_LDFLAGS", "$(inherited)"); proj.AddBuildProperty(testTarget, "OTHER_LDFLAGS", "$(inherited)"); proj.AddBuildProperty(target, "HEADER_SEARCH_PATHS", "$(inherited)"); proj.AddBuildProperty(testTarget, "HEADER_SEARCH_PATHS", "$(inherited)"); proj.AddBuildProperty(target, "OTHER_CFLAGS", "$(inherited)"); proj.AddBuildProperty(testTarget, "OTHER_CFLAGS", "$(inherited)"); string fileGuid = proj.FindFileGuidByProjectPath("Libraries/Plugins/iOS/GPGSAppController.mm"); List<string> list = new List<string>(); list.Add("-fobjc-arc"); proj.SetCompileFlagsForFile(target, fileGuid, list); File.WriteAllText(pbxprojPath, proj.WriteToString()); }
/// <summary> /// Updates the generated pbxproj to reduce manual work required by developers. Currently /// this adds the '-fobjc-arc' flag for the Play Games ObjC source file. /// </summary> /// <param name="pbxprojPath">Pbxproj path.</param> private static void UpdateGeneratedPbxproj(string pbxprojPath) { PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(pbxprojPath)); string target = proj.TargetGuidByName(PBXProject.GetUnityTargetName()); string fileGuid = proj.FindFileGuidByProjectPath("Libraries/Plugins/iOS/GPGSAppController.mm"); if (fileGuid == null) { // look in the legacy location fileGuid = proj.FindFileGuidByProjectPath("Libraries/GPGSAppController.mm"); } List<string> list = new List<string>(); list.Add("-fobjc-arc"); proj.SetCompileFlagsForFile(target, fileGuid, list); File.WriteAllText(pbxprojPath, proj.WriteToString()); }
public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject) { #if UNITY_5 if (target != BuildTarget.iOS) { if (!GPGSProjectSettings.Instance.GetBool(GPGSUtil.ANDROIDSETUPDONEKEY, false)) { EditorUtility.DisplayDialog("Google Play Games not configured!", "Warning!! Google Play Games was not configured, Game Services will not work correctly.", "OK"); } return; } #else if (target != BuildTarget.iPhone) { return; } #endif #if UNITY_IOS #if NO_GPGS string[] filesToRemove = { "Libraries/Plugins/IOS/GPGSAppController.mm", "Libraries/Plugins/iOS/GPGSAppController.mm", "Libraries/GPGSAppController.mm", "Libraries/Plugins/IOS/GPGSAppController.h", "Libraries/Plugins/iOS/GPGSAppController.h", "Libraries/GPGSAppController.h", "Libraries/Plugins/IOS/CustomWebViewApplication.h", "Libraries/Plugins/iOS/CustomWebViewApplication.h", "Libraries/CustomWebViewApplication.h", "Libraries/Plugins/IOS/CustomWebViewApplication.mm", "Libraries/Plugins/iOS/CustomWebViewApplication.mm", "Libraries/CustomWebViewApplication.mm" }; string pbxprojPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(pbxprojPath)); foreach(string name in filesToRemove) { string fileGuid = proj.FindFileGuidByProjectPath(name); if (fileGuid != null) { Debug.Log ("Removing " + name + " from xcode project"); proj.RemoveFile(fileGuid); } } File.WriteAllText(pbxprojPath, proj.WriteToString()); #else if (!GPGSProjectSettings.Instance.GetBool(GPGSUtil.IOSSETUPDONEKEY, false)) { EditorUtility.DisplayDialog("Google Play Games not configured!", "Warning!! Google Play Games was not configured, Game Services will not work correctly.", "OK"); } if (GetBundleId() == null) { UnityEngine.Debug.LogError("The iOS bundle ID has not been set up through the " + "'iOS Setup' submenu of 'Google Play Games' - the generated xcode project will " + "not work properly."); return; } UpdateGeneratedInfoPlistFile(pathToBuiltProject + "/Info.plist"); UpdateGeneratedPbxproj(pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"); UnityEngine.Debug.Log("Adding URL Types for authentication using PlistBuddy."); #endif #endif }
public static void OnPostProcessBuildFirst(BuildTarget bt, string path) { if(bt == BuildTarget.WebGL){ moveResources("levels",false); }else{ moveResources("webLevels",false); } if(bt == BuildTarget.iOS || bt == BuildTarget.StandaloneOSXUniversal){ moveResources("achievementIcons",false); } AssetDatabase.Refresh(); switch(lastPlatform){ case platform.osx: if(PlayerSettings.useMacAppStoreValidation){ runShell("/Volumes/Jesper Ext/unity/ZeGame/ZeGame_osx/fixAndSign.sh"); }else{ runShell("/Volumes/Jesper Ext/unity/ZeGame/ZeGame_osx/fixSignAndOpen.sh"); } break; case platform.ios: //I know I should make the paths relative but you can't tell me what to do runShell("/Volumes/Jesper Ext/unity/ZeGame/ZeGame_ios/build.sh"); //find project string projectPath = "/Volumes/Jesper Ext/unity/ZeGame/ZeGame_ios/xcode/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject project = new PBXProject(); project.ReadFromFile(projectPath); string targetGuid = project.TargetGuidByName("Unity-iPhone"); //add cloudkit framework (this is still easy) project.AddFrameworkToProject(targetGuid,"CloudKit.framework",false); //copy the entitlements file, you should generate this once //using xcode, then put it somewhere on your disk so //you can copy it to this location later File.Copy("/Volumes/Jesper Ext/unity/ZeGame/ZeGame_ios/ZeGame.entitlements","/Volumes/Jesper Ext/unity/ZeGame/ZeGame_ios/xcode/Unity-iPhone/ZeGame.entitlements"); //now this is where it gets messy, because the PBXProject //class doesn't support enabling iCloud so you'll //have to change the string manually //I suggest you build your xcode project once (without //playing it automatically, so you'll have to remove // BuildOptions.AutoRunPlayer; from the buildoptions //then duplicate your xcode project folder and enable //iCloud in one of them. You can then use a site like //https://www.diffnow.com/ to find the difference //between the two projects. //not all differences have to be included but these are //the ones I found that are necessary. string projectString = project.WriteToString(); //add entitlements file projectString = projectString.Replace("/* Begin PBXFileReference section */", "/* Begin PBXFileReference section */\n\t\t244C317F1B8BE5CF00F39B20 /* ZeGame.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = ZeGame.entitlements; path = \"Unity-iPhone/ZeGame.entitlements\"; sourceTree = \"<group>\"; };"); //add entitlements file (again) projectString = projectString.Replace("/* CustomTemplate */ = {\n isa = PBXGroup;\n children = (", "/* CustomTemplate */ = {\n isa = PBXGroup;\n children = (\n 244C317F1B8BE5CF00F39B20 /* ZeGame.entitlements */,"); //add some kind of entitlements command projectString = projectString.Replace("CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;", "CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"Unity-iPhone/ZeGame.entitlements\";"); //add development team you'll have to replace **** //with your own development string, which you can find //in your project.pbxproj file after enabling icloud projectString = projectString.Replace("TargetAttributes = {", "TargetAttributes = {\n 1D6058900D05DD3D006BFB54 = {\n DevelopmentTeam = ******;\n };"); //save the file File.WriteAllText(projectPath, projectString); break; case platform.windows: lastPlatform = platform.windows64; buildLast(); break; case platform.windows64: lastPlatform = platform.windows; File.Delete("/Volumes/Jesper Ext/unity/ZeGame/ZeGame_windows/64/player_win_x64_s.pdb"); File.Delete("/Volumes/Jesper Ext/unity/ZeGame/ZeGame_windows/64/player_win_x64.pdb"); File.Delete("/Volumes/Jesper Ext/unity/ZeGame/ZeGame_windows/32/player_win_x86_s.pdb"); File.Delete("/Volumes/Jesper Ext/unity/ZeGame/ZeGame_windows/32/player_win_x86.pdb"); break; case platform.linux: runShell("/Volumes/Jesper Ext/unity/ZeGame/ZeGame_linux/build.sh"); break; } }
private static void OnPostprocessBuild(BuildTarget buildTarget, string buildPath) { //iOS以外にビルドしている場合は更新処理を行わないように if (buildTarget != BuildTarget.iOS){ return; } //Xcodeの設定データを読み込む XcodeProjectSetting setting = Resources.Load<XcodeProjectSetting>(SETTING_DATA_PATH); if(setting == null){ Debug.Log ("Resources/" + SETTING_DATA_PATH + "がありません!"); return; } //Xcodeプロジェクトの読み込み string pbxProjPath = PBXProject.GetPBXProjectPath(buildPath); PBXProject pbxProject = new PBXProject(); pbxProject.ReadFromString(File.ReadAllText(pbxProjPath)); //ターゲットのID取得 string targetGuid = pbxProject.TargetGuidByName(PBXProject.GetUnityTargetName()); //指定ディレクトリ内のファイルを全てコピーする if(!string.IsNullOrEmpty(setting.CopyDirectoryPath)){ DirectoryProcessor.CopyAndAddBuildToXcode (pbxProject, targetGuid, setting.CopyDirectoryPath, buildPath, ""); } //コンパイラフラグの設定 foreach (XcodeProjectSetting.CompilerFlagsSet compilerFlagsSet in setting.CompilerFlagsSetList) { foreach (string targetPath in compilerFlagsSet.TargetPathList) { if(!pbxProject.ContainsFileByProjectPath(targetPath)){ Debug.Log (targetPath + "が無いのでコンパイラフラグが設定できませんでした"); continue; } string fileGuid = pbxProject.FindFileGuidByProjectPath(targetPath); List<string> flagsList = pbxProject.GetCompileFlagsForFile(targetGuid, fileGuid); flagsList.Add(compilerFlagsSet.Flags); pbxProject.SetCompileFlagsForFile(targetGuid, fileGuid, flagsList); } } //システムのフレームワークを追加 foreach (string framework in setting.FrameworkList) { pbxProject.AddFrameworkToProject(targetGuid, framework, false); } //Linker Flagの設定 pbxProject.UpdateBuildProperty(targetGuid, XcodeProjectSetting.LINKER_FLAG_KEY, setting.LinkerFlagArray, null); //フレームワークがあるディレクトリへのパス設定 pbxProject.UpdateBuildProperty(targetGuid, XcodeProjectSetting.FRAMEWORK_SEARCH_PATHS_KEY, setting.FrameworkSearchPathArray, null); //BitCodeの設定 pbxProject.SetBuildProperty(targetGuid, XcodeProjectSetting.ENABLE_BITCODE_KEY, setting.EnableBitCode ? "YES" : "NO"); //プロジェクトファイル書き出し File.WriteAllText(pbxProjPath, pbxProject.WriteToString()); //URLスキームの設定 List<string> urlSchemeList = new List<string>(setting.URLSchemeList); InfoPlistProcessor.SetURLSchemes (buildPath, setting.URLIdentifier, urlSchemeList); //デフォルトで設定されているスプラッシュ画像の設定を消す if(setting.NeedToDeleteLaunchiImagesKey){ InfoPlistProcessor.DeleteLaunchiImagesKey (buildPath); } //ATSの設定 InfoPlistProcessor.SetATS (buildPath, setting.EnableATS); //ステータスバーの設定 InfoPlistProcessor.SetStatusBar (buildPath, setting.EnableStatusBar); }
public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject) { #if UNITY_5 if (target != BuildTarget.iOS) { return; } #else if (target != BuildTarget.iPhone) { return; } #endif #if NO_GPGS string[] filesToRemove = { "Libraries/Plugins/iOS/GPGSAppController.mm", "Libraries/GPGSAppController.mm", "Libraries/Plugins/iOS/GPGSAppController.h", "Libraries/GPGSAppController.h", "Libraries/Plugins/iOS/CustomWebViewApplication.h", "Libraries/CustomWebViewApplication.h", "Libraries/Plugins/iOS/CustomWebViewApplication.mm", "Libraries/CustomWebViewApplication.mm" }; string pbxprojPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(pbxprojPath)); foreach(string name in filesToRemove) { string fileGuid = proj.FindFileGuidByProjectPath(name); if (fileGuid != null) { Debug.Log ("Removing " + name + " from xcode project"); proj.RemoveFile(fileGuid); } } File.WriteAllText(pbxprojPath, proj.WriteToString()); #else if (GetBundleId() == null) { UnityEngine.Debug.LogError("The iOS bundle ID has not been set up through the " + "'iOS Setup' submenu of 'Google Play Games' - the generated xcode project will " + "not work properly."); return; } //Copy the podfile into the project. string podfile = "Assets/GooglePlayGames/Editor/Podfile.txt"; string destpodfile = pathToBuiltProject + "/Podfile"; if (!System.IO.File.Exists(destpodfile)) { FileUtil.CopyFileOrDirectory(podfile, destpodfile); } GPGSInstructionWindow w = EditorWindow.GetWindow<GPGSInstructionWindow>( true, "Building for IOS", true); w.minSize = new Vector2(400, 300); w.UsingCocoaPod = CocoaPodHelper.Update(pathToBuiltProject); UnityEngine.Debug.Log("Adding URL Types for authentication using PlistBuddy."); UpdateGeneratedInfoPlistFile(pathToBuiltProject + "/Info.plist"); UpdateGeneratedPbxproj(pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"); #endif }
private static void ModifyProject(string projectPath) { // Create PBXProject PBXProject project = new PBXProject(); project.ReadFromString(File.ReadAllText(projectPath)); if (!AppboyConfig.IOSAutomatesIntegration) { // Remove AppboyAppDelegate.mm from PBXProject Debug.Log("Removing AppboyAppDelegate.mm from " + AppboyAppDelegatePath); string appboyAppDelegateGuid = project.FindFileGuidByProjectPath(AppboyAppDelegatePath); project.RemoveFile(appboyAppDelegateGuid); } else { // Get project targets using Unity's default app target names string[] targets = { project.TargetGuidByName(PBXProject.GetUnityTargetName()), project.TargetGuidByName(PBXProject.GetUnityTestTargetName()) }; string[] requiredFrameworks = { "SystemConfiguration.framework", "QuartzCore.framework", "libz.tbd", "CoreImage.framework", "CoreText.framework" }; string[] optionalFrameworks = { "CoreTelephony.framework", "Social.framework", "Accounts.framework", "AdSupport.framework", "StoreKit.framework", "CoreLocation.framework", // optional for location tracking "ImageIO.framework" // required by SDWebImage }; foreach (string target in targets) { // Modify build properties project.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC"); project.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "./Frameworks/Plugins/iOS"); project.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "./Libraries/Plugins/iOS"); project.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "./Libraries"); // Add required frameworks // Note: Unity's documentation for PBXProject.AddFrameworkToProject says that the boolean parameter // should be true if required and false if optional, but actual behavior appears to be the exact opposite. foreach (string framework in requiredFrameworks) { project.AddFrameworkToProject(target, framework, false); } foreach (string framework in optionalFrameworks) { project.AddFrameworkToProject(target, framework, true); } } } // Write changes to XCode project File.WriteAllText(projectPath, project.WriteToString()); }
/** * Private post-export method * -------------------------- * * This is being executed in two separate fashions as seen above, * based on whether or not the build is occurring in the Cloud. * * - Path parameter points to root XCode project directory * where xcodeproj file is located * - Uses XCode Manipulation API to: * - Force Debug configuration before XCode build step is executed * - Disable ENABLE_BITCODE to prevent large app filesizes **/ private static void ProcessPostBuild(BuildTarget buildTarget, string path) { // Restricting post-export behavior to only builds where specific Scene is active if (buildTarget == BuildTarget.iOS && IsSceneActive ("Assets/Scenes/CounterScene.unity")) { // Initialize build settings var buildSettings = new BuildSettings { configuration = "Debug" }; /** * Manual manipulation of .xcscheme file * ------------------------------------- * * .xcscheme file contains all information related to build schemes as seen * in Project -> Schemes -> Edit Schemes dialog in XCode. In this case, we * are forcing Debug configuration. **/ // Access xcscheme file and ingest xml string schemePath = path + "/Unity-iPhone.xcodeproj/xcshareddata/xcschemes/Unity-iPhone.xcscheme"; var schemeReader = new StreamReader (schemePath); var xDoc = XDocument.Load(schemeReader); schemeReader.Close(); Debug.Log(string.Format("Loaded scheme file: {0}", schemePath)); // Set debug configuration for launch action foreach (XElement element in xDoc.Descendants("LaunchAction")) { element.SetAttributeValue("buildConfiguration", buildSettings.configuration); Debug.Log(string.Format("Set launch configuration to {0}", buildSettings.configuration)); } // Write file back out xDoc.Save(schemePath); Debug.Log(string.Format("Saved scheme file: {0}", schemePath)); /** * XCode Project manipulation examples * ----------------------------------- * * .pbxproj file contains information related to frameworks, build properties * and other settings within an XCode project. See the Manipulation API docs: * * http://docs.unity3d.com/ScriptReference/iOS.Xcode.PBXProject.html **/ // Access pbxproj file to add frameworks and build properties string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string target = proj.TargetGuidByName("Unity-iPhone"); // Add user packages to project. Most other source or resource files and packages // can be added the same way. //CopyAndReplaceDirectory ("NativeAssets/TestLib.bundle", Path.Combine (path, "Frameworks/TestLib.bundle")); //proj.AddFileToBuild (target, proj.AddFile ("Frameworks/TestLib.bundle", // "Frameworks/TestLib.bundle", PBXSourceTree.Source)); //CopyAndReplaceDirectory ("NativeAssets/TestLib.framework", Path.Combine (path, "Frameworks/TestLib.framework")); //proj.AddFileToBuild (target, proj.AddFile ("Frameworks/TestLib.framework", // "Frameworks/TestLib.framework", PBXSourceTree.Source)); // Add custom system frameworks. Duplicate frameworks are ignored. // needed by our native plugin in Assets/Plugins/iOS //proj.AddFrameworkToProject (target, "AssetsLibrary.framework", false /*not weak*/); // Add our framework directory to the framework include path //proj.SetBuildProperty (target, "FRAMEWORK_SEARCH_PATHS", "$(inherited)"); //proj.AddBuildProperty (target, "FRAMEWORK_SEARCH_PATHS", "$(PROJECT_DIR)/Frameworks"); // Set a custom link flag //proj.AddBuildProperty (target, "OTHER_LDFLAGS", "-ObjC"); // Write changes back to file File.WriteAllText(projPath, proj.WriteToString()); } }
static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject) { #if UNITY_5 if (target == BuildTarget.WSAPlayer || target == BuildTarget.WP8Player) #else if (target == BuildTarget.MetroPlayer || target == BuildTarget.WP8Player) #endif { #if UNITY_WP8 || UNITY_5 var productName = PlayerSettings.productName.Replace(" ", "").Replace("_", ""); #else var productName = PlayerSettings.productName; #endif #if UNITY_5 if (EditorUserBuildSettings.wsaSDK == WSASDK.UniversalSDK81 && EditorUserBuildSettings.activeBuildTarget != BuildTarget.WP8Player) #else if (EditorUserBuildSettings.metroSDK == MetroSDK.UniversalSDK81 && EditorUserBuildSettings.activeBuildTarget != BuildTarget.WP8Player) #endif { var projPath = string.Format("{0}/{1}/{1}.Shared/{1}.Shared.projItems", pathToBuiltProject, productName); Debug.Log("Modifying Proj: " + projPath); var doc = XDocument.Load(projPath); addPostProjectReferences(doc, pathToBuiltProject, string.Format("/{0}.Shared", productName), productName, "$(MSBuildThisFileDirectory)"); doc.Save(projPath); projPath = string.Format("{0}/{1}/{1}.Windows/{1}.Windows.csproj", pathToBuiltProject, productName); Debug.Log("Modifying Proj: " + projPath); doc = XDocument.Load(projPath); addPostProjectCompilerDirectives(doc); doc.Save(projPath); projPath = string.Format("{0}/{1}/{1}.WindowsPhone/{1}.WindowsPhone.csproj", pathToBuiltProject, productName); Debug.Log("Modifying Proj: " + projPath); doc = XDocument.Load(projPath); addPostProjectCompilerDirectives(doc); doc.Save(projPath); } else { var projPath = string.Format("{0}/{1}/{1}.csproj", pathToBuiltProject, productName); Debug.Log("Modifying Proj: " + projPath); var doc = XDocument.Load(projPath); addPostProjectCompilerDirectives(doc); addPostProjectReferences(doc, pathToBuiltProject, "", productName, ""); doc.Save(projPath); } } #if UNITY_IOS && UNITY_5 else if (target == BuildTarget.iOS) { string projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; var proj = new PBXProject(); proj.ReadFromString(File.ReadAllText (projPath)); string targetID = proj.TargetGuidByName ("Unity-iPhone"); // set custom link flags proj.AddBuildProperty (targetID, "OTHER_LDFLAGS", "-all_load"); proj.AddBuildProperty (targetID, "OTHER_LDFLAGS", "-ObjC"); // add frameworks proj.AddFrameworkToProject(targetID, "AdSupport.framework", true); proj.AddFrameworkToProject(targetID, "CoreTelephony.framework", true); proj.AddFrameworkToProject(targetID, "EventKit.framework", true); proj.AddFrameworkToProject(targetID, "EventKitUI.framework", true); proj.AddFrameworkToProject(targetID, "iAd.framework", true); proj.AddFrameworkToProject(targetID, "MessageUI.framework", true); proj.AddFrameworkToProject(targetID, "StoreKit.framework", true); proj.AddFrameworkToProject(targetID, "Security.framework", true); proj.AddFrameworkToProject(targetID, "GameKit.framework", true); proj.AddFrameworkToProject(targetID, "GoogleMobileAds.framework", false); // change GoogleMobileAds to use reletive path string projData = proj.WriteToString(); projData = projData.Replace ( @"/* GoogleMobileAds.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleMobileAds.framework; path = System/Library/Frameworks/GoogleMobileAds.framework; sourceTree = SDKROOT; };", @"/* GoogleMobileAds.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleMobileAds.framework; path = Frameworks/GoogleMobileAds.framework; sourceTree = ""<group>""; };" //@"/* GoogleMobileAds.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleMobileAds.framework; path = """ + pathToBuiltProject+"/Frameworks/GoogleMobileAds.framework" + @"""; sourceTree = ""<absolute>""; };" ); // change framework search path to include local framework directory projData = projData.Replace ( @"FRAMEWORK_SEARCH_PATHS = ""$(inherited)"";", @"FRAMEWORK_SEARCH_PATHS = (""$(inherited)"", ""$(PROJECT_DIR)/Frameworks"",);" ); // save proj data File.WriteAllText(projPath, projData); // create Frameworks folder if one doesn't exists if (!Directory.Exists(pathToBuiltProject+"/Frameworks/")) Directory.CreateDirectory(pathToBuiltProject+"/Frameworks/"); // extract GoogleMobileAds.framework.zip to xcode framework path if (!Directory.Exists(pathToBuiltProject+"/Frameworks/GoogleMobileAds.framework/")) { var startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.Arguments = @"""" + Application.dataPath+"/Plugins/IOS/GoogleMobileAds.framework.zip" + @""" -d """ + pathToBuiltProject+@"/Frameworks/"""; startInfo.FileName = "unzip"; startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; startInfo.CreateNoWindow = true; using (var process = System.Diagnostics.Process.Start(startInfo)) { process.WaitForExit(); int exitCode = process.ExitCode; if (exitCode != 0) Debug.LogError("Failed to unzip GoogleMobileAds.framework.zip with ErrorCode: " + exitCode); } } } #endif }
static void OnPostprocessBuild(BuildTarget buildTarget, string path) { if (buildTarget != BuildTarget.iOS) return; /*------------------------------------------------------*/ // for frameworks string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; Debug.Log("Build iOS. path: " + projPath); PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string target = proj.TargetGuidByName("Unity-iPhone"); // string debugConfig = proj.BuildConfigByName(target, "Debug"); // string releaseConfig = proj.BuildConfigByName(target, "Release"); // Add custom system frameworks. Duplicate frameworks are ignored. // needed by our native plugin in Assets/Plugins/iOS // proj.AddFrameworkToProject(target, ".framework", false /*not weak*/); // Add usr/lib string framenwork1 = "libz.dylib"; string framenwork2 = "libsqlite3.0.dylib"; string fileGuid1 = proj.AddFile ("usr/lib/"+framenwork1, "Frameworks/"+framenwork1, PBXSourceTree.Sdk); string fileGuid2 = proj.AddFile ("usr/lib/"+framenwork2, "Frameworks/"+framenwork2, PBXSourceTree.Sdk); proj.AddFileToBuild (target, fileGuid1); proj.AddFileToBuild (target, fileGuid2); // Add our framework directory to the framework include path proj.SetBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(inherited)"); proj.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(PROJECT_DIR)/Frameworks"); // proj.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC"); proj.AddBuildProperty(target, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES"); File.WriteAllText(projPath, proj.WriteToString()); /*------------------------------------------------------*/ // for Info.plist // PlistDocument // http://docs.unity3d.com/ScriptReference/iOS.Xcode.PlistDocument.html // Get plist var plistPath = Path.Combine(path, "Info.plist"); var plist = new PlistDocument(); plist.ReadFromFile(plistPath); // Get root PlistElementDict rootDict = plist.root; // Create URL types string identifier = PlayerPrefs.GetString ("identifier"); string scheme = PlayerPrefs.GetString ("scheme"); PlistElementArray urlTypesArray = rootDict.CreateArray ("CFBundleURLTypes"); PlistElementDict dict = urlTypesArray.AddDict (); dict.SetString ("CFBundleURLName", identifier); PlistElementArray schemesArray = dict.CreateArray ("CFBundleURLSchemes"); schemesArray.AddString (scheme); // PlistElementArray urlTypesArray = rootDict.CreateArray ("CFBundleURLTypes"); // PlistElementDict dict = urlTypesArray.AddDict (); // dict.SetString ("CFBundleURLName", "com.unitybuild.test"); // PlistElementArray schemesArray = dict.CreateArray ("CFBundleURLSchemes"); // schemesArray.AddString ("myscheme"); // Write to file File.WriteAllText(plistPath, plist.WriteToString()); }
private static void UpdatePbxProject(string projectPath, string buildPath) { PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projectPath)); string[] frameworks = { "CFNetwork.framework", "CoreGraphics.framework", "Foundation.framework", "MobileCoreServices.framework", "Security.framework", "SystemConfiguration.framework", "UIKit.framework", "CoreTelephony.framework", "CoreLocation.framework", "CoreData.framework", "UserNotifications.framework" }; string[] targets = { proj.TargetGuidByName(PBXProject.GetUnityTargetName()), proj.TargetGuidByName(PBXProject.GetUnityTestTargetName()) }; string airshipConfig = Path.Combine(buildPath, "AirshipConfig.plist"); if (File.Exists(airshipConfig)) { File.Delete(airshipConfig); } File.Copy(Path.Combine(Application.dataPath, "Plugins/iOS/AirshipConfig.plist"), airshipConfig); string airshipGUID = proj.AddFile("AirshipConfig.plist", "AirshipConfig.plist", PBXSourceTree.Source); foreach (string target in targets) { proj.AddBuildProperty(target, "OTHER_LDFLAGS", "$(inherited)"); proj.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC -lz -lsqlite3"); proj.AddFileToBuild(target, airshipGUID); foreach (string framework in frameworks) { proj.AddFrameworkToProject(target, framework, false); UnityEngine.Debug.Log ("Adding framework: " + framework); } } File.WriteAllText(projectPath, proj.WriteToString()); }
public static void OnPostProcessBuild(BuildTarget target, string path) { var pbxProjectPath = UnityEditor.iOS.Xcode.PBXProject.GetPBXProjectPath(path); var pbxProject = new UnityEditor.iOS.Xcode.PBXProject(); pbxProject.ReadFromString(System.IO.File.ReadAllText(pbxProjectPath)); Debug.Log("TTPPostProcessSettings::Add swift support for mopub and ecpm"); pbxProject.AddBuildProperty(GetTargetGUID(pbxProject), "LIBRARY_SEARCH_PATHS", "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)"); pbxProject.AddBuildProperty(GetTargetGUID(pbxProject), "LIBRARY_SEARCH_PATHS", "$(SDKROOT)/usr/lib/swift"); pbxProject.SetBuildProperty(GetTargetGUID(pbxProject), "LD_RUNPATH_SEARCH_PATHS", "/usr/lib/swift $(inherited) @executable_path/Frameworks"); pbxProject.SetBuildProperty(GetTargetGUID(pbxProject), "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "YES"); pbxProject.SetBuildProperty(GetTargetGUID(pbxProject), "SWIFT_VERSION", "5"); #if UNITY_2019_3_OR_NEWER var unityFrameworkTarget = pbxProject.GetUnityFrameworkTargetGuid(); pbxProject.AddBuildProperty(unityFrameworkTarget, "LIBRARY_SEARCH_PATHS", "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)"); pbxProject.AddBuildProperty(unityFrameworkTarget, "LIBRARY_SEARCH_PATHS", "$(SDKROOT)/usr/lib/swift"); pbxProject.SetBuildProperty(unityFrameworkTarget, "LD_RUNPATH_SEARCH_PATHS", "/usr/lib/swift $(inherited) @executable_path/Frameworks"); pbxProject.SetBuildProperty(unityFrameworkTarget, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "NO"); pbxProject.SetBuildProperty(unityFrameworkTarget, "SWIFT_VERSION", "5"); var mainTargetLinkFrameworksId = pbxProject.GetFrameworksBuildPhaseByTarget(pbxProject.GetUnityMainTargetGuid()); var unityFrameworkBuildProductId = pbxProject.GetTargetProductFileRef(pbxProject.GetUnityFrameworkTargetGuid()); Debug.Log("Linking unity framework to main target to support unity 2020 - " + mainTargetLinkFrameworksId + ", " + unityFrameworkBuildProductId); pbxProject.AddFileToBuildSection(pbxProject.GetUnityMainTargetGuid(), mainTargetLinkFrameworksId, unityFrameworkBuildProductId); #endif #if UNITY_2019_3_OR_NEWER //Add BUAdASDK.bundle string pathToBUAdSDK = "Data/Raw/Bundle/BUAdSDK.bundle"; string absPathToBUADSDK = Path.Combine(path, pathToBUAdSDK); if (Directory.Exists(absPathToBUADSDK)) { Debug.Log("TTPPostProcessSettings :: Adding BUAdSDK.bundle"); pbxProject.AddFileToBuild(GetTargetGUID(pbxProject), pbxProject.AddFile(pathToBUAdSDK, "BUAdSDK.bundle")); } else { Debug.Log("TTPPostProcessSettings :: BUAdSDK.bundle not exists"); } //END BUAdSDK string pathToTapJoyBundle = "Data/Raw/Bundle/TapjoyResources.bundle"; string absPathTapJoyBundle = Path.Combine(path, pathToBUAdSDK); if (Directory.Exists(absPathTapJoyBundle)) { Debug.Log("TTPPostProcessSettings :: Adding TapjoyResources.bundle"); pbxProject.AddFileToBuild(GetTargetGUID(pbxProject), pbxProject.AddFile(pathToTapJoyBundle, "TapjoyResources.bundle")); } else { Debug.Log("TTPAddTiktokBundle.cs :: TapjoyResources.bundle not exists"); } #endif File.WriteAllText(pbxProjectPath, pbxProject.WriteToString()); var plistPath = Path.Combine(path, "Info.plist"); var plist = new PlistDocument(); plist.ReadFromFile(plistPath); rootDict = plist.root; rootDict.SetBoolean("GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS", false); rootDict.SetBoolean("FIREBASE_ANALYTICS_COLLECTION_ENABLED", false); // Add AppLovinSdkKey if (Application.identifier == "com.tabtaleint.ttplugins" || Application.identifier == "com.tabtaleint.ttplugins" || Application.identifier == "com.tabtaleint.ttplugins") { rootDict.SetString("AppLovinSdkKey", "yRHC8kgWwG5S4lOh7Dx_pZB2iEBLVWMSzde5MKbGahifQ6MTKIT7tk9ZzLvTsFwptZvDuVTTBB8cHU9bohkeQu"); } else { rootDict.SetString("AppLovinSdkKey", "TREvWeSbneklepMTdxWL5KCqUD57xezP4CIarlBcOwM1kiVMe0hkLvTq7dy3HwSL6mxyV7Tu1wwlcP5FQo-nhW"); } var array = rootDict.CreateArray("SKAdNetworkItems"); //admob array.AddDict().SetString("SKAdNetworkIdentifier", "cstr6suwn9.skadnetwork"); //applovin array.AddDict().SetString("SKAdNetworkIdentifier", "ludvb6z3bs.skadnetwork"); //ironsource array.AddDict().SetString("SKAdNetworkIdentifier", "su67r6k2v3.skadnetwork"); //adcolony array.AddDict().SetString("SKAdNetworkIdentifier", "4pfyvq9l8r.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "4fzdc2evr5.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "4468km3ulz.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "3rd42ekr43.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "m8dbw4sv7c.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "ejvt5qm6ak.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "mtkv5xtk9e.skadnetwork"); //chartboost array.AddDict().SetString("SKAdNetworkIdentifier", "f38h382jlk.skadnetwork"); //facebook array.AddDict().SetString("SKAdNetworkIdentifier", "v9wttpbfk9.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "n38lu8286q.skadnetwork"); //hypermx array.AddDict().SetString("SKAdNetworkIdentifier", "nu4557a4je.skadnetwork"); //inmobi array.AddDict().SetString("SKAdNetworkIdentifier", "wzmmz9fp6w.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "uw77j35x4d.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "7ug5zh24hu.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "hs6bdukanm.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "ggvn48r87g.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "5lm9lj6jb7.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "9rd848q2bz.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "c6k4g5qg8m.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "3sh42y64q3.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "yclnxrl5pm.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "f73kdq92p3.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "ydx93a7ass.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "w9q455wk68.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "prcb7njmu6.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "wg4vff78zm.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "mlmmfzh3r3.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "tl55sbb4fm.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "t38b2kh725.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "5l3tpt7t6e.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "7rz58n8ntl.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "klf5c3l5u5.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "cg4yq2srnc.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "av6w8kgt66.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "9t245vhmpl.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "v72qych5uu.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "2u9pt9hc89.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "44jx6755aq.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "8s468mfl3y.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "p78axxw29g.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "ppxm28t8ap.skadnetwork"); //mintegral array.AddDict().SetString("SKAdNetworkIdentifier", "kbd757ywx3.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "glqzh8vgby.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "6xzpu9s2p8.skadnetwork"); //pangle array.AddDict().SetString("SKAdNetworkIdentifier", "22mmun2rn5.skadnetwork"); //non cn array.AddDict().SetString("SKAdNetworkIdentifier", "238da6jt44.skadnetwork"); //cn //tapjoy array.AddDict().SetString("SKAdNetworkIdentifier", "ecpz2srf59.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "578prtvx9j.skadnetwork"); //unity ads array.AddDict().SetString("SKAdNetworkIdentifier", "4dzt52r2t5.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "488r3q3dtq.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "zmvfpc5aq8.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "v79kvwwj4g.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "lr83yxwka7.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "44n7hlldy6.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "424m5254lk.skadnetwork"); //vungle array.AddDict().SetString("SKAdNetworkIdentifier", "gta9lk7p23.skadnetwork"); //mopub array.AddDict().SetString("SKAdNetworkIdentifier", "cdkw7geqsh.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "qyjfv329m4.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "3qy4746246.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "523jb4fst2.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "5a6flpkh64.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "737z793b9f.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "7953jerfzd.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "97r2b46745.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "9yg77x724h.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "bvpn9ufa9b.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "cj5566h2ga.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "gvmwg8q7h5.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "mls7yz5dvl.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "n66cz3y3bx.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "n9x2a789qt.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "nzq8sh4pbs.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "pu4na253f3.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "u679fj5vs4.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "xy9t38ct57.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "z4gj7hsk7h.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "s39g8k73mm.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "24t9a8vw3c.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "yrqqpx2mcb.skadnetwork"); array.AddDict().SetString("SKAdNetworkIdentifier", "52fl2v3hgk.skadnetwork"); // fix problem with statusbar on iOS 14 if (!rootDict.values.ContainsKey("UIViewControllerBasedStatusBarAppearance")) { rootDict.SetBoolean("UIViewControllerBasedStatusBarAppearance", false); } File.WriteAllText(plistPath, plist.WriteToString()); }