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 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 SetBuildProperties(PBXProject proj, Hashtable table) { if (table != null) { string target = proj.TargetGuidByName(PBXProject.GetUnityTargetName()); Hashtable setTable = table.SGet <Hashtable>("="); foreach (DictionaryEntry i in setTable) { proj.SetBuildProperty(target, i.Key.ToString(), i.Value.ToString()); } Hashtable addTable = table.SGet <Hashtable>("+"); foreach (DictionaryEntry i in addTable) { ArrayList array = i.Value as ArrayList; List <string> list = new List <string>(); foreach (var flag in array) { list.Add(flag.ToString()); } proj.UpdateBuildProperty(target, i.Key.ToString(), list, null); } Hashtable removeTable = table.SGet <Hashtable>("-"); foreach (DictionaryEntry i in removeTable) { ArrayList array = i.Value as ArrayList; List <string> list = new List <string>(); foreach (var flag in array) { list.Add(flag.ToString()); } proj.UpdateBuildProperty(target, i.Key.ToString(), null, list); } } }
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()); }
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 target, string pathToBuiltProject) { Debug.LogWarning("IphoneX Fiter"); if (target != BuildTarget.iOS) { Debug.LogWarning("Target is not iPhone. XCodePostProcess will not run"); return; } // Create a new project object from build target UnityEditor.iOS.Xcode.PBXProject project = new UnityEditor.iOS.Xcode.PBXProject(); string configFilePath = UnityEditor.iOS.Xcode.PBXProject.GetPBXProjectPath(pathToBuiltProject); project.ReadFromFile(configFilePath); string targetGuid = project.TargetGuidByName("Unity-iPhone"); string debug = project.BuildConfigByName(targetGuid, "Debug"); string release = project.BuildConfigByName(targetGuid, "Release"); project.AddBuildPropertyForConfig(debug, "CODE_SIGN_RESOURCE_RULES_PATH", "$(SDKROOT)/ResourceRules.plist"); project.AddBuildPropertyForConfig(release, "CODE_SIGN_RESOURCE_RULES_PATH", "$(SDKROOT)/ResourceRules.plist"); project.AddFrameworkToProject(targetGuid, "SystemConfiguration.framework", true); project.AddFrameworkToProject(targetGuid, "Security.framework", true); project.AddFrameworkToProject(targetGuid, "libz.tbd", true); project.AddFrameworkToProject(targetGuid, "libc++.tbd", true); project.SetBuildProperty(targetGuid, "ENABLE_BITCODE", "NO"); project.WriteToFile(configFilePath); EditSuitIpXCode(pathToBuiltProject); }
static void AddFrameworks(UnityEditor.iOS.Xcode.PBXProject project, string targetGUID) { project.AddFrameworkToProject(targetGUID, "AVFoundation.framework", true); project.AddFrameworkToProject(targetGUID, "Accelerate.framework", true); project.AddFrameworkToProject(targetGUID, "AdSupport.framework", true); project.AddFrameworkToProject(targetGUID, "AudioToolbox.framework", true); project.AddFrameworkToProject(targetGUID, "CoreLocation.framework", false); project.AddFrameworkToProject(targetGUID, "CoreMedia.framework", false); project.AddFrameworkToProject(targetGUID, "CoreMotion.framework", false); project.AddFrameworkToProject(targetGUID, "CoreTelephony.framework", false); project.AddFrameworkToProject(targetGUID, "MessageUI.framework", false); project.AddFrameworkToProject(targetGUID, "MobileCoreServices.framework", false); project.AddFrameworkToProject(targetGUID, "SafariServices.framework", false); project.AddFrameworkToProject(targetGUID, "StoreKit.framework", false); project.AddFrameworkToProject(targetGUID, "SystemConfiguration.framework", false); project.AddFrameworkToProject(targetGUID, "VideoToolbox.framework", false); project.AddFrameworkToProject(targetGUID, "WebKit.framework", false); project.AddFrameworkToProject(targetGUID, "libbz2.tbd", false); project.AddFrameworkToProject(targetGUID, "libc++.tbd", false); project.AddFrameworkToProject(targetGUID, "libresolv.9.tbd", false); project.AddFrameworkToProject(targetGUID, "libsqlite3.tbd", false); project.AddFrameworkToProject(targetGUID, "libxml2.tbd", false); project.AddFrameworkToProject(targetGUID, "libz.tbd", false); }
private static void EditXcodeProject(string buildFolder) { PBXProject project = new PBXProject(); string path = Path.Combine(buildFolder, FileUtil.NiceWinPath("Unity-iPhone.xcodeproj/project.pbxproj")); project.ReadFromFile(path); string targetGuid = project.TargetGuidByName(PBXProject.GetUnityTargetName()); if (AdvertisementSettings.enabled && AdvertisementSettings.IsPlatformEnabled(RuntimePlatform.IPhonePlayer)) { string target = Path.Combine(buildFolder, Path.Combine("UnityAds", "UnityAds.framework")); FileUtil.CopyDirectoryRecursive(Path.Combine(extensionPath, FileUtil.NiceWinPath("Editor/Resources/iOS/builds/UnityAds.framework")), target, true); project.AddFileToBuild(targetGuid, project.AddFile(Path.Combine("UnityAds", "UnityAds.framework"), "Frameworks/UnityAds.framework", PBXSourceTree.Source)); project.AddBuildProperty(targetGuid, "FRAMEWORK_SEARCH_PATHS", "$(SRCROOT)/UnityAds"); project.AddFrameworkToProject(targetGuid, "AdSupport.framework", true); project.AddFrameworkToProject(targetGuid, "StoreKit.framework", false); project.AddFrameworkToProject(targetGuid, "CoreTelephony.framework", false); } else { project.RemoveFile(project.FindFileGuidByRealPath(Path.Combine("UnityAds", "UnityAds.framework"))); string[] removeValues = new string[] { "$(SRCROOT)/UnityAds" }; project.UpdateBuildProperty(targetGuid, "FRAMEWORK_SEARCH_PATHS", null, removeValues); string str5 = Path.Combine(buildFolder, "UnityAds"); if (Directory.Exists(str5)) { Directory.Delete(str5, true); } } project.AddFileToBuild(targetGuid, project.AddFile("UnityAdsConfig.h", "Classes/UnityAds/UnityAdsConfig.h")); project.WriteToFile(path); }
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 EditorIOSAutoBuild(string buildPath) { #if UNITY_IOS var dummy = ScriptableObject.CreateInstance <XCodePostProcess>(); var file = dummy.m_entitlementsFile; ScriptableObject.DestroyImmediate(dummy); if (file == null) { return; } var proj_path = UnityEditor.iOS.Xcode.PBXProject.GetPBXProjectPath(buildPath); var proj = new UnityEditor.iOS.Xcode.PBXProject(); proj.ReadFromFile(proj_path); // target_name = "Unity-iPhone" var target_name = UnityEditor.iOS.Xcode.PBXProject.GetUnityTargetName(); var target_guid = proj.TargetGuidByName(target_name); var src = AssetDatabase.GetAssetPath(file); var file_name = Path.GetFileName(src); var dst = buildPath + "/" + target_name + "/" + file_name; FileUtil.CopyFileOrDirectory(src, dst); proj.AddFile(target_name + "/" + file_name, file_name); proj.AddBuildProperty(target_guid, "CODE_SIGN_ENTITLEMENTS", target_name + "/" + file_name); proj.WriteToFile(proj_path); #endif }
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()); }
// [PostProcessBuild(40006)] public static void OnPostProcessBuild(BuildTarget target, string path) { Debug.Log("TTPPrivacySettingsPostProcess::OnPostprocessBuild"); #if CRAZY_LABS_CLIK Debug.Log("TTPPrivacySettingsPostProcess::OnPostprocessBuild: in CLIK"); var includedServicesPath = "Assets/Tabtale/TTPlugins/CLIK/Resources/ttpIncludedServices.asset"; if (File.Exists(includedServicesPath)) { Debug.Log("TTPPrivacySettingsPostProcess::OnPostprocessBuild: found included services asset"); var includedServices = AssetDatabase.LoadAssetAtPath <TTPIncludedServicesScriptableObject>(includedServicesPath); if (!includedServices.privacySettings) { Debug.Log("TTPPrivacySettingsPostProcess::OnPostprocessBuild: privacy settings not included"); return; } } #endif var pbxProjectPath = UnityEditor.iOS.Xcode.PBXProject.GetPBXProjectPath(path); var pbxProject = new UnityEditor.iOS.Xcode.PBXProject(); pbxProject.ReadFromString(System.IO.File.ReadAllText(pbxProjectPath)); var plistPath = Path.Combine(path, "Info.plist"); var plist = new PlistDocument(); plist.ReadFromFile(plistPath); var rootDict = plist.root; rootDict.SetString("NSUserTrackingUsageDescription", "If you agree our partners will use your data to show you relevant ads.\n" + "To learn how we use data: https://crazylabs.com/app.\n" + "Our partners who rely on your consent: https://crazylabs.com/3rdp.\n" + "You can change your selection any time in the Limit Ad Tracking settings on your device."); File.WriteAllText(plistPath, plist.WriteToString()); }
private static void SetFilesCompileFlag(PBXProject proj, Hashtable arg) { if (arg == null) { return; } string target = proj.TargetGuidByName(PBXProject.GetUnityTargetName()); foreach (DictionaryEntry i in arg) { string fileProjPath = i.Key.ToString(); string fguid = proj.FindFileGuidByProjectPath(fileProjPath); if (fguid == null) { continue; } ArrayList des = i.Value as ArrayList; List <string> list = new List <string>(); foreach (var flag in des) { list.Add(flag.ToString()); } proj.SetCompileFlagsForFile(target, fguid, list); } }
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()); } }
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 PostProcessIosBuild(string pathToBuiltProject) { UnityEditor.iOS.Xcode.PBXProject project = new UnityEditor.iOS.Xcode.PBXProject(); string pbxPath = UnityEditor.iOS.Xcode.PBXProject.GetPBXProjectPath(pathToBuiltProject); project.ReadFromFile(pbxPath); #if UNITY_2019_3_OR_NEWER string targetId = project.GetUnityFrameworkTargetGuid(); #else string targetId = project.TargetGuidByName(UnityEditor.iOS.Xcode.PBXProject.GetUnityTargetName()); #endif project.AddFrameworkToProject(targetId, "AdSupport.framework", false); project.AddFrameworkToProject(targetId, "CoreTelephony.framework", false); project.AddFrameworkToProject(targetId, "StoreKit.framework", false); project.AddFrameworkToProject(targetId, "WebKit.framework", false); project.AddFileToBuild(targetId, project.AddFile("usr/lib/libsqlite3.dylib", "Frameworks/libsqlite3.dylib", UnityEditor.iOS.Xcode.PBXSourceTree.Sdk)); project.AddFileToBuild(targetId, project.AddFile("usr/lib/libz.1.1.3.dylib", "Frameworks/libz.1.1.3.dylib", UnityEditor.iOS.Xcode.PBXSourceTree.Sdk)); project.AddBuildProperty(targetId, "OTHER_LDFLAGS", "-ObjC"); project.WriteToFile(pbxPath); Debug.Log("Vungle iOS post processor completed."); }
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 }
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 }
public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { UnityEngine.Debug.Log("OnPostprocessBuild "+buildTarget+" "+path); if (buildTarget == BuildTarget.iOS) { string projectPath = PBXProject.GetPBXProjectPath(path); PBXProject project = new PBXProject(); project.ReadFromFile(projectPath); UnityEngine.Debug.Log(PBXProject.GetUnityTargetName()); string target = project.TargetGuidByName(PBXProject.GetUnityTargetName()); UnityEngine.Debug.Log(target); // Add build settings for CocoaPods project.AddBuildProperty(target, "HEADER_SEARCH_PATHS", "$(inherited)"); project.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(inherited)"); project.AddBuildProperty(target, "OTHER_CFLAGS", "$(inherited)"); project.AddBuildProperty(target, "OTHER_LDFLAGS", "$(inherited)"); // Disable Bitcode project.SetBuildProperty(target, "ENABLE_BITCODE", "NO"); // Copy Podfile into project string unityProjectRootPath = Path.GetFullPath("./").Normalize(); UnityEngine.Debug.Log(unityProjectRootPath); // Default src location is the project root FileUtil.ReplaceFile("Assets/DeltaDNAAds/Editor/iOS/Podfile", path + "/Podfile"); // Set Podfile platform version to match Unity #if UNITY_5_5_OR_NEWER var targetOSVersion = PlayerSettings.iOS.targetOSVersionString; string iosPlatform = targetOSVersion.ToString(); UnityEngine.Debug.Log(iosPlatform); #else var targetOSVersion = PlayerSettings.iOS.targetOSVersion; string iosPlatform = targetOSVersion.ToString().Substring(4).Replace('_', '.'); #endif var podfile = new List<string>(File.ReadAllLines(path + "/Podfile")); podfile = new List<string>(podfile.Select(e => e.StartsWith("platform") ? string.Format("platform :ios, '{0}'", iosPlatform) : e).AsEnumerable()); File.WriteAllLines(path + "/Podfile", podfile.ToArray()); // Update the XCode project on disk project.WriteToFile(projectPath); // Run pod update Process proc = new Process(); proc.StartInfo.FileName = "/usr/local/bin/pod"; proc.StartInfo.Arguments = "install --project-directory=\""+path+"\""; proc.StartInfo.UseShellExecute = false; proc.Start(); proc.WaitForExit(); } }
// 添加动态库 注意路径 public static void AddFramework(string coreFrameworkName, UnityEditor.iOS.Xcode.PBXProject proj, string target) { const string defaultLocationInProj = "Library/"; string framework = Path.Combine(defaultLocationInProj, coreFrameworkName); string fileGuid = proj.AddFile(framework, "Frameworks/" + framework, PBXSourceTree.Sdk); PBXProjectExtensions.AddFileToEmbedFrameworks(proj, target, fileGuid); proj.SetBuildProperty(target, "LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks"); }
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) { 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()); } }
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()); }
private static void AddFolderBuild(PBXProject proj, string xcodePath, string root) { //获得源文件下所有目录文件 string currDir = Path.Combine(xcodePath, root); if (root.EndsWith(".framework") || root.EndsWith(".xcframework") || root.EndsWith(".bundle")) { string target = proj.TargetGuidByName(PBXProject.GetUnityTargetName()); string fileGuid = proj.AddFile(root, root, PBXSourceTree.Source); proj.AddFileToBuild(target, fileGuid); SetEmbedFrameworks(proj, root, fileGuid); Console.WriteLine(string.Format("add framework or bundle to build:{0}->{1}", currDir, root)); return; } List <string> folders = new List <string>(Directory.GetDirectories(currDir)); foreach (string folder in folders) { string name = Path.GetFileName(folder); string t_path = Path.Combine(currDir, name); string t_projPath = Path.Combine(root, name); if (folder.EndsWith(".framework") || folder.EndsWith(".xcframework") || folder.EndsWith(".bundle")) { string target = proj.TargetGuidByName(PBXProject.GetUnityTargetName()); string fileGuid = proj.AddFile(t_projPath, t_projPath, PBXSourceTree.Source); proj.AddFileToBuild(target, fileGuid); AutoAddSearchPath(proj, xcodePath, t_path); SetEmbedFrameworks(proj, t_projPath, fileGuid); Console.WriteLine(string.Format("add framework or bundle to build:{0}->{1}", t_path, t_projPath)); } else { AddFolderBuild(proj, xcodePath, t_projPath); } } List <string> files = new List <string>(Directory.GetFiles(currDir)); foreach (string file in files) { if (NeedCopy(file)) { string name = Path.GetFileName(file); string t_path = Path.Combine(currDir, name); string t_projPath = Path.Combine(root, name); string target = proj.TargetGuidByName(PBXProject.GetUnityTargetName()); string fileGuid = proj.AddFile(t_projPath, t_projPath, PBXSourceTree.Source); proj.AddFileToBuild(target, fileGuid); AutoAddSearchPath(proj, xcodePath, t_path); SetEmbedFrameworks(proj, t_projPath, fileGuid); Console.WriteLine("add file to build:" + Path.Combine(root, file)); } } }
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 CopyFiles(PBXProject proj, string xcodePath, Hashtable arg) { if (arg == null) { return; } foreach (DictionaryEntry i in arg) { //string src = Path.Combine(System.Environment.CurrentDirectory, i.Key.ToString()); string src = Path.Combine(pluginPath, i.Key.ToString()); string des = Path.Combine(xcodePath, i.Value.ToString()); CopyFile(proj, xcodePath, src, des); } }
private static void SetShellScriptBuildPhase(PBXProject proj, Hashtable table) { if (table != null) { string target = proj.TargetGuidByName(PBXProject.GetUnityTargetName()); Hashtable addTable = table.SGet <Hashtable>("+"); foreach (DictionaryEntry i in addTable) { string shellName = i.Key.ToString(); string shellScript = i.Value.ToString(); proj.AddShellScriptBuildPhase(target, shellName, "/bin/sh", shellScript); } } }
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()); }
private static void fixPbxproject(string path) { #if UNITY_IOS UnityEditor.iOS.Xcode.PBXProject pbxProj = new UnityEditor.iOS.Xcode.PBXProject(); pbxProj.ReadFromFile(path); string targetGuid = pbxProj.TargetGuidByName("Unity-iPhone"); pbxProj.SetBuildProperty(targetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "YES"); pbxProj.WriteToFile(path); AddDynamicFrameworksForUnity5(path); #endif }
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 OnPostProcessBuild(BuildTarget target, string path) { Debug.Log("TTPPrivacySettingsPostProcess::OnPostprocessBuild"); #if CRAZY_LABS_CLIK Debug.Log("TTPPrivacySettingsPostProcess::OnPostprocessBuild: in CLIK"); var includedServicesPath = "Assets/Tabtale/TTPlugins/CLIK/Resources/ttpIncludedServices.asset"; if (File.Exists(includedServicesPath)) { Debug.Log("TTPPrivacySettingsPostProcess::OnPostprocessBuild: found included services asset"); var includedServices = AssetDatabase.LoadAssetAtPath <TTPIncludedServicesScriptableObject>(includedServicesPath); if (!includedServices.privacySettings) { Debug.Log("TTPPrivacySettingsPostProcess::OnPostprocessBuild: privacy settings not included"); return; } } #endif string attText = null; var additionalConfigPath = "Assets/StreamingAssets/ttp/configurations/additionalConfig.json"; if (File.Exists(additionalConfigPath)) { var json = File.ReadAllText(additionalConfigPath); if (!string.IsNullOrEmpty(json)) { var dic = TTPJson.Deserialize(json) as Dictionary <string, object>; if (dic != null) { if (dic.ContainsKey("attText") && dic["attText"] is string) { attText = dic["attText"] as string; } } } } var pbxProjectPath = UnityEditor.iOS.Xcode.PBXProject.GetPBXProjectPath(path); var pbxProject = new UnityEditor.iOS.Xcode.PBXProject(); pbxProject.ReadFromString(System.IO.File.ReadAllText(pbxProjectPath)); var plistPath = Path.Combine(path, "Info.plist"); var plist = new PlistDocument(); plist.ReadFromFile(plistPath); var rootDict = plist.root; rootDict.SetString("NSUserTrackingUsageDescription", attText ?? "By pressing \"Allow\" we will be able to provide you personalized ads."); 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()); }
private static void DoAddLocalizationFolder(string projectPath) { string pbxProjectPath = UnityEditor.iOS.Xcode.PBXProject.GetPBXProjectPath(projectPath); UnityEditor.iOS.Xcode.PBXProject originalProj = new UnityEditor.iOS.Xcode.PBXProject(); originalProj.ReadFromFile(pbxProjectPath); string localizationFolderPath = $"{projectPath}/Localization"; if (false == Directory.Exists(localizationFolderPath)) { Directory.CreateDirectory(localizationFolderPath); } originalProj.AddFolderReference(localizationFolderPath, "Localization"); originalProj.WriteToFile(pbxProjectPath); }
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 string GetProductName(string xcodePath) { string projPath = PBXProject.GetPBXProjectPath(xcodePath); UnityEditor.iOS.Xcode.Custom.PBXProject proj = new UnityEditor.iOS.Xcode.Custom.PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string productName = "usdk"; string target = proj.TargetGuidByName(PBXProject.GetUnityTargetName()); List <string> names = proj.GetBuildProperty(target, "PRODUCT_NAME"); if (names.Count > 0) { productName = names[0]; } return(productName); }
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 }
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 }
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()); }
private static void CopyFile(PBXProject proj, string xcodePath, string src, string des) { bool needCopy = NeedCopy(src); if (needCopy) { File.Copy(src, des); string target = proj.TargetGuidByName(PBXProject.GetUnityTargetName()); // The path is relative to the source folder string relativePath = des.Replace(xcodePath + "/", ""); string fileGuid = proj.AddFile(relativePath, relativePath, PBXSourceTree.Source); proj.AddFileToBuild(target, fileGuid); AutoAddSearchPath(proj, xcodePath, des); SetEmbedFrameworks(proj, src, fileGuid); Console.WriteLine("copy file " + src + " -> " + des); } }
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()); } }
//设置Capabilities void SetCapabilities(string pathToBuildProject) { string projPath = pathToBuildProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; //项目路径,这个路径在mac上默认是不显示的,需要右键->显示包内容才能看到。unity到处的名字就是这个。 UnityEditor.iOS.Xcode.PBXProject pbxProj = new UnityEditor.iOS.Xcode.PBXProject(); //创建xcode project类 pbxProj.ReadFromString(File.ReadAllText(projPath)); //xcode project读入 string targetGuid = pbxProj.TargetGuidByName(PBXProject.GetUnityTargetName()); //获得Target名 //设置BuildSetting pbxProj.SetBuildProperty(targetGuid, "ENABLE_BITCODE", "NO"); pbxProj.AddBuildProperty(targetGuid, "OTHER_LDFLAGS", "-ObjC"); pbxProj.SetBuildProperty(targetGuid, "DEBUG_INFORMATION_FORMAT", "dwarf-with-dsym"); //定位崩溃bug pbxProj.SetBuildProperty(targetGuid, "EXCLUDED_ARCHS", "armv7"); pbxProj.AddFrameworkToProject(targetGuid, "MediaPlayer.framework", false); pbxProj.AddFrameworkToProject(targetGuid, "AdSupport.framework", true); //添加资源 pbxProj.AddFileToBuild(targetGuid, pbxProj.AddFile(System.Environment.CurrentDirectory + "/LTBaseSDK_Oversea/ltgame.cfg", "Resource/ltgame.cfg", PBXSourceTree.Source)); //修改编译方式 string mmfile = pbxProj.FindFileGuidByProjectPath("Classes/UnityAppController.mm"); var flags = pbxProj.GetCompileFlagsForFile(targetGuid, mmfile); flags.Add("-fno-objc-arc"); pbxProj.SetCompileFlagsForFile(targetGuid, mmfile, flags); mmfile = pbxProj.FindFileGuidByProjectPath("Libraries/Plugins/IOS/LTSDK/LTSDKNPC.mm"); flags = pbxProj.GetCompileFlagsForFile(targetGuid, mmfile); flags.Add("-fno-objc-arc"); pbxProj.SetCompileFlagsForFile(targetGuid, mmfile, flags); pbxProj.WriteToFile(projPath); string[] splits = PlayerSettings.applicationIdentifier.Split('.'); var capManager = new ProjectCapabilityManager(projPath, splits[splits.Length - 1] + ".entitlements", PBXProject.GetUnityTargetName());//创建设置Capability类 if (PlayerSettings.applicationIdentifier.Equals("com.longtugame.dzyz.longtu")) { //正式包,增加计费 capManager.AddInAppPurchase(); } capManager.AddAssociatedDomains(new[] { "applinks:dy.longtugame.com" }); capManager.WriteToFile();//写入文件保存 }
public static void OnPostProcessBuild(BuildTarget buildTarget, string path) { #if UNITY_IPHONE if (buildTarget == BuildTarget.iOS) { Debug.Log("DisableBitCodePostProcessor - start"); string projectPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; UnityEditor.iOS.Xcode.PBXProject pbxProject = new UnityEditor.iOS.Xcode.PBXProject(); pbxProject.ReadFromFile(projectPath); string target = pbxProject.TargetGuidByName("Unity-iPhone"); pbxProject.SetBuildProperty(target, "ENABLE_BITCODE", "NO"); pbxProject.WriteToFile(projectPath); Debug.Log("DisableBitCodePostProcessor - done"); } #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"); 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 string GetUnityIPhoneTargetGuid(string path) { var proj = new UnityEditor.iOS.Xcode.PBXProject(); proj.ReadFromString(File.ReadAllText(path)); string mainTargetGuid = null; var unityMainTargetGuidMethod = proj.GetType().GetMethod("GetUnityMainTargetGuid"); if (unityMainTargetGuidMethod != null) { mainTargetGuid = (string)unityMainTargetGuidMethod.Invoke(proj, null); } else { mainTargetGuid = proj.TargetGuidByName("Unity-iPhone"); } return(mainTargetGuid); }
private static void SetEmbedFrameworks(PBXProject proj, string filePath, string fileGuid) { if (embedFrameworksTable != null) { string fileName = Path.GetFileName(filePath); string target = proj.TargetGuidByName(PBXProject.GetUnityTargetName()); ArrayList addList = embedFrameworksTable["+"] as ArrayList; if (addList != null) { foreach (string i in addList) { if (fileName == i) { PBXProjectExtensions.AddFileToEmbedFrameworks(proj, target, fileGuid); } } } } }
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()); }
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 }
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 }
/** * 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()); } }
/// <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()); }
public static void OnPostProcessBuild (BuildTarget buildTarget, string path) { #if UNITY_ANDROID #elif UNITY_IPHONE string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject pbxProj = new PBXProject (); pbxProj.ReadFromFile (projPath); string target = pbxProj.TargetGuidByName (PBXProject.GetUnityTargetName ()); pbxProj.AddFrameworkToProject (target, "AssetsLibrary.framework", false); pbxProj.AddFrameworkToProject (target, "AudioToolbox.framework", false); pbxProj.AddFrameworkToProject (target, "AVFoundation.framework", false); pbxProj.AddFrameworkToProject (target, "CFNetwork.framework", false); pbxProj.AddFrameworkToProject (target, "CoreAudio.framework", false); pbxProj.AddFrameworkToProject (target, "CoreLocation.framework", false); pbxProj.AddFrameworkToProject (target, "CoreMedia.framework", false); pbxProj.AddFrameworkToProject (target, "CoreTelephony.framework", false); pbxProj.AddFrameworkToProject (target, "CoreVideo.framework", false); pbxProj.AddFrameworkToProject (target, "CoreGraphics.framework", false); pbxProj.AddFrameworkToProject (target, "ImageIO.framework", false); pbxProj.AddFileToBuild (target, pbxProj.AddFile ("usr/lib/libc++.dylib", "Frameworks/libc++.dylib", PBXSourceTree.Sdk)); pbxProj.AddFileToBuild (target, pbxProj.AddFile ("usr/lib/libc++abi.dylib", "Frameworks/libc++abi.dylib", PBXSourceTree.Sdk)); pbxProj.AddFileToBuild (target, pbxProj.AddFile ("usr/lib/libsqlite3.dylib", "Frameworks/libsqlite3.dylib", PBXSourceTree.Sdk)); pbxProj.AddFileToBuild (target, pbxProj.AddFile ("usr/lib/libstdc++.dylib", "Frameworks/libstdc++.dylib", PBXSourceTree.Sdk)); pbxProj.AddFileToBuild (target, pbxProj.AddFile ("usr/lib/libxml2.dylib", "Frameworks/libxml2.dylib", PBXSourceTree.Sdk)); pbxProj.AddFileToBuild (target, pbxProj.AddFile ("usr/lib/libz.dylib", "Frameworks/libz.dylib", PBXSourceTree.Sdk)); pbxProj.AddFrameworkToProject (target, "MapKit.framework", false); pbxProj.AddFrameworkToProject (target, "OpenGLES.framework", false); pbxProj.AddFrameworkToProject (target, "QuartzCore.framework", false); pbxProj.AddFrameworkToProject (target, "SystemConfiguration.framework", false); pbxProj.AddFrameworkToProject (target, "UIKit.framework", false); DirectoryInfo di = new DirectoryInfo (Application.dataPath); string rongCloudLibFloder = Path.Combine (di.Parent.FullName, "RongCloudLib"); CopyAndReplaceDirectory(Path.Combine (rongCloudLibFloder, "RongIMLib.framework"), Path.Combine(path, "Frameworks/RongIMLib.framework")); pbxProj.AddFileToBuild(target, pbxProj.AddFile("Frameworks/RongIMLib.framework", "Frameworks/RongIMLib.framework", PBXSourceTree.Source)); // pbxProj.AddFileToBuild (target, pbxProj.AddFile (Path.Combine (rongCloudLibFloder, "RongIMLib.framework"), "Frameworks/RongIMLib.framework", PBXSourceTree.Absolute)); pbxProj.AddFileToBuild (target, pbxProj.AddFile (Path.Combine (Application.dataPath, "Editor/RongCloud/iOS/RongCloudBinding.m"), "Libraries/RongCloudBinding.m", PBXSourceTree.Absolute)); pbxProj.AddFileToBuild (target, pbxProj.AddFile (Path.Combine (Application.dataPath, "Editor/RongCloud/iOS/RongCloudManager.m"), "Libraries/RongCloudManager.m", PBXSourceTree.Absolute)); pbxProj.AddFileToBuild (target, pbxProj.AddFile (Path.Combine (Application.dataPath, "Editor/RongCloud/iOS/RongCloudManager.h"), "Libraries/RongCloudManager.h", PBXSourceTree.Absolute)); pbxProj.AddFileToBuild (target, pbxProj.AddFile (Path.Combine (Application.dataPath, "Editor/RongCloud/iOS/GroupOperationMessage.h"), "Libraries/GroupOperationMessage.h", PBXSourceTree.Absolute)); pbxProj.AddFileToBuild (target, pbxProj.AddFile (Path.Combine (Application.dataPath, "Editor/RongCloud/iOS/GroupOperationMessage.m"), "Libraries/GroupOperationMessage.m", PBXSourceTree.Absolute)); pbxProj.AddFileToBuild (target, pbxProj.AddFile (Path.Combine (Application.dataPath, "Editor/RongCloud/iOS/GroupRequestMessage.h"), "Libraries/GroupRequestMessage.h", PBXSourceTree.Absolute)); pbxProj.AddFileToBuild (target, pbxProj.AddFile (Path.Combine (Application.dataPath, "Editor/RongCloud/iOS/GroupRequestMessage.m"), "Libraries/GroupRequestMessage.m", PBXSourceTree.Absolute)); pbxProj.SetBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(inherited)"); pbxProj.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(PROJECT_DIR)/Frameworks"); pbxProj.WriteToFile (projPath); PlistDocument plist = new PlistDocument (); string plistPath = Path.Combine (path, "Info.plist"); plist.ReadFromFile (plistPath); var deviceCapabilities = plist.root ["UIRequiredDeviceCapabilities"].AsArray (); deviceCapabilities.AddString ("front-facing-camera"); deviceCapabilities.AddString ("video-camera"); // plist.root.SetBoolean ("LSHasLocalizedDisplayName", true); plist.WriteToFile (plistPath); #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; } }
/// <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 OnPostProcessBuild(BuildTarget platform, string projectPath) { if (platform != BuildTarget.iOS) { return; } string pbxFile = PBXProject.GetPBXProjectPath(projectPath); PBXProject pbxProject = new PBXProject(); pbxProject.ReadFromFile(pbxFile); string target = pbxProject.TargetGuidByName(PBXProject.GetUnityTargetName()); pbxProject.AddFrameworkToProject(target, "Security.framework", false); pbxProject.AddFrameworkToProject(target, "GLKit.framework", false); pbxProject.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC"); pbxProject.WriteToFile(pbxFile); }