예제 #1
0
 public iOSBuildRunner() : base()
 {
     this.BuildPath        = Path.Combine(BuildRunner.ProjectPath, "../Build/iOS");
     this.BuildTarget      = BuildTarget.iOS;
     this.BuildTargetGroup = BuildTargetGroup.iOS;
     this.BuildSdkVersion  = iOSSdkVersion.DeviceSDK;
 }
        public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
        {
            if (buildTarget != BuildTarget.iOS)
            {
                return;
            }

            iOSSdkVersion target = PlayerSettings.iOS.sdkVersion;

            SetupXcFramework(path, target == iOSSdkVersion.DeviceSDK);
        }
예제 #3
0
    static void _BuildIOSPlayer(iOSSdkVersion version, bool devMode = true)
    {
        var scenes = GetBuildPlayerScenes(devMode);

        // pack asset bundles into data.zip
        FI.TargetPlatform = "ios";
        // PackFiles();

        // create necessary folders for building project
        Directory.CreateDirectory("proj.ios/Data/Raw");
        Directory.CreateDirectory("proj.ios/Libraries");
        // build the xcode project

        // PlayerSettings.iOS.targetResolution = iOSTargetResolution.Native;
        PlayerSettings.iOS.sdkVersion = version;
        if (!devMode)
        {
            PlayerSettings.iOS.scriptCallOptimization = ScriptCallOptimizationLevel.FastButNoExceptions;
        }
        else
        {
            PlayerSettings.iOS.scriptCallOptimization = ScriptCallOptimizationLevel.SlowAndSafe;
        }

        PlayerSettings.enableCrashReportAPI = false;

        PlayerSettings.stripEngineCode = false;
        PlayerSettings.gpuSkinning     = true;
        PlayerSettings.SetMobileMTRendering(BuildTargetGroup.iOS, true);
        PlayerSettings.graphicsJobs              = false;
        PlayerSettings.accelerometerFrequency    = 0;
        PlayerSettings.stripUnusedMeshComponents = false;
        // ios doesnt support antiAliasing
        QualitySettings.antiAliasing    = 0;
        QualitySettings.pixelLightCount = 1;

        PlayerSettings.iOS.appleEnableAutomaticSigning = false;
        // PlayerSettings.iOS.applicationDisplayName = "荣耀飞车";
        // PlayerSettings.iOS.appleDeveloperTeamID = "T7DS86KKR2";

        if (devMode)
        {
            BuildPipeline.BuildPlayer(scenes, "proj.ios", BuildTarget.iOS, BuildOptions.AcceptExternalModificationsToPlayer | BuildOptions.Development);
        }
        else
        {
            BuildPipeline.BuildPlayer(scenes, "proj.ios", BuildTarget.iOS, BuildOptions.AcceptExternalModificationsToPlayer);
        }

        //bundle files are copied in package.sh
        //CopyAssetsToProject();
    }
    public void Setup()
    {
#if UNITY_EDITOR
        originaliOSSDK = PlayerSettings.iOS.sdkVersion;
        originalRequestAuthorizationOnAppLaunch = NotificationSettings.iOSSettings.RequestAuthorizationOnAppLaunch;
        originalAuthorizationOptions            = NotificationSettings.iOSSettings.DefaultAuthorizationOptions;
        originalAddRemoteNotificationCapability = NotificationSettings.iOSSettings.AddRemoteNotificationCapability;
        originalRequestRemoteOnLaunch           = NotificationSettings.iOSSettings.NotificationRequestAuthorizationForRemoteNotificationsOnAppLaunch;

        PlayerSettings.iOS.sdkVersion = iOSSdkVersion.SimulatorSDK;
        NotificationSettings.iOSSettings.RequestAuthorizationOnAppLaunch = true;
        NotificationSettings.iOSSettings.DefaultAuthorizationOptions     = originalAuthorizationOptions | AuthorizationOption.Provisional;
        NotificationSettings.iOSSettings.AddRemoteNotificationCapability = false;
        NotificationSettings.iOSSettings.NotificationRequestAuthorizationForRemoteNotificationsOnAppLaunch = false;
#endif
    }
예제 #5
0
    private static void Load2IOS()
    {
        companyName  = Application.companyName;
        prodectName  = Application.productName;
        qualityLevel = QualitySettings.GetQualityLevel();

        isFullPack = PlayerPrefs.GetInt("PackManager_isFullPack", 0) == 1;

        targetPatch = PlayerPrefs.GetString("Editor_targetPatch", "../../" + @"\IOS\FishZoo\");

        packName = PlayerSettings.GetApplicationIdentifier(buildTargetGroup);

        script = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.iOS);

        targetOSVersion = PlayerSettings.iOS.targetOSVersionString;
        targetDevice    = PlayerSettings.iOS.targetDevice;
        sdkVersion      = PlayerSettings.iOS.sdkVersion;
    }
예제 #6
0
        private static void SetiOSSDK(iOSSdkVersion sdk)
        {
            PlayerSettings.iOS.sdkVersion = sdk;

            switch (sdk)
            {
            case iOSSdkVersion.SimulatorSDK:
                PlayerSettings.SetPlatformVuforiaEnabled(BuildTargetGroup.iOS, false);
                PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.iOS, "TARGET_OS_SIMULATOR");
                PlayerSettings.stripEngineCode = false;
                break;

            default:
                PlayerSettings.SetPlatformVuforiaEnabled(BuildTargetGroup.iOS, true);
                PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.iOS, string.Empty);
                PlayerSettings.stripEngineCode = true;
                break;
            }
        }
예제 #7
0
        override protected void Build()
        {
            // quit xcode so the user isn't prompted to reload the project
            switch (this.BuildAction)
            {
            case iOSBuildAction.BuildAndRun:
            case iOSBuildAction.BuildAndArchive:
                this.XcodeHelper("Quit");
                break;
            }

            // store intial and target sdk versions
            iOSSdkVersion initialSdkVersion = PlayerSettings.iOS.sdkVersion;
            iOSSdkVersion targetSdkVersion  = this.BuildSdkVersion;

            // switch to the target sdk (device or simulator)
            if (targetSdkVersion != initialSdkVersion)
            {
                PlayerSettings.iOS.sdkVersion = targetSdkVersion;
            }

            // build
            base.Build();

            // revert to the inital sdk
            if (targetSdkVersion != initialSdkVersion)
            {
                PlayerSettings.iOS.sdkVersion = initialSdkVersion;
            }

            // execute the build action via applescript
            switch (this.BuildAction)
            {
            case iOSBuildAction.BuildAndRun:
                this.XcodeHelper("Run");
                break;

            case iOSBuildAction.BuildAndArchive:
                this.XcodeHelper("Archive");
                break;
            }
        }
 internal static void ApplySettings(iOSSdkVersion targetSDK = iOSSdkVersion.DeviceSDK, iOSTargetDevice targetDevice = iOSTargetDevice.iPhoneAndiPad, string targetOSVersionString = "8.0")
 {
     UnityEditor.PlayerSettings.iOS.sdkVersion            = targetSDK;
     UnityEditor.PlayerSettings.iOS.targetDevice          = targetDevice;
     UnityEditor.PlayerSettings.iOS.targetOSVersionString = targetOSVersionString;
 }
예제 #9
0
    /// <summary>
    /// IOS部分对应显示
    /// </summary>
    private void ShowIOS()
    {
        EditorGUILayout.BeginVertical();

        prodectName = EditorGUILayout.TextField("项目名:", prodectName);
        packName    = EditorGUILayout.TextField("包名:", packName);

        EditorGUILayout.LabelField("路径是否正确 : " + Directory.Exists(targetPatch));
        targetPatch = EditorGUILayout.TextField("项目路径:", targetPatch);


        EditorGUILayout.LabelField("IOS设置:");

        script          = EditorGUILayout.TextField("项目注入:", script);
        targetOSVersion = EditorGUILayout.TextField("IOS版本支援:", targetOSVersion);
        sdkVersion      = (iOSSdkVersion)EditorGUILayout.EnumPopup("目标SDK:", sdkVersion);
        targetDevice    = (iOSTargetDevice)EditorGUILayout.EnumPopup("目标设备:", targetDevice);

        isFullPack = EditorGUILayout.Toggle("是否为完整导出:", isFullPack);

        EditorGUILayout.BeginHorizontal();

        if (GUILayout.Button("读取"))
        {
            Load2IOS();
            this.Repaint();
        }

        if (GUILayout.Button("写入"))
        {
            Write2IOS();
        }

        if (GUILayout.Button("打包(如有变更先写入)"))
        {
            var file = Build2IOS();
            if (file.Length > 0)
            {
                if (EditorUtility.DisplayDialog("PackManager", "导出成功,是否导入IOS工程", "Yep", "Closs"))
                {
                    if (isFullPack)
                    {
                        var left = targetPatch;

                        var right = @"ForIOS\" + prodectName;

                        try
                        {
                            if (Directory.Exists(left))
                            {
                                Directory.Delete(left, true);
                            }

                            Directory.Move(right, left);

                            if (Directory.Exists(right))
                            {
                                Directory.Delete(right, true);
                            }

                            Directory.Delete("ForIOS", true);

                            Assembly   assembly           = Assembly.GetAssembly(typeof(SceneView));
                            Type       logEntries         = assembly.GetType("UnityEditor.LogEntries");
                            MethodInfo clearConsoleMethod = logEntries.GetMethod("Clear");
                            clearConsoleMethod.Invoke(new object(), null);

                            Debug.Log("打包完成!");
                            this.Close();
                        }
                        catch (System.Exception e)
                        {
                            if (EditorUtility.DisplayDialog("PackManager", e.Message, "Closs"))
                            {
                                this.Close();
                            }
                        }
                    }
                    else
                    {
                        var ass = targetPatch + @"\Classes";
                        var jl  = targetPatch + @"\Data";
                        var lb  = targetPatch + @"\Libraries";

                        var assnew = @"ForIOS\" + prodectName + @"\Classes";
                        var jlnew  = @"ForIOS\" + prodectName + @"\Data";
                        var lbnew  = @"ForIOS\" + prodectName + @"\Libraries";

                        try
                        {
                            if (Directory.Exists(ass) && Directory.Exists(jl) && Directory.Exists(lb))
                            {
                                Directory.Delete(ass, true);
                                Directory.Delete(jl, true);
                                Directory.Delete(lb, true);
                            }

                            Directory.Move(assnew, ass);
                            Directory.Move(jlnew, jl);
                            Directory.Move(lbnew, lb);

                            Directory.Delete("ForIOS", true);

                            var file01 = ass + @"\UnityAppController.h";
                            var file02 = ass + @"\UnityAppController.mm";

                            if (File.Exists(file01) && File.Exists(file02))
                            {
                                File.Delete(file01);
                                File.Delete(file02);
                            }

                            Assembly   assembly           = Assembly.GetAssembly(typeof(SceneView));
                            Type       logEntries         = assembly.GetType("UnityEditor.LogEntries");
                            MethodInfo clearConsoleMethod = logEntries.GetMethod("Clear");
                            clearConsoleMethod.Invoke(new object(), null);

                            Debug.Log("打包完成!");
                            this.Close();
                        }
                        catch (System.Exception e)
                        {
                            if (EditorUtility.DisplayDialog("PackManager", e.Message, "Closs"))
                            {
                                this.Close();
                            }
                        }
                    }
                }
                else
                {
                    this.Close();
                }
            }
        }

        if (GUILayout.Button("关闭"))
        {
            this.Close();
        }

        try
        {
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.EndVertical();
        }
        catch (Exception)
        {
            Debug.Log("Why is always consle ?");
        }
    }
예제 #10
0
    private static void DoBuildIOSInternal(iOSBuildType buildType, iOSSdkVersion sdkVersion)
    {
        Debug.Log("Building iOS...");

        CurrentGroup = BuildTargetGroup.iOS;

        var xrGeneralSettings         = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildTargetGroup.iOS);
        var prevCompilerConfiguration = PlayerSettings.GetIl2CppCompilerConfiguration(BuildTargetGroup.iOS);
        var prevScriptingDefines      = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.iOS);
        var prev_sdkVersion           = PlayerSettings.iOS.sdkVersion;
        var isDebug       = !(buildType == iOSBuildType.Debug);
        var disabledARKit = false;

        using var revertSettings = new Disposable(() =>
        {
            CurrentGroup = null;

            PlayerSettings.iOS.sdkVersion = prev_sdkVersion;
            PlayerSettings.SetIl2CppCompilerConfiguration(BuildTargetGroup.iOS, prevCompilerConfiguration);

            if (!Application.isBatchMode)
            {
                PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.iOS, prevScriptingDefines);
            }

            if (disabledARKit)
            {
                XRPackageMetadataStore.AssignLoader(
                    xrGeneralSettings.AssignedSettings,
                    typeof(UnityEngine.XR.ARKit.ARKitLoader).FullName,
                    BuildTargetGroup.iOS);
            }
        });

        var compilerConfiguration = isDebug ? Il2CppCompilerConfiguration.Debug : Il2CppCompilerConfiguration.Master;

        PlayerSettings.SetIl2CppCompilerConfiguration(BuildTargetGroup.iOS, compilerConfiguration);
        PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.iOS, ProcessDefines(prevScriptingDefines, isDebug));
        PlayerSettings.iOS.sdkVersion = sdkVersion;

        if (sdkVersion == iOSSdkVersion.SimulatorSDK &&
            xrGeneralSettings.AssignedSettings.activeLoaders.Any(m => m.GetType() == typeof(UnityEngine.XR.ARKit.ARKitLoader)))
        {
            // ARKit is not supported on iOS Simulator - disable it temporairly
            XRPackageMetadataStore.RemoveLoader(
                xrGeneralSettings.AssignedSettings,
                typeof(UnityEngine.XR.ARKit.ARKitLoader).FullName,
                BuildTargetGroup.iOS);
            disabledARKit = true;
        }

        string exportPath = Path.GetFullPath(Path.Combine(ProjectPath, "../../ios/UnityExport"));
        string buildPath  = iosBuildPath;

        if (Directory.Exists(buildPath))
        {
            Directory.Delete(buildPath, true);
        }

        EditorUserBuildSettings.iOSBuildConfigType = buildType;

        try
        {
            var options = (buildType == iOSBuildType.Debug ? BuildOptions.AllowDebugging : BuildOptions.None);
            var report  = BuildPipeline.BuildPlayer(
                GetEnabledScenes(),
                buildPath,
                BuildTarget.iOS,
                options
                );

            if (report.summary.result != BuildResult.Succeeded)
            {
                throw new Exception("Build failed");
            }

            // Clear UnityExport
            DeleteFolderContent(exportPath);

            // Copy build output to UnityExport
            Debug.Log("Copy to UnityExport");
            CopyDirectory(
                buildPath,
                exportPath,
                mergeDirectories: false,
                overwriteFiles: true);
        }
        catch (Exception e)
        {
            Debug.Log("Export failed!");

            if (Application.isBatchMode)
            {
                Debug.LogError(e);
                EditorApplication.Exit(-1);
            }
            else
            {
                throw;
            }
        }
        finally
        {
            Debug.Log("Export completed!");

            if (Application.isBatchMode)
            {
                EditorApplication.Exit(0);
            }
        }
    }