Beispiel #1
29
    public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
    {
        #if UNITY_IPHONE
        string projectPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";

        PBXProject project = new PBXProject();

        project.ReadFromString(File.ReadAllText(projectPath));

        // This is the project name that Unity generates for iOS, isn't editable until after post processing
        string target = project.TargetGuidByName(PBXProject.GetUnityTargetName());

        #if UNITY_5_0
        project.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(PROJECT_DIR)/Frameworks/Plugins/iOS");
        #else
        CopyAndReplaceDirectory("Assets/Plugins/iOS/FiksuSDK.bundle", Path.Combine(path, "Frameworks/FiksuSDK.bundle"));
        project.AddFileToBuild(target, project.AddFile("Frameworks/FiksuSDK.bundle", "Frameworks/FiksuSDK.bundle", PBXSourceTree.Source));

        CopyAndReplaceDirectory("Assets/Plugins/iOS/FiksuSDK.framework", Path.Combine(path, "Frameworks/FiksuSDK.framework"));
        project.AddFileToBuild(target, project.AddFile("Frameworks/FiksuSDK.framework", "Frameworks/FiksuSDK.framework", PBXSourceTree.Source));

        project.SetBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(inherited)");
        project.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(PROJECT_DIR)/Frameworks");
        #endif

        project.AddFrameworkToProject(target, "AdSupport.framework", true);
        project.AddFrameworkToProject(target, "StoreKit.framework", true);
        project.AddFrameworkToProject(target, "Security.framework", true);
        project.AddFrameworkToProject(target, "SystemConfiguration.framework", false);
        project.AddFrameworkToProject(target, "MessageUI.framework", false);

        File.WriteAllText(projectPath, project.WriteToString());
        #endif
    }
    private static void AddAdaptersDirectory(string path, PBXProject proj, string targetGuid)
    {
        if (path.EndsWith("__MACOSX", StringComparison.CurrentCultureIgnoreCase))
        {
            return;
        }

        if (path.EndsWith(".framework", StringComparison.CurrentCultureIgnoreCase))
        {
            proj.AddFileToBuild(targetGuid, proj.AddFile(path, path));
            string tmp = Utils.FixSlashesInPath(string.Format("$(PROJECT_DIR)/{0}", path.Substring(0, path.LastIndexOf(Path.DirectorySeparatorChar))));
            proj.AddBuildProperty(targetGuid, "FRAMEWORK_SEARCH_PATHS", tmp);
            return;
        }
        else if (path.EndsWith(".bundle", StringComparison.CurrentCultureIgnoreCase))
        {
            proj.AddFileToBuild(targetGuid, proj.AddFile(path, path));
            return;
        }

        string fileName;
        bool   libPathAdded  = false;
        bool   headPathAdded = false;

        string realDstPath = Path.Combine(absoluteProjPath, path);

        foreach (var filePath in Directory.GetFiles(realDstPath))
        {
            fileName = Path.GetFileName(filePath);

            if (fileName.EndsWith(".DS_Store"))
            {
                continue;
            }

            proj.AddFileToBuild(targetGuid, proj.AddFile(Path.Combine(path, fileName), Path.Combine(path, fileName), PBXSourceTree.Source));
            if (!libPathAdded && fileName.EndsWith(".a"))
            {
                proj.AddBuildProperty(targetGuid, "LIBRARY_SEARCH_PATHS", Utils.FixSlashesInPath(string.Format("$(PROJECT_DIR)/{0}", path)));
                libPathAdded = true;
            }

            if (!headPathAdded && fileName.EndsWith(".h"))
            {
                proj.AddBuildProperty(targetGuid, "HEADER_SEARCH_PATHS", Utils.FixSlashesInPath(string.Format("$(PROJECT_DIR)/{0}", path)));
                headPathAdded = true;
            }
        }

        foreach (var subPath in Directory.GetDirectories(realDstPath))
        {
            AddAdaptersDirectory(Path.Combine(path, Path.GetFileName(subPath)), proj, targetGuid);
        }
    }
    private static void UpdateProject(BuildTarget buildTarget, string projectPath)
    {
        PBXProject project = new PBXProject();

        project.ReadFromString(File.ReadAllText(projectPath));

        string targetId = project.TargetGuidByName(PBXProject.GetUnityTargetName());

        // Required Frameworks
        project.AddFrameworkToProject(targetId, "CoreTelephony.framework", false);
        project.AddFrameworkToProject(targetId, "EventKit.framework", false);
        project.AddFrameworkToProject(targetId, "EventKitUI.framework", false);
        project.AddFrameworkToProject(targetId, "MediaPlayer.framework", false);
        project.AddFrameworkToProject(targetId, "MessageUI.framework", false);
        project.AddFrameworkToProject(targetId, "QuartzCore.framework", false);
        project.AddFrameworkToProject(targetId, "SystemConfiguration.framework", false);
        project.AddFrameworkToProject(targetId, "Security.framework", false);
        project.AddFrameworkToProject(targetId, "MobileCoreServices.framework", false);
        project.AddFrameworkToProject(targetId, "PassKit.framework", false);
        project.AddFrameworkToProject(targetId, "Social.framework", false);
        project.AddFrameworkToProject(targetId, "CoreData.framework", false);
        project.AddFrameworkToProject(targetId, "AdSupport.framework", false);
        project.AddFrameworkToProject(targetId, "StoreKit.framework", false);

        #if UNITY_2017_1_OR_NEWER
        if (project.ContainsFramework(targetId, "iAd.framework"))
        {
        #else
        if (project.HasFramework("iAd.framework"))
        {
        #endif
            project.RemoveFrameworkFromProject(targetId, "iAd.framework");
        }


        project.AddFileToBuild(targetId, project.AddFile("usr/lib/libz.1.2.5.dylib", "Frameworks/libz.1.2.5.dylib", PBXSourceTree.Sdk));
        project.AddFileToBuild(targetId, project.AddFile("usr/lib/libz.dylib", "Frameworks/libz.dylib", PBXSourceTree.Sdk));
        project.AddFileToBuild(targetId, project.AddFile("usr/lib/libsqlite3.dylib", "Frameworks/libsqlite3.dylib", PBXSourceTree.Sdk));
        project.AddFileToBuild(targetId, project.AddFile("usr/lib/libsqlite3.0.dylib", "Frameworks/libsqlite3.0.dylib", PBXSourceTree.Sdk));
        project.AddFileToBuild(targetId, project.AddFile("usr/lib/libxml2.dylib", "Frameworks/libxml2.dylib", PBXSourceTree.Sdk));

        // Optional Frameworks
        project.AddFrameworkToProject(targetId, "Webkit.framework", true);
        project.AddFrameworkToProject(targetId, "JavaScriptCore.framework", true);
        project.AddFrameworkToProject(targetId, "WatchConnectivity.framework", true);

        // For 3.0 MP classes
        project.AddBuildProperty(targetId, "OTHER_LDFLAGS", "-ObjC");
        project.AddBuildProperty(targetId, "OTHER_LDFLAGS", "-lxml2");
        project.SetBuildProperty(targetId, "ENABLE_BITCODE", "NO");

        File.WriteAllText(projectPath, project.WriteToString());
    }
}
Beispiel #4
0
        public static void OnPostprocessBuild(BuildTarget target, string buildPath)
        {
            if (!Settings.Instance.AutomatedSetup)
            {
                return;
            }

            if (target == BuildTarget.iOS)
            {
                string pbxProjectPath = PBXProject.GetPBXProjectPath(buildPath);
                string plistPath      = Path.Combine(buildPath, "Info.plist");

                PBXProject pbxProject = new PBXProject();
                pbxProject.ReadFromFile(pbxProjectPath);

#if UNITY_2019_3_OR_NEWER
                string targetGUID = pbxProject.GetUnityFrameworkTargetGuid();
#else
                string targetGUID = pbxProject.TargetGuidByName(PBXProject.GetUnityTargetName());
#endif

                // Minimum supported iOS version on Unity 2018.1 and later is 8.0
#if !UNITY_2018_1_OR_NEWER
                if (!Settings.Instance.MinimumiOSTarget8OrAbove)
                {
                    pbxProject.AddBuildProperty(targetGUID, "OTHER_LDFLAGS", "-weak_framework Photos");
                    pbxProject.AddBuildProperty(targetGUID, "OTHER_LDFLAGS", "-weak_framework PhotosUI");
                    pbxProject.AddBuildProperty(targetGUID, "OTHER_LDFLAGS", "-framework AssetsLibrary");
                    pbxProject.AddBuildProperty(targetGUID, "OTHER_LDFLAGS", "-framework MobileCoreServices");
                    pbxProject.AddBuildProperty(targetGUID, "OTHER_LDFLAGS", "-framework ImageIO");
                }
                else
#endif
                {
                    pbxProject.AddBuildProperty(targetGUID, "OTHER_LDFLAGS", "-weak_framework PhotosUI");
                    pbxProject.AddBuildProperty(targetGUID, "OTHER_LDFLAGS", "-framework Photos");
                    pbxProject.AddBuildProperty(targetGUID, "OTHER_LDFLAGS", "-framework MobileCoreServices");
                    pbxProject.AddBuildProperty(targetGUID, "OTHER_LDFLAGS", "-framework ImageIO");
                }

                pbxProject.RemoveFrameworkFromProject(targetGUID, "Photos.framework");

                File.WriteAllText(pbxProjectPath, pbxProject.WriteToString());

                PlistDocument plist = new PlistDocument();
                plist.ReadFromString(File.ReadAllText(plistPath));

                PlistElementDict rootDict = plist.root;
                rootDict.SetString("NSPhotoLibraryUsageDescription", Settings.Instance.PhotoLibraryUsageDescription);
                rootDict.SetString("NSPhotoLibraryAddUsageDescription", Settings.Instance.PhotoLibraryAdditionsUsageDescription);
                if (Settings.Instance.DontAskLimitedPhotosPermissionAutomaticallyOnIos14)
                {
                    rootDict.SetBoolean("PHPhotoLibraryPreventAutomaticLimitedAccessAlert", true);
                }

                File.WriteAllText(plistPath, plist.WriteToString());
            }
        }
        private static void UpdateXcodeBuildSettingsAt(string buildFolderPath, string dylibFolderPath)
        {
            // Get path to build/workers/UnityClient@iOS/UnityClient@iOS/Unity-iPhone.xcodeproj
            string projectPath = PBXProject.GetPBXProjectPath(buildFolderPath);

            if (!File.Exists(projectPath))
            {
                Debug.LogErrorFormat("Unable to find pbxproj file at: {0}", projectPath);
                return;
            }

            // Load the current Xcode project
            PBXProject project = new PBXProject();

            project.ReadFromFile(projectPath);

            // Get Xcode Target GUID of "Unity-iPhone"
            var targetGuid = project.TargetGuidByName("Unity-iPhone");

            // Copy Core SDK .dylib from Assets/Plugins to Xcode project
            var dylibSource = Path.Combine(dylibFolderPath, CORE_SDK_DLL_NAME);
            var dylibTarget = Path.Combine(buildFolderPath, Path.Combine("Data", CORE_SDK_DLL_NAME));

            File.Copy(dylibSource, dylibTarget, true /* overwriteExisting */);

            // Add the .dylib to the Xcode project
            var dylibGuid = project.AddFile(dylibTarget, Path.Combine("Data", CORE_SDK_DLL_NAME), PBXSourceTree.Source);

            project.AddFileToBuild(targetGuid, dylibGuid);

            // Disable bitcode
            project.SetBuildProperty(targetGuid, "ENABLE_BITCODE", "NO");

            // Add @executable_path to runtime search paths so that @rpath/libCoreSdkDll.dylib resolves to
            // a path that can be located by Xcode and iOS devices.
            project.SetBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "@executable_path");
            project.AddBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "@executable_path/Data");

            // Fix library search paths generated by Unity by ensuring that quotation marks are not placed
            // around the search paths.
            project.SetBuildProperty(targetGuid, "LIBRARY_SEARCH_PATHS", "$(inherited)");
            project.AddBuildProperty(targetGuid, "LIBRARY_SEARCH_PATHS", "$(SRCROOT)");
            project.AddBuildProperty(targetGuid, "LIBRARY_SEARCH_PATHS", "$(SRCROOT)/Libraries");

            // Add the Data folder as a library search path to locate the libCoreSdkDll.dylib at link time.
            project.AddBuildProperty(targetGuid, "LIBRARY_SEARCH_PATHS", "$(SRCROOT)/Data");

            // Write all changes to the Xcode project file.
            project.WriteToFile(projectPath);

            // Output a useful message.
            Debug.LogFormat("Successfully updated Xcode project settings for: {0}", projectPath);
        }
        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",
                "WebKit.framework",
                "StoreKit.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);
                }
            }

            File.WriteAllText(projectPath, proj.WriteToString());
        }
Beispiel #7
0
        public static void OnPostProcessBuild(BuildTarget target, string path)
        {
            if (BuildTarget.iOS != target)
            {
                return;
            }

            IOSProjectInitData data = IOSProjectInitData.Load();

            string     projPath = PBXProject.GetPBXProjectPath(path);
            PBXProject pbx      = new PBXProject();

            pbx.ReadFromString(File.ReadAllText(projPath));
            string guid = pbx.TargetGuidByName("Unity-iPhone");

            pbx.AddFrameworkToProject(guid, "CoreTelephony.framework", false);
            pbx.AddFrameworkToProject(guid, "StoreKit.framework", false);
            pbx.AddFrameworkToProject(guid, "AdSupport.framework", false);
            pbx.AddFrameworkToProject(guid, "WebKit.framework", false);
            pbx.AddFrameworkToProject(guid, "MessageUI.framework", false);
            pbx.AddFrameworkToProject(guid, "GLKit.framework", false);
            pbx.AddFrameworkToProject(guid, "MobileCoreService.framework", false);

            pbx.AddFileToBuild(guid, pbx.AddFile("usr/lib/libz.tbd", "Frameworks/libz.tbd", PBXSourceTree.Sdk));
            pbx.AddFileToBuild(guid, pbx.AddFile("usr/lib/libc++.tbd", "Frameworks/libc++.tbd", PBXSourceTree.Sdk));
            pbx.AddFileToBuild(guid, pbx.AddFile("usr/lib/libicucore.tbd", "Frameworks/libicucore.tbd", PBXSourceTree.Sdk));
            pbx.AddFileToBuild(guid, pbx.AddFile("usr/lib/libsqlite3.0.tbd", "Frameworks/libsqlite3.0.tbd", PBXSourceTree.Sdk));


            pbx.SetBuildProperty(guid, "ENABLE_BITCODE", "NO");
            pbx.AddBuildProperty(guid, "OTHER_LDFLAGS", "-force_load $(PROJECT_DIR)/Libraries/Plugins/iOS/WeChat/libWeChatSDK.a");
            pbx.AddBuildProperty(guid, "OTHER_LDFLAGS", "-ObjC");
            //$(PROJECT_DIR) / Libraries / Plugins / iOS / WeChat / libWeChatSDK.a

            //有米SDK需要内容


            File.WriteAllText(projPath, pbx.WriteToString());

            ////修改PList
            string          plistPath   = path + "/Info.plist";
            InfoPListEditor pListEditor = new InfoPListEditor(plistPath);

            foreach (string urlScheme in data.urlSchemes)
            {
                pListEditor.AddUrlScheme("yfy", urlScheme);
            }
            foreach (string whiteUrlScheme in data.whiteSchemeList)
            {
                pListEditor.AddLSApplicationQueriesScheme(whiteUrlScheme);
            }
            pListEditor.Save();
        }
Beispiel #8
0
    private static void RunPostBuildScript(BuildTarget target, bool preBuild, string projectPath = "")
    {
        if (target == BuildTarget.Android)
        {
            UnityEngine.Debug.Log("adjust: Starting to perform post build tasks for Android platform.");
            RunPostProcessTasksAndroid();
        }
        else if (target == BuildTarget.iOS)
        {
            #if UNITY_EDITOR_OSX
            UnityEngine.Debug.Log("adjust: Starting to perform post build tasks for iOS platform.");

            string xcodeProjectPath = projectPath + "/Unity-iPhone.xcodeproj/project.pbxproj";

            PBXProject xcodeProject = new PBXProject();
            xcodeProject.ReadFromFile(xcodeProjectPath);

            // The adjust SDK needs two frameworks to be added to the project:
            // - AdSupport.framework
            // - iAd.framework

            string xcodeTarget = xcodeProject.TargetGuidByName("Unity-iPhone");

            UnityEngine.Debug.Log("adjust: Adding AdSupport.framework to Xcode project.");
            xcodeProject.AddFrameworkToProject(xcodeTarget, "AdSupport.framework", true);
            UnityEngine.Debug.Log("adjust: AdSupport.framework added successfully.");

            UnityEngine.Debug.Log("adjust: Adding iAd.framework to Xcode project.");
            xcodeProject.AddFrameworkToProject(xcodeTarget, "iAd.framework", true);
            UnityEngine.Debug.Log("adjust: iAd.framework added successfully.");

            // The adjust SDK needs to have Obj-C exceptions enabled.
            // GCC_ENABLE_OBJC_EXCEPTIONS=YES

            UnityEngine.Debug.Log("adjust: Enabling Obj-C exceptions by setting GCC_ENABLE_OBJC_EXCEPTIONS value to YES.");
            xcodeProject.AddBuildProperty(xcodeTarget, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES");

            UnityEngine.Debug.Log("adjust: Obj-C exceptions enabled successfully.");

            // The adjust SDK needs to have -ObjC flag set in other linker flags section because of it's categories.
            // OTHER_LDFLAGS -ObjC

            UnityEngine.Debug.Log("adjust: Adding -ObjC flag to other linker flags (OTHER_LDFLAGS).");
            xcodeProject.AddBuildProperty(xcodeTarget, "OTHER_LDFLAGS", "-ObjC");

            UnityEngine.Debug.Log("adjust: -ObjC successfully added to other linker flags.");

            // Save the changes to Xcode project file.
            xcodeProject.WriteToFile(xcodeProjectPath);
            #endif
        }
    }
Beispiel #9
0
        public static void OnPostProcessBuild(BuildTarget buildTarget, string buildPath)
        {
            if (buildTarget == BuildTarget.iOS)
            {
                // var projPath = PBXProject.GetPBXProjectPath(buildPath);
                var projPath = buildPath + "/Unity-iPhone.xcodeproj/project.pbxproj";
                var proj     = new PBXProject();
                proj.ReadFromFile(projPath);

                string targetGuid = proj.TargetGuidByName(PBXProject.GetUnityTargetName());

                //// Configure build settings
                proj.SetBuildProperty(targetGuid, "ENABLE_BITCODE", "NO");
                proj.SetBuildProperty(targetGuid, "SWIFT_OBJC_BRIDGING_HEADER", "Libraries/LoomSDK/ios/LoomSDKSwift-Bridging-Header.h");
                proj.SetBuildProperty(targetGuid, "SWIFT_OBJC_INTERFACE_HEADER_NAME", "LoomSDKSwift.h");
                proj.AddBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "@executable_path/Frameworks");
                proj.AddBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "@executable_path/Libraries/LoomSDK/Frameworks");
                proj.SetBuildProperty(targetGuid, "SWIFT_VERSION", "3.0");

                //frameworks
                DirectoryInfo projectParent     = Directory.GetParent(Application.dataPath);
                char          divider           = Path.DirectorySeparatorChar;
                DirectoryInfo destinationFolder =
                    new DirectoryInfo(buildPath + divider + "Frameworks/LoomSDK/Frameworks");

                foreach (DirectoryInfo file in destinationFolder.GetDirectories())
                {
                    string filePath = "Frameworks/LoomSDK/Frameworks/" + file.Name;
                    //proj.AddFile(filePath, filePath, PBXSourceTree.Source);
                    string fileGuid = proj.AddFile(filePath, filePath, PBXSourceTree.Source);
                    proj.AddFrameworkToProject(targetGuid, file.Name, false);

                    PBXProjectExtensions.AddFileToEmbedFrameworks(proj, targetGuid, fileGuid);
                }
                proj.WriteToFile(projPath);

                //info.plist
                var plistPath = buildPath + "/Info.plist";
                var plist     = new PlistDocument();
                plist.ReadFromFile(plistPath);
                // Update value
                PlistElementDict rootDict = plist.root;
                //rootDict.SetString("CFBundleIdentifier","$(PRODUCT_BUNDLE_IDENTIFIER)");
                PlistElementArray urls   = rootDict.CreateArray("CFBundleURLTypes");
                PlistElementDict  dic    = urls.AddDict();
                PlistElementArray scheme = dic.CreateArray("CFBundleURLSchemes");
                scheme.AddString(PlayerSettings.applicationIdentifier);
                dic.SetString("CFBundleURLName", "auth0");
                // Write plist
                File.WriteAllText(plistPath, plist.WriteToString());
            }
        }
        public static void PrepareProject(string buildPath)
        {
            Debug.Log("preparing your xcode project for appodeal");
            string projPath = Path.Combine(buildPath, "Unity-iPhone.xcodeproj/project.pbxproj");

            absoluteProjPath = Path.GetFullPath(buildPath);
            PBXProject project = new PBXProject();

            project.ReadFromString(File.ReadAllText(projPath));
            string target = project.TargetGuidByName("Unity-iPhone");

            AddProjectFrameworks(frameworkList, project, target, false);
            AddProjectFrameworks(weakFrameworkList, project, target, true);
            AddProjectLibs(platformLibs, project, target);
            project.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC");
            project.AddBuildProperty(target, "ENABLE_BITCODE", "YES");
            project.AddBuildProperty(target, "LIBRARY_SEARCH_PATHS", "$(SRCROOT)/Libraries");

            string apdFolder    = "Adapters";
            string appodealPath = Path.Combine(Application.dataPath, "Appodeal");
            string adaptersPath = Path.Combine(appodealPath, apdFolder);

            if (Directory.Exists(adaptersPath))
            {
                foreach (string file in Directory.GetFiles(adaptersPath))
                {
                    if (Path.GetExtension(file).Equals(".zip"))
                    {
                        Debug.Log("unzipping:" + file);
                        ExtractZip(file, Path.Combine(absoluteProjPath, apdFolder));
                        AddAdaptersDirectory(apdFolder, project, target);
                    }
                }
            }
            string resourcesFolder = "InternalResources";
            string chScript        = "CrashHunterScript.sh";
            string uploader        = "dSYMUploader";
            string resourcesPath   = Path.Combine(appodealPath, resourcesFolder);

            File.Copy(Path.Combine(resourcesPath, chScript), Path.Combine(buildPath, chScript));
            File.Copy(Path.Combine(resourcesPath, chScript), Path.Combine(buildPath, uploader));
            project.AppendShellScriptBuildPhase(target, "Run Script ChashHunter", "/bin/sh", "$PROJECT_DIR/CrashHunterScript.sh");

#if UNITY_4
            project.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(PROJECT_DIR)/Frameworks/Plugins/iOS");
            project.SetBuildProperty(target, "LIBRARY_SEARCH_PATHS", "$(SRCROOT)/Libraries");
            CopyAndReplaceDirectory("Assets/" + AppodealFramework, Path.Combine(buildPath, "Frameworks/" + AppodealFramework));
            project.AddFileToBuild(target, project.AddFile("Frameworks/" + AppodealFramework, "Frameworks/" + AppodealFramework, PBXSourceTree.Source));
#endif

            File.WriteAllText(projPath, project.WriteToString());
        }
Beispiel #11
0
        public static void AddBuildFlag(string path)
        {
            string     projPath = Path.Combine(path, Path.Combine("Unity-iPhone.xcodeproj", "project.pbxproj"));
            PBXProject proj     = new PBXProject();

            proj.ReadFromString(File.ReadAllText(projPath));
            string targetGUID = proj.TargetGuidByName("Unity-iPhone");

            proj.AddBuildProperty(targetGUID, "GCC_PREPROCESSOR_DEFINITIONS", " $(inherited) FBSDKCOCOAPODS=1");
            proj.AddBuildProperty(targetGUID, "OTHER_LDFLAGS", "-ObjC");
            proj.AddFrameworkToProject(targetGUID, "Accelerate.framework", true);
            File.WriteAllText(projPath, proj.WriteToString());
        }
Beispiel #12
0
    public static void OnPostProcess(BuildTarget buildTarget, string buildPath)
    {
        if (buildTarget != BuildTarget.iOS)
        {
            return;
        }

        var proj = new PBXProject();

        var dummy = ScriptableObject.CreateInstance <EntitlementsPostProcess>();
        var file  = dummy.m_entitlementsFile;

        ScriptableObject.DestroyImmediate(dummy);
        if (file == null)
        {
            Debug.LogError("EntitlementsFile为空");
            return;
        }

        var proj_path = PBXProject.GetPBXProjectPath(buildPath);

        proj.ReadFromFile(proj_path);

        // target_name = "Unity-iPhone"
        var target_name = 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.AddBuildProperty(target_guid, "SystemCapabilities", "{com.apple.Push = {enabled = 1;};}");


        //Handle plist
        string        plistPath = buildPath + "/Info.plist";
        PlistDocument plist     = new PlistDocument();

        plist.ReadFromString(File.ReadAllText(plistPath));
        PlistElementDict rootDict = plist.root;

        rootDict.SetString("NSPhotoLibraryUsageDescription", "若不允许,您将无法使用图片上传功能");
        rootDict.SetString("NSCameraUsageDescription", "若不允许,您将无法使用图片上传功能");
        rootDict.SetString("NSLocationWhenInUseUsageDescription", "若不允许,您将无法使用位置提示功能");
        rootDict.SetString("NSMicrophoneUsageDescription", "若不允许,您将无法使用语言消息功能");
        plist.WriteToFile(plistPath);

        proj.WriteToFile(proj_path);
    }
        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 #14
0
        private static void PrepareProject(string buildPath)
        {
            var projPath = Path.Combine(buildPath, "Unity-iPhone.xcodeproj/project.pbxproj");
            var project  = new PBXProject();

            project.ReadFromString(File.ReadAllText(projPath));
            var target = project.TargetGuidByName("Unity-iPhone");

            // The MoPub iOS SDK now includes Swift, so these properties ensure Xcode handles that properly.
            project.AddBuildProperty(target, "SWIFT_VERSION", "5");
            project.AddBuildProperty(target, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "YES");

            File.WriteAllText(projPath, project.WriteToString());
        }
Beispiel #15
0
    public static void OnPostProcessBuild(BuildTarget buildTarget, string buildPath)
    {
                #if UNITY_IOS
        if (buildTarget == BuildTarget.iOS)
        {
            var projPath = buildPath + "/Unity-Iphone.xcodeproj/project.pbxproj";
            var proj     = new PBXProject();
            proj.ReadFromFile(projPath);

            var targetGuid = proj.TargetGuidByName(PBXProject.GetUnityTargetName());


            proj.SetBuildProperty(targetGuid, "ENABLE_BITCODE", "NO");
            proj.SetBuildProperty(targetGuid, "SWIFT_OBJC_BRIDGING_HEADER", "Libraries/Plugins/iOS/SwiftPlugin/Source/SwiftPlugin-Bridging-Header.h");
            proj.SetBuildProperty(targetGuid, "SWIFT_OBJC_INTERFACE_HEADER_NAME", "SwiftPlugin-Swift.h");
            proj.AddBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "@executable_path/Frameworks $(PROJECT_DIR)/lib/$(CONFIGURATION) $(inherited)");
            proj.AddBuildProperty(targetGuid, "FRAMERWORK_SEARCH_PATHS",
                                  "$(inherited) $(PROJECT_DIR) $(PROJECT_DIR)/Frameworks");
            proj.AddBuildProperty(targetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "YES");
            proj.AddBuildProperty(targetGuid, "DYLIB_INSTALL_NAME_BASE", "@rpath");
            proj.AddBuildProperty(targetGuid, "LD_DYLIB_INSTALL_NAME",
                                  "@executable_path/../Frameworks/$(EXECUTABLE_PATH)");
            proj.AddBuildProperty(targetGuid, "DEFINES_MODULE", "YES");
            proj.AddBuildProperty(targetGuid, "SWIFT_VERSION", "4.0");
            proj.AddBuildProperty(targetGuid, "COREML_CODEGEN_LANGUAGE", "Swift");



            proj.WriteToFile(projPath);
        }
                #endif
    }
        static void AddFlags(PBXProject proj, string targetGuid)
        {
            foreach (var flag in ISD_Settings.Instance.Flags)
            {
                if (flag.Type == ISD_FlagType.LinkerFlag)
                {
                    proj.AddBuildProperty(targetGuid, "OTHER_LDFLAGS", flag.Name);
                }

                if (flag.Type == ISD_FlagType.LinkerFlag)
                {
                    proj.AddBuildProperty(targetGuid, "OTHER_CFLAGS", flag.Name);
                }
            }
        }
Beispiel #17
0
    public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject)
    {
        Debug.Log("[OnPostprocessBuild] target = " + target + ", pathToBuiltProject = " + pathToBuiltProject);
        if (target == BuildTarget.iOS)
        {
            string        plistPath = pathToBuiltProject + "/Info.plist";
            PlistDocument plist     = new PlistDocument();
            plist.ReadFromString(File.ReadAllText(plistPath));

            // Get root
            var typesKey = "CFBundleURLTypes";
            PlistElementDict rootDict = plist.root;
            var types = rootDict[typesKey];
            if (types == null)
            {
                types = rootDict.CreateArray(typesKey);
            }
            var ta        = types.AsArray();
            var newScheme = ta.AddDict();
            newScheme.SetString("CFBundleURLName", "com.solitaire.omg");
            var schems = newScheme.CreateArray("CFBundleSchemes");
            schems.AddString("omgsolitaire");



            // Write to file
            File.WriteAllText(plistPath, plist.WriteToString());
#if UNITY_EDITOR_OSX
            string xcodeProjectPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj";

            PBXProject xcodeProject = new PBXProject();
            xcodeProject.ReadFromFile(xcodeProjectPath);

            // setting bitcode to No
            string xcodeTarget = xcodeProject.TargetGuidByName("Unity-iPhone");
            xcodeProject.SetBuildProperty(xcodeTarget, "ENABLE_BITCODE", "NO");
            xcodeProject.AddBuildProperty(xcodeTarget, "OTHER_LDFLAGS", "-ObjC");
            xcodeProject.AddBuildProperty(xcodeTarget, "CLANG_ENABLE_MODULES", "YES");

            xcodeProject.AddFrameworkToProject(xcodeTarget, "AdSupport.framework", true);
            xcodeProject.AddFrameworkToProject(xcodeTarget, "iAd.framework", true);
            xcodeProject.AddFrameworkToProject(xcodeTarget, "GoogleMobileAds.framework", false);

            // Save the changes to Xcode project file.
            xcodeProject.WriteToFile(xcodeProjectPath);
#endif
        }
    }
    //添加 xcodeModel.frameworks 中指定的 framework shareSDK子平台的framework
    private static void AddXcodeModelFrameworks(MOBXCodeEditorModel xcodeModel, PBXProject xcodeProj, string xcodeTargetGuid, string xcodeTargetPath)
    {
        foreach (MOBPathModel pathModel in xcodeModel.frameworks)
        {
            if (pathModel.filePath.Contains(".framework") && !pathModel.filePath.Contains("MOBFoundation.framework"))
            {
                string frameworkPath = pathModel.filePath.Replace(pathModel.rootPath, "");
                //			Debug.Log("frameworkPath" + frameworkPath);
                string savePath = xcodeTargetPath + frameworkPath;

                int tempIndex = frameworkPath.LastIndexOf("/");

                string saveFrameworkPath = frameworkPath.Substring(0, tempIndex);

                //将 framework copy到指定目录
                DirectoryInfo frameworkInfo     = new DirectoryInfo(pathModel.filePath);
                DirectoryInfo saveFrameworkInfo = new DirectoryInfo(savePath);
                CopyAll(frameworkInfo, saveFrameworkInfo);
                //将 framework 加入 proj中
                xcodeProj.AddFileToBuild(xcodeTargetGuid, xcodeProj.AddFile(savePath, "MOB" + frameworkPath, PBXSourceTree.Sdk));
                //将 build setting 设置
                xcodeProj.AddBuildProperty(xcodeTargetGuid, "FRAMEWORK_SEARCH_PATHS", "$(SRCROOT)" + saveFrameworkPath);
            }
            else
            {
                Debug.LogWarning(pathModel.filePath + " no framework");
            }
        }
    }
    public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
    {
        if (buildTarget == BuildTarget.iOS)
        {
#if UNITY_IPHONE
            // 修改xcode工程
            string     projPath = PBXProject.GetPBXProjectPath(path);
            PBXProject proj     = new PBXProject();
            proj.ReadFromString(File.ReadAllText(projPath));
            string target = proj.TargetGuidByName("Unity-iPhone");

            proj.AddFrameworkToProject(target, "libz.tbd", false);
            proj.AddFrameworkToProject(target, "CoreTelephony.framework", false);

            string fileName = Application.dataPath.Replace("Assets", "iOS/XunFeiSR");
            XcodeModifyGeneral.CopyAndReplaceDirectory(fileName, Path.Combine(path, "XunFeiSR"));
            List <string> filePaths = new List <string>();
            XcodeModifyGeneral.AddFilesToBuild(ref filePaths, path, "XunFeiSR");
            foreach (var filepath in filePaths)
            {
                proj.AddFileToBuild(target, proj.AddFile(filepath, filepath));
            }

            proj.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(PROJECT_DIR)/XunFeiSR");
            proj.SetBuildProperty(target, "ENABLE_BITCODE", "false");

            proj.WriteToFile(projPath);
#endif
        }
    }
Beispiel #20
0
        private static void UpdateProject(BuildTarget buildTarget, string projectPath)
        {
#if UNITY_IOS
            PBXProject project = new PBXProject();
            project.ReadFromString(File.ReadAllText(projectPath));

            string targetId = project.TargetGuidByName(PBXProject.GetUnityTargetName());

            // Required Frameworks
            project.AddFrameworkToProject(targetId, "AdSupport.framework", false);
            project.AddFrameworkToProject(targetId, "AudioToolbox.framework", false);
            project.AddFrameworkToProject(targetId, "AVFoundation.framework", false);
            project.AddFrameworkToProject(targetId, "CoreMedia.framework", false);
            project.AddFrameworkToProject(targetId, "CoreTelephony.framework", false);
            project.AddFrameworkToProject(targetId, "JavaScriptCore.framework", false);
            project.AddFrameworkToProject(targetId, "MessageUI.framework", false);
            project.AddFrameworkToProject(targetId, "MobileCoreServices.framework", false);
            project.AddFrameworkToProject(targetId, "SystemConfiguration.framework", false);

            project.AddFileToBuild(targetId, project.AddFile("usr/lib/libz.1.2.5.dylib", "Frameworks/libz.1.2.5.dylib", PBXSourceTree.Sdk));

            // Optional Frameworks
            project.AddFrameworkToProject(targetId, "Social.framework", true);
            project.AddFrameworkToProject(targetId, "StoreKit.framework", true);
            project.AddFrameworkToProject(targetId, "WatchConnectivity.framework", true);
            project.AddFrameworkToProject(targetId, "Webkit.framework", true);

            // For 3.0 MP classes
            project.AddBuildProperty(targetId, "OTHER_LDFLAGS", "-ObjC -fobjc-arc");

            File.WriteAllText(projectPath, project.WriteToString());
#endif
        }
    public static void OnPostProcessBuild(BuildTarget target, string pathToBuiltProject)
    {
        if (target != BuildTarget.iOS)
        {
            Debug.LogWarning("Target is not iOS. XCodePostProcessBuild will not run");
            return;
        }

        string projectPath = PBXProject.GetPBXProjectPath(pathToBuiltProject);
        var    pbxProject  = new PBXProject();

        pbxProject.ReadFromString(File.ReadAllText(projectPath));

#if UNITY_2019_3_OR_NEWER
        string mainTarget      = pbxProject.GetUnityMainTargetGuid();
        string frameworkTarget = pbxProject.GetUnityFrameworkTargetGuid();
#else
        string mainTarget      = pbxProject.TargetGuidByName(PBXProject.GetUnityTargetName());
        string frameworkTarget = mainTarget;
#endif

        DisableBitcode(pbxProject, mainTarget, frameworkTarget);

        pbxProject.SetBuildProperty(frameworkTarget, "FRAMEWORK_SEARCH_PATHS", "$(inherited)");
        pbxProject.AddBuildProperty(frameworkTarget, "FRAMEWORK_SEARCH_PATHS", "$(PROJECT_DIR)/Frameworks");

        SetBugly(frameworkTarget, pbxProject, pathToBuiltProject);

        pbxProject.WriteToFile(projectPath);
    }
    private static void OnIOSBuildFinished(BuildTarget r_target, string r_pathToBuiltProject)
    {
        string     projPath   = PBXProject.GetPBXProjectPath(r_pathToBuiltProject);
        PBXProject pbxProject = new PBXProject();

        pbxProject.ReadFromString(File.ReadAllText(projPath));
        string targetGuid = pbxProject.TargetGuidByName("Unity-iPhone");

        //添加它喵的framework
        string[] frameworks =
        {
            "Security.framework", "SystemConfiguration.framework", "CoreTelephony.framework", "CFNetwork.framework"
        };
        foreach (var framework in frameworks)
        {
            AddFramework(pbxProject, targetGuid, framework, false);
        }

        //添加它喵的lib
        AddLib(pbxProject, targetGuid, "libsqlite3.tbd");
        AddLib(pbxProject, targetGuid, "libc++.tbd");
        AddLib(pbxProject, targetGuid, "libz.tbd");

        // 添加flag
        pbxProject.AddBuildProperty(targetGuid, "OTHER_LDFLAGS", "-Objc -all_load");

        // 应用修改
        File.WriteAllText(projPath, pbxProject.WriteToString());

        // 修改Info.plist文件
        var plistPath = Path.Combine(r_pathToBuiltProject, "Info.plist");
        var plist     = new PlistDocument();

        plist.ReadFromFile(plistPath);

        var key = plist.root.CreateArray("LSApplicationQueriesSchemes");

        key.AddString("wechat");
        key.AddString("weixin");

        plist.WriteToFile(plistPath);

        string pPath = Application.dataPath.Replace("Assets", string.Empty);

        if (ReplaceFile($"{pPath}XCClasses/UnityAppController.h", $"{r_pathToBuiltProject}/Classes/UnityAppController.h"))
        {
            if (ReplaceFile($"{pPath}XCClasses/UnityAppController.mm", $"{r_pathToBuiltProject}/Classes/UnityAppController.mm"))
            {
                //
            }
            else
            {
                EditorUtility.DisplayDialog("错误", "替换UnityAppController.mm失败,请检查XCClasses文件夹", "ok");
            }
        }
        else
        {
            EditorUtility.DisplayDialog("错误", "替换UnityAppController.h失败,请检查XCClasses文件夹", "ok");
        }
    }
Beispiel #23
0
        private static void ModifyProject(string buildPath)
        {
            string     projPath = PBXProject.GetPBXProjectPath(buildPath);
            PBXProject proj     = new PBXProject();

            proj.ReadFromString(File.ReadAllText(projPath));
            string targetGuid = proj.TargetGuidByName(PBXProject.GetUnityTargetName());

            var settings = projectSetting.XcodeSettingsList.FindAll(p => p.Enabled);

            foreach (var setting in settings)
            {
                setting.Frameworks.ForEach(framework => proj.AddFrameworkToProject(targetGuid, framework.Path, framework.IsWeak));

                setting.Librarys.ForEach(lib => AddLibToProject(proj, targetGuid, lib.File));
                setting.DependentLibrarys.ForEach(lib => AddLibToProject(proj, targetGuid, lib.File));

                foreach (var buildProperty in setting.BuildPropertys)
                {
                    if (string.IsNullOrEmpty(buildProperty.Name) || string.IsNullOrEmpty(buildProperty.Value))
                    {
                        continue;
                    }

                    proj.AddBuildProperty(targetGuid, buildProperty.Name, buildProperty.Value);
                }
            }
            proj.SetBuildProperty(targetGuid, XcodeProjectConst.ENABLE_BITCODE_KEY, projectSetting.EnableBitCode ? "YES" : "NO");

            File.WriteAllText(projPath, proj.WriteToString());
        }
    private static void BuildiOS(string path = "")
    {
#if UNITY_IOS
        Debug.Log("TenjinSDK: Starting iOS Build");

        string     projectPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
        PBXProject project     = new PBXProject();
        project.ReadFromFile(projectPath);

#if UNITY_2019_3_OR_NEWER
        string buildTarget = project.GetUnityFrameworkTargetGuid();
#else
        string buildTarget = project.TargetGuidByName("Unity-iPhone");
#endif

        List <string> frameworks = new List <string>();

        frameworks.Add("AdSupport.framework");
        frameworks.Add("AppTrackingTransparency.framework");
        frameworks.Add("iAd.framework");
        frameworks.Add("StoreKit.framework");

        foreach (string framework in frameworks)
        {
            Debug.Log("TenjinSDK: Adding framework: " + framework);
            project.AddFrameworkToProject(buildTarget, framework, true);
        }

        Debug.Log("TenjinSDK: Adding -ObjC flag to other linker flags (OTHER_LDFLAGS)");
        project.AddBuildProperty(buildTarget, "OTHER_LDFLAGS", "-ObjC");

        File.WriteAllText(projectPath, project.WriteToString());
#endif
    }
Beispiel #25
0
    public void OnPostprocessBuild(BuildReport report)
    {
        Debug.Log("开始后处理Xcode工程");
        var pathToBuiltProject = report.summary.outputPath;
        var target             = report.summary.platform;

        Debug.LogFormat("Postprocessing build at \"{0}\" for target {1}", pathToBuiltProject, target);
        if (target != BuildTarget.iOS)
        {
            return;
        }


        PBXProject proj        = new PBXProject();
        string     pbxFilename = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj";

        proj.ReadFromFile(pbxFilename);

        string targetName = PBXProject.GetUnityTargetName();
        string guid       = proj.TargetGuidByName(targetName);

        proj.SetBuildProperty(guid, "USYM_UPLOAD_AUTH_TOKEN", "FakeToken");

        proj.SetBuildProperty(guid, "ENABLE_BITCODE", "NO");
        proj.AddBuildProperty(guid, "OTHER_LDFLAGS", "-ObjC");
        proj.AddFrameworkToProject(guid, "libresolv.9.tbd", false);

        proj.WriteToFile(pbxFilename);

        Debug.Log("后处理Xcode工程结束");
    }
Beispiel #26
0
    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));

            //add Other link flag
            string target = proj.TargetGuidByName(PBXProject.GetUnityTargetName());
            proj.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC");
            File.WriteAllText(projPath, proj.WriteToString());

            //add framework
            proj.AddFrameworkToProject(target, "AdSupport.framework", false);
            proj.AddFrameworkToProject(target, "StoreKit.framework", false);
            proj.AddFrameworkToProject(target, "AVFoundation.framework", false);
            proj.AddFrameworkToProject(target, "SystemConfiguration.framework", false);
            proj.AddFrameworkToProject(target, "JavaScriptCore.framework", false);
            proj.AddFrameworkToProject(target, "ImageIO.framework", false);
            proj.AddFrameworkToProject(target, "UIKit.framework", false);
            proj.AddFrameworkToProject(target, "libz.1.tbd", false);
            File.WriteAllText(projPath, proj.WriteToString());

            //add ATS in plist
            string        plistPath = path + "/Info.plist";
            PlistDocument plist     = new PlistDocument();
            plist.ReadFromString(File.ReadAllText(plistPath));
            PlistElementDict dictTransportSecurity = plist.root ["NSAppTransportSecurity"].AsDict();
            dictTransportSecurity.SetBoolean("NSAllowsArbitraryLoads", true);
            File.WriteAllText(plistPath, plist.WriteToString());
        }
    }
Beispiel #27
0
    public static void OnPostProcess(BuildTarget buildTarget, string buildPath)
    {
        if (buildTarget != BuildTarget.iOS)
        {
            return;
        }

        var dummy = ScriptableObject.CreateInstance <EntitlementsPostProcess>();
        var file  = dummy.m_entitlementsFile;

        ScriptableObject.DestroyImmediate(dummy);
        if (file == null)
        {
            return;
        }

        var proj_path = PBXProject.GetPBXProjectPath(buildPath);
        var proj      = new PBXProject();

        proj.ReadFromFile(proj_path);

        // target_name = "Unity-iPhone"
        var target_name = 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);
    }
    private static void onPostProcessBuildPlayer(BuildTarget target, string pathToBuiltProject)
    {
#if UNITY_EDITOR_OSX && UNITY_5_PLUS
        if (target == BuildTarget.iOS)
        {
            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);
        }
    }
        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 OnPostprocessBuild2(BuildTarget target, string buildPath)
        {
            if (!AUTO_SETUP_FRAMEWORKS && !AUTO_SETUP_ICLOUD)
            {
                return;
            }

            if (target == BuildTarget.iOS)
            {
                string pbxProjectPath = PBXProject.GetPBXProjectPath(buildPath);

                PBXProject pbxProject = new PBXProject();
                pbxProject.ReadFromFile(pbxProjectPath);

#if UNITY_2019_3_OR_NEWER
                string targetGUID = pbxProject.GetUnityFrameworkTargetGuid();
#else
                string targetGUID = pbxProject.TargetGuidByName(PBXProject.GetUnityTargetName());
#endif

#if UNITY_2018_2_OR_NEWER
                if (string.IsNullOrEmpty(pbxProject.GetBuildPropertyForAnyConfig(targetGUID, "PRODUCT_BUNDLE_IDENTIFIER")))
                {
                    pbxProject.AddBuildProperty(targetGUID, "PRODUCT_BUNDLE_IDENTIFIER", PlayerSettings.applicationIdentifier);
                }
#else
                pbxProject.SetBuildProperty(targetGUID, "PRODUCT_BUNDLE_IDENTIFIER", PlayerSettings.applicationIdentifier);
#endif

                File.WriteAllText(pbxProjectPath, pbxProject.WriteToString());
            }
        }
        private static void AddPushEntitlement(string path, PBXProject project, string target)
        {
            var entitlements = new PlistDocument();

            string entitlementsFilename     = MainTargetName + ".entitlements";
            string entitlementsRelativePath = MainTargetName + "/" + entitlementsFilename;
            string entitlementsPath         = path + "/" + entitlementsRelativePath;

            if (File.Exists(entitlementsPath))
            {
                entitlements.ReadFromFile(entitlementsPath);
            }

            if (entitlements.root["aps-environment"] != null)
            {
                return;
            }
            else
            {
                entitlements.root.SetString("aps-environment", "development");
            }

            project.AddFile(entitlementsRelativePath, entitlementsFilename);
            entitlements.WriteToFile(entitlementsPath);

            project.AddBuildProperty(target, "CODE_SIGN_ENTITLEMENTS", entitlementsRelativePath);
        }