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());
        }
    }
Beispiel #2
1
    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
    }
Beispiel #4
0
 //设置编译属性
 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());
			}
		}
Beispiel #11
0
    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());
	}
Beispiel #13
0
    // [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());
    }
Beispiel #14
0
    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);
		}
	}
Beispiel #17
0
    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.");
    }
Beispiel #18
0
    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
    }
Beispiel #21
0
    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());
    }
Beispiel #26
0
    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
    }
Beispiel #28
0
 //复制文件
 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);
     }
 }
Beispiel #29
0
 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
    }
Beispiel #32
0
    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);*/
    }
Beispiel #34
0
    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());
        }
Beispiel #36
0
    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
    }
Beispiel #38
0
    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);
    }
Beispiel #39
0
    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
    }
Beispiel #40
0
    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());
    }
Beispiel #42
0
    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());
		}
	}
Beispiel #44
0
    //设置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();//写入文件保存
    }
Beispiel #45
0
    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);
    }
Beispiel #48
0
 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
    }
Beispiel #50
0
    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());
        }
    }
Beispiel #51
0
    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
        }
Beispiel #53
0
		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());
        }
Beispiel #56
0
	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);
 }