public static void Execute(UnityEditor.BuildTarget target)
    {
        string platform = target.ToString();

        Execute(platform);
        AssetDatabase.Refresh();
    }
    void IncrementalGUI()
    {
        //增量包按钮
        GUILayout.Label("增量包:");


        GUILayout.BeginHorizontal();
        GUILayout.Space(80);
        if (GUILayout.Button("一键打包: [增量]资源包", GUILayout.Width(300), GUILayout.Height(30)))
        {
            //开始打包
            CreateAssetBundle_Editor.Execute(buildTarget);
            //生成hash
            CreateHashList.StartLoad((bool issuccess) =>
            {
                EditorUtility.DisplayDialog("", "打包成功", "OK");
            });
        }
        GUILayout.EndHorizontal();



        GUILayout.BeginHorizontal();
        GUILayout.Space(80);
        if (GUILayout.Button("生成服务端增量文件", GUILayout.Width(300), GUILayout.Height(30)))
        {
            mEditorVersion = new VersionCtrl_Editor();
            mEditorVersion.mResServerAddress = "http://api-resource.ptdev.cn/v1/res";
            //获取上个版本的hash
            string platform       = AssetBundleCtrl_Windows.GetPlatformName(buildTarget);
            string newVersionHash = System.IO.Path.Combine(Application.dataPath, "AssetBundle/" + platform + "/VersionNum/VersionHash-old.xml");
            //将服务器的hash写到本地
            mEditorVersion.Start("3", "100", "V0uFhE2GRNnRipS0hery9OhY", newVersionHash, (bool issuccess) =>
            {
                if (issuccess)
                {
                    mTaskQue.Enqueue(() =>
                    {
                        CreateVersionUpdateList.Execute(buildTarget);
                        EditorUtility.DisplayDialog("", "生成成功", "OK");
                    });
                }
                else
                {
                    mTaskQue.Enqueue(() =>
                    {
                        EditorUtility.DisplayDialog("", "生成失败", "OK");
                    });
                }
            });
        }
        if (mTaskQue.Count > 0)
        {
            var action = mTaskQue.Dequeue();
            action();
        }
        GUILayout.EndHorizontal();


        GUILayout.BeginHorizontal();
        GUILayout.Space(80);
        if (GUILayout.Button("一键导出", GUILayout.Width(300), GUILayout.Height(30)))
        {
            var outpath = EditorUtility.OpenFolderPanel("选择导出文件夹", "", "");
            if (outpath != null && outpath != "")
            {
                CreateVersionUpdateList.ExportFile(buildTarget, outpath);
                EditorUtility.DisplayDialog("", buildTarget.ToString() + "- 导出到" + outpath + "成功", "OK");
            }
        }
        GUILayout.EndHorizontal();
    }
        /**
         *  from build target to human friendly string for display purpose.
         */
        public static string TargetToHumaneString(UnityEditor.BuildTarget t)
        {
            switch (t)
            {
            case BuildTarget.Android:
                return("Android");

            case BuildTarget.iOS:
                return("iOS");

            case BuildTarget.PS4:
                return("PlayStation 4");

            case BuildTarget.PSM:
                return("PlayStation Mobile");

            case BuildTarget.PSP2:
                return("PlayStation Vita");

            case BuildTarget.SamsungTV:
                return("Samsung TV");

            case BuildTarget.StandaloneLinux:
                return("Linux Standalone");

            case BuildTarget.StandaloneLinux64:
                return("Linux Standalone(64-bit)");

            case BuildTarget.StandaloneLinuxUniversal:
                return("Linux Standalone(Universal)");

            case BuildTarget.StandaloneOSXIntel:
                return("OSX Standalone");

            case BuildTarget.StandaloneOSXIntel64:
                return("OSX Standalone(64-bit)");

            case BuildTarget.StandaloneOSXUniversal:
                return("OSX Standalone(Universal)");

            case BuildTarget.StandaloneWindows:
                return("Windows Standalone");

            case BuildTarget.StandaloneWindows64:
                return("Windows Standalone(64-bit)");

            case BuildTarget.Tizen:
                return("Tizen");

            case BuildTarget.tvOS:
                return("tvOS");

            case BuildTarget.WebGL:
                return("WebGL");

            case BuildTarget.WiiU:
                return("Wii U");

            case BuildTarget.WSAPlayer:
                return("Windows Store Apps");

            case BuildTarget.XboxOne:
                return("Xbox One");

#if !UNITY_5_5_OR_NEWER
            case BuildTarget.Nintendo3DS:
                return("Nintendo 3DS");

            case BuildTarget.PS3:
                return("PlayStation 3");

            case BuildTarget.XBOX360:
                return("Xbox 360");
#endif


            default:
                return(t.ToString() + "(deprecated)");
            }
        }
        /// <summary>
        /// Get platform folder
        /// </summary>
        /// <param name="platform"></param>
        /// <returns>each platform folder</returns>
        public static string GetPlatformFolder(UnityEditor.BuildTarget platform)
        {
            switch (platform)
            {
            case BuildTarget.StandaloneOSXUniversal:
            case BuildTarget.StandaloneOSXIntel:
                return("Standalone");

            case BuildTarget.StandaloneWindows:
                return("Standalone");

#if UNITY_5
            case BuildTarget.WebGL:
#endif
#if !UNITY_5_5_OR_NEWER
            case BuildTarget.WebPlayer:
            case BuildTarget.WebPlayerStreamed:
#endif
                return("WebPlayer");

#if UNITY_5
            case BuildTarget.iOS:
#else
            case BuildTarget.iPhone:
#endif
                return("iPhone");

#if !UNITY_5_5_OR_NEWER
            case BuildTarget.PS3:
                return("PS3");

            case BuildTarget.XBOX360:
                return("XBOX360");
#endif
            case BuildTarget.Android:
                return("Android");

#if !UNITY_5
            case BuildTarget.StandaloneGLESEmu:
            case BuildTarget.NaCl:
                break;

            case BuildTarget.FlashPlayer:
                return("Flash");
#endif
            case BuildTarget.StandaloneLinux:
            case BuildTarget.StandaloneWindows64:
#if UNITY_5
            case BuildTarget.WSAPlayer:
#else
            case BuildTarget.MetroPlayer:
            case BuildTarget.WP8Player:
#endif
            case BuildTarget.StandaloneLinux64:
            case BuildTarget.StandaloneLinuxUniversal:
            case BuildTarget.StandaloneOSXIntel64:
                return("Standalone");

#if UNITY_4_5 || UNITY_5
#if !UNITY_5_4_OR_NEWER
            case BuildTarget.BlackBerry:
#endif
            //case BuildTarget.BB10:
            case BuildTarget.Tizen:
            case BuildTarget.PSP2:
            case BuildTarget.PS4:
                return("PS4");

            case BuildTarget.PSM:
                return("PSM");

            case BuildTarget.XboxOne:
                return("XboxOne");

            case BuildTarget.SamsungTV:
                break;
#endif
            }
            return(platform.ToString());
        }
Beispiel #5
0
 public static bool CheckPlatform(UnityEditor.BuildTarget target)
 {
     if (EditorUserBuildSettings.activeBuildTarget != target)
     {
         EditorUtility.DisplayDialog("Target platform isn't the same as Active platform.\nPlease switch to the target platform firstly.",
                                     "Current platform : " + EditorUserBuildSettings.activeBuildTarget + "\nTarget platform : " + target.ToString(), "OK");
         return(false);
     }
     return(true);
 }
        public static void OnPostProcessBuild(ActualUnityEditor.BuildTarget build, string path)
        {
            //Make sure this build is for iOS.
            //Unity 4 uses 'iPhone' for the enum value; Unity 5 changes it to 'iOS'.
            if (build.ToString() != "iPhone" && build.ToString() != "iOS")
            {
                UnityEngine.Debug.LogWarning("Skillz cannot be set up for a platform other than iOS.");
                return;
            }
            if (Application.platform != RuntimePlatform.OSXEditor)
            {
                UnityEngine.Debug.LogError("Skillz cannot be set up for XCode automatically on a platform other than OSX.");
                return;
            }

            //Get whether this is an append build by checking whether a custom file has already been created.
            //If it is, then nothing needs to be modified.
            string   checkAppendFilePath = Path.Combine(path, checkAppendFileName);
            FileInfo checkAppend         = new FileInfo(checkAppendFilePath);

            if (checkAppend.Exists)
            {
                return;
            }

            checkAppend.Create().Close();

            bool trySetUp = SetUpSDKFiles(path);

            if (!trySetUp)
            {
                //These failures aren't fatal; the developer can do them manually.
                UnityEngine.Debug.LogWarning("Skillz XCode export is missing Skillz Framework.");
            }

            //Set up XCode project settings.
            var xcodeProjectPath = Path.Combine(path, "Unity-iPhone.xcodeproj/project.pbxproj");

            Debug.Log($"Loading the XCode project at '{xcodeProjectPath}'");

            try
            {
                using (var xcodeProjectSettings = XcodeProjectSettings.Load(xcodeProjectPath))
                {
                    xcodeProjectSettings.DisableBitcode();
                    xcodeProjectSettings.AddRunScript();
                    xcodeProjectSettings.ModifyMiscellaneous();
                }
            }
            catch (System.Exception)
            {
                UnityEngine.Debug.LogError("Skillz automated XCode editing failed!");
            }

            XCProject project = new XCProject(path);

            if (project != null)
            {
                project.AddFile(
                    filePath: path + "/Skillz.framework",
                    parent: project.GetGroup("Embed Frameworks"),
                    tree: "SOURCE_ROOT",
                    createBuildFiles: true,
                    weak: false,
                    embed: true
                    );

                //AddFile should also add FrameworkSearchPaths if required but doesn't
                project.AddFrameworkSearchPaths("$(PROJECT_DIR)");
                project.AddOtherLDFlags("-ObjC -lc++ -lz -lsqlite3 -lxml2 -weak_framework PassKit -framework Skillz");

                //Unity_4 doesn't exist so we check for Unity 5 defines.  Unity 6 is used for futureproofing.
#if !UNITY_5 && !UNITY_6
                project.AddFile(Path.Combine(Application.dataPath, "Skillz", "Internal", "Build", "iOS", "IncludeInXcode", "Skillz+Unity.mm"));
                SetAllowSkillzExit(Path.Combine(path, "Libraries", "Skillz", "Internal", "Build", "iOS", "IncludeInXcode", "Skillz+Unity.mm"));
#endif
                project.Save();
            }
            else
            {
                UnityEngine.Debug.LogError("Skillz automated XCode export failed!");
                return;
            }
        }
Beispiel #7
0
        public static void Build()
        {
            const string autoBuildBlock = "AutoBuild.Build()";

            BuildLogger.OpenBlock(autoBuildBlock);

            BuildLogger.LogMessage("Invoke PackageImporter explicitly");
            PackageAssetPostprocessor.ImportPackages();

            BuildLogger.LogMessage("Parsing additional params");
            var args = Environment.GetCommandLineArgs();

            UnityEditor.BuildOptions buildOptions = BuildOptions.None;

            for (int i = 0; i < args.Length; i++)
            {
                if (args[i] == "+outdir" && args.Length > i + 1)
                {
                    outDir = args[i + 1];
                    BuildLogger.LogMessage("outDir: " + outDir);
                }
                else if (args[i] == "+configTypeName" && args.Length > i + 1)
                {
                    configTypeName = args[i + 1];
                    BuildLogger.LogMessage("configTypeName: " + configTypeName);
                    if (!configTypeName.Equals(configTypeName.Trim()))                    // to detect 'CR' at the end
                    {
                        BuildLogger.LogWarning("Build configurator type contains whitespaces (+configTypeName length = " + configTypeName.Length + ")!");
                    }
                }
                else if (args[i] == "+buildTag" && args.Length > i + 1)
                {
                    buildTag = args[i + 1];
                    BuildLogger.LogMessage("buildTag: " + buildTag);
                }
                else if (args[i] == "+configuration" && args.Length > i + 1)        //Test = development build; Release = None
                {
                    if (args[i + 1] == "Test")
                    {
                        buildOptions = BuildOptions.Development;
                        BuildLogger.LogMessage("configuration: Test(Development build)");
                    }
                    else
                    {
                        BuildLogger.LogMessage("configuration: Release");
                    }
                }
            }

            // produce Assets/Resources/build_tag.txt
            if (buildTag != null)
            {
                if (!Directory.Exists("Assets/Resources"))
                {
                    BuildLogger.LogMessage("Creating Assets/Resources");
                    Directory.CreateDirectory("Assets/Resources");
                }

                BuildLogger.LogMessage(string.Format("Writing Assets/Resources/{0}.txt: {1}", BuildInfo.k_build_tag, buildTag));

                Stream       file = File.Create(string.Format("Assets/Resources/{0}.txt", BuildInfo.k_build_tag));
                StreamWriter sw   = new StreamWriter(file);
                sw.Write(buildTag);
                sw.Close();
                file.Close();

                AssetDatabase.Refresh();
            }

            // prepare default build params
            BuildLogger.LogMessage("Preparing default build params");
            List <string> scenesToBuild = GetScenesToBuild();

            UnityEditor.BuildTarget buildTarget = BuildTarget.iPhone;
            BuildLogger.LogMessage("Default scenes to build:");
            foreach (string sceneName in scenesToBuild)
            {
                BuildLogger.LogMessage('\t' + sceneName);
            }
            BuildLogger.LogMessage("Default buildTarget=" + buildTarget.ToString());
            BuildLogger.LogMessage("Default buildOptions=" + buildOptions.ToString());

            // run custom builder (or fall back to default)
            Type configType = null;

            if (configTypeName != null)
            {
                configType = Type.GetType(configTypeName);
            }

            IBuildConfig buildConfig = null;

            if (configType != null)
            {
                if (configType.GetInterface("IBuildConfig") != null)
                {
                    ConstructorInfo defaultConstructorInfo = configType.GetConstructor(new Type [0]);
                    if (defaultConstructorInfo != null)
                    {
                        buildConfig = defaultConstructorInfo.Invoke(new object [0]) as IBuildConfig;
                        if (buildConfig != null)
                        {
                            BuildLogger.LogMessage("Using build configurator \"" + buildConfig.ToString() + "\"");
                        }
                        else
                        {
                            BuildLogger.LogWarning("Failed to construct an instance of build configurator type (+configTypeName \"" + configTypeName + "\")");
                        }
                    }
                    else
                    {
                        BuildLogger.LogWarning("Build configurator type (+configTypeName \"" + configTypeName + "\") does NOT have a default constructor");
                    }
                }
                else
                {
                    BuildLogger.LogWarning("Build configurator type (+configTypeName \"" + configTypeName + "\") does NOT implement IBuildConfig");
                }
            }
            else
            {
                BuildLogger.LogWarning("Build configurator type NOT found (+configTypeName \"" + configTypeName + "\")");
            }
            if (buildConfig != null)
            {
                string block = string.Format("{0}.Build()", buildConfig.GetType().Name);
                BuildLogger.OpenBlock(block);
                buildConfig.Build(scenesToBuild, buildTarget, buildOptions);
                BuildLogger.CloseBlock(block);
            }
            else
            {
                BuildLogger.LogError("Unable to configure build for " + configTypeName);
                throw new ApplicationException("Error: unable to configure build for " + configTypeName);
            }

            BuildLogger.CloseBlock(autoBuildBlock);
        }
        public void OnPreprocessBuild(UnityEditor.BuildTarget target, string path)
        {
            StringBuilder warningStringBuilder = new StringBuilder();

            PluginImporter[] pluginImporters = PluginImporter.GetImporters(target);
            foreach (PluginImporter pluginImporter in pluginImporters)
            {
                NativePlugin plugin = GetPluginByName(pluginImporter.GetEditorData("PLUGIN_NAME"));
                if (plugin != null)
                {
                    string version = pluginImporter.GetEditorData("PLUGIN_VERSION");
                    if (plugin.Version != version)
                    {
                        warningStringBuilder.AppendFormat(@"Plugin version number mismatch: ""{0}"" is set to ""{1}"", while ""{2}"" was built with ""{3}""" + '\n',
                                                          plugin.Name, plugin.Version, target.ToString(), version);
                    }

                    string buildNumberStr = pluginImporter.GetEditorData("PLUGIN_BUILD_NUMBER");
                    int    buildNumber;
                    if (int.TryParse(buildNumberStr, out buildNumber))
                    {
                        if (plugin.BuildNumber != buildNumber)
                        {
                            warningStringBuilder.AppendFormat(@"Plugin build number mismatch: ""{0}"" is set to ""{1}"", while ""{2}"" was built with ""{3}""" + '\n',
                                                              plugin.Name, plugin.BuildNumber, target.ToString(), buildNumber);
                        }
                    }

                    string    buildTypeStr = pluginImporter.GetEditorData("BUILD_TYPE");
                    BuildType buildType    = (BuildType)Enum.Parse(typeof(BuildType), buildTypeStr, true);
                    if ((EditorUserBuildSettings.development && buildType == BuildType.Release) ||
                        (!EditorUserBuildSettings.development && buildType == BuildType.Debug))
                    {
                        warningStringBuilder.AppendFormat(@"Plugin build type mismatch: current build is set to development=""{0}"", while plugin ""{1}"" for ""{2}"" is ""{3}""." + '\n',
                                                          EditorUserBuildSettings.development, plugin.Name, target, buildType);
                    }
                }
            }
            string warnings = warningStringBuilder.ToString();

            if (!string.IsNullOrEmpty(warnings))
            {
                Debug.LogWarning(warnings);
            }
        }