public static void OnPostProcessBuild(BuildTarget target, string pathToBuiltProject) { #if UNITY_5 if (target != BuildTarget.iOS) { #else if (target != BuildTarget.iPhone) { #endif Debug.LogWarning("Target is not iPhone. XCodePostProcess will not run"); return; } if (string.IsNullOrEmpty(config_path)) { config_path = Application.dataPath + "/Res/Template/IOSConfig/XYFYSMYYSDK_Test"; } XCConfigItem configItem = XCConfigItem.ParseXCConfig(config_path); if (configItem != null) { File.WriteAllText(Application.dataPath + "/ios_pack.txt", "config_path is " + config_path); configItem.EditProject(pathToBuiltProject); } else { File.WriteAllText(Application.dataPath + "/ios_error.txt", "config_path is null"); } }
public static XCConfigItem ParseXCConfig(string path) { if (!path.CustomEndsWith(".json")) { path += ".json"; } if (!File.Exists(path)) { return(null); } Hashtable datastore = (Hashtable)XUPorterJSON.MiniJSON.jsonDecode(File.ReadAllText(path)); XCConfigItem item = new XCConfigItem(); ArrayList includes = datastore["includes"] as ArrayList; for (int i = 0; i < includes.Count; ++i) { item.includes.Add(includes[i].ToString()); } item.channel = datastore["channel"].ToString(); item.game_name = datastore["game_name"].ToString(); item.code_sign = datastore["code_sign"].ToString(); item.provision_profile = datastore["provision_profile"].ToString(); item.dev_team = datastore["dev_team"].ToString(); item.external_call = datastore["external_call"].ToString(); item.bundleIdentifier = datastore["bundle_identifier"].ToString(); item.product_name = datastore["product_name"].ToString(); item.app_icon = datastore["app_icon"].ToString(); ArrayList code_edit_items = datastore["code_edit"] as ArrayList; for (int i = 0; i < code_edit_items.Count; ++i) { CodeEditItem editItem = new CodeEditItem(); Hashtable config = code_edit_items[i] as Hashtable; if (config != null) { string type = config["type"].ToString(); if (type == "write") { editItem.type = CodeEditItem.EditType.WriteBelow; } else if (type == "replace") { editItem.type = CodeEditItem.EditType.Replace; } editItem.key = config["key"].ToString(); ArrayList values = config["value"] as ArrayList; StringBuilder sb = new StringBuilder(); for (int j = 0; j < values.Count; ++j) { sb.Append(values[j].ToString()); } editItem.value = sb.ToString(); } item.codeEditList.Add(editItem); } return(item); }
void BuildPlayer(bool packAllRes, bool forceUpdate) { var option = BuildOptions.None; if (debug) { option |= BuildOptions.AllowDebugging; } if (development) { option |= BuildOptions.Development; } if (autoConnectProfile) { option |= BuildOptions.ConnectWithProfiler; } var temps = Apk_Save_Path.Replace("\\", "/").Split('/'); if ((ABPackHelper.GetBuildTarget() == BuildTarget.Android || ABPackHelper.GetBuildTarget() == BuildTarget.StandaloneWindows64 || ABPackHelper.GetBuildTarget() == BuildTarget.StandaloneWindows) && sdkConfig != null) { string lastChannel = string.Empty; for (int i = 0; i < sdkConfig.items.Count; ++i) { StringBuilder final_path = new StringBuilder(); for (int j = 0; j < temps.Length - 1; ++j) { final_path.Append(temps[j] + "/"); } var item = sdkConfig.items[i]; if (item.need_subpack == 0 && !packAllRes) { continue; } if (ABPackHelper.GetBuildTarget() == BuildTarget.StandaloneWindows64 || ABPackHelper.GetBuildTarget() == BuildTarget.StandaloneWindows) { final_path.Append(DateTime.Now.ToString("yyyyMMdd") + "/"); if (!Directory.Exists(final_path.ToString())) { Directory.CreateDirectory(final_path.ToString()); } final_path.Append(item.game_name + "_v"); } else { if (packAllRes) { if (item.development == 1) { option |= BuildOptions.Development; final_path.Append(item.game_name + DateTime.Now.ToString("yyyyMMdd") + "_allpack_dev_v"); } else if (item.use_sdk == 1) { final_path.Append(item.game_name + DateTime.Now.ToString("yyyyMMdd") + "_allpack_sdk_v"); } else { final_path.Append(item.game_name + DateTime.Now.ToString("yyyyMMdd") + "_allpack_test_v"); } } else { if (item.development == 1) { option |= BuildOptions.Development; final_path.Append(item.game_name + DateTime.Now.ToString("yyyyMMdd") + "_subpack_dev_v"); } else if (item.use_sdk == 1) { final_path.Append(item.game_name + DateTime.Now.ToString("yyyyMMdd") + "_subpack_sdk_v"); } else { final_path.Append(item.game_name + DateTime.Now.ToString("yyyyMMdd") + "_subpack_test_v"); } } } final_path.Append(gameVersion.ToString()); if (ABPackHelper.GetBuildTarget() == BuildTarget.Android) { final_path.Append(".apk"); if (File.Exists(final_path.ToString())) { File.Delete(final_path.ToString()); } // 写入并保存sdk启用配置 item.CopyConfig(); item.CopySDK(); item.SetPlayerSetting(sdkConfig.splash_image); item.SaveSDKConfig(); item.SplitAssets(sdkConfig.split_assets); IncreaseLEBIAN_VERCODE(forceUpdate, item.update_along); if (item.update_along == 0 && forceUpdate) { if (Directory.Exists(Application.streamingAssetsPath)) { Directory.Delete(Application.streamingAssetsPath, true); } } } else if (ABPackHelper.GetBuildTarget() == BuildTarget.StandaloneWindows64 || ABPackHelper.GetBuildTarget() == BuildTarget.StandaloneWindows) { final_path.Append(".exe"); if (Directory.Exists(final_path.ToString())) { Directory.Delete(final_path.ToString(), true); } item.CopyConfig(); } AssetDatabase.Refresh(); BuildPipeline.BuildPlayer(ABPackHelper.GetBuildScenes(), final_path.ToString(), ABPackHelper.GetBuildTarget(), option); AssetDatabase.Refresh(); item.ClearSDK(); SVNHelper.UpdateAll(); } } else if (ABPackHelper.GetBuildTarget() == BuildTarget.iOS) { // 在上传目录新建一个ios_check.txt文件用于判断当前包是否出于提审状态 string checkFile = ABPackHelper.ASSET_PATH + LuaConst.osDir + "/ios_check.txt"; if (File.Exists(checkFile)) { File.Delete(checkFile); } File.WriteAllText(checkFile, "1"); XCConfigItem configItem = XCConfigItem.ParseXCConfig(XCodePostProcess.config_path); if (configItem != null) { PlayerSettings.applicationIdentifier = configItem.bundleIdentifier; PlayerSettings.productName = configItem.product_name; configItem.CopyConfig(); } IOSGenerateHelper.IOSConfusing(); AssetDatabase.Refresh(); BuildPipeline.BuildPlayer(ABPackHelper.GetBuildScenes(), Apk_Save_Path, ABPackHelper.GetBuildTarget(), option); AssetDatabase.Refresh(); } Resources.UnloadUnusedAssets(); GC.Collect(); Debug.Log("<color=green>Build success!</color>"); }
protected string BuildApp(bool packAllRes, bool forceUpdate) { Builder.AddBuildLog("Build App Start !... packAllRes:" + packAllRes + ",force update:" + forceUpdate); var option = BuildOptions.None; if (Builder.IsDebug) { option |= BuildOptions.AllowDebugging; } if (Builder.IsBuildDev) { option |= BuildOptions.Development; } if (Builder.IsAutoConnectProfile) { option |= BuildOptions.ConnectWithProfiler; } string dir = Path.GetDirectoryName(Builder.ApkSavePath); string fileName = Path.GetFileNameWithoutExtension(Builder.ApkSavePath); string time = DateTime.Now.ToString("yyyyMMdd"); string flag = string.Empty; BuildTarget buildTarget = EditorUserBuildSettings.activeBuildTarget; string final_path = string.Empty; if (buildTarget != BuildTarget.iOS) { SDKConfig curSdkConfig = Builder.CurrentConfigSDK; for (int i = 0; i < curSdkConfig.items.Count; i++) { var item = Builder.CurrentConfigSDK.items[i]; BuildOptions targetOptions = option; if (item.development == 1) { targetOptions |= BuildOptions.Development; flag = packAllRes ? "_allpack_dev_v" : "_subpack_dev_v"; } else if (item.use_sdk == 1) { flag = packAllRes ? "_allpack_sdk_v" : "_subpack_sdk_v"; } else { flag = packAllRes ? "_allpack_test_v" : "_subpack_test_v"; } if (buildTarget == BuildTarget.Android) { final_path = string.Concat(dir, "/", fileName, "_", time, flag, Builder.GameVersion.ToString(), ".apk"); if (File.Exists(final_path)) { File.Delete(final_path); } // 写入并保存sdk启用配置 // item.CopyConfig(); // item.CopySDK(); // item.SetPlayerSetting(curSdkConfig.splash_image); // item.SaveSDKConfig(); //item.SplitAssets(sdkConfig.split_assets); if (item.update_along == 0 && forceUpdate) { if (Directory.Exists(Application.streamingAssetsPath)) { Directory.Delete(Application.streamingAssetsPath, true); } } } else if (buildTarget == BuildTarget.StandaloneWindows64 || buildTarget == BuildTarget.StandaloneWindows) { final_path = string.Concat(dir, "/", fileName, "_", time, flag, Builder.GameVersion.ToString(), ".exe"); if (Directory.Exists(final_path)) { Directory.Delete(final_path, true); } item.CopyConfig(); } AssetDatabase.Refresh(); BuildUtil.SwapPathDirectory(final_path); BuildPipeline.BuildPlayer(GetBuildScenes(), final_path, buildTarget, targetOptions); item.ClearSDK(); } } else if (buildTarget == BuildTarget.iOS) { // 在上传目录新建一个ios_check.txt文件用于判断当前包是否出于提审状态 string checkFile = BuilderPreference.ASSET_PATH + "/ios_check.txt"; if (File.Exists(checkFile)) { File.Delete(checkFile); } File.WriteAllText(checkFile, "1"); XCConfigItem configItem = XCConfigItem.ParseXCConfig(XCodePostProcess.config_path); if (configItem != null) { PlayerSettings.applicationIdentifier = configItem.bundleIdentifier; PlayerSettings.productName = configItem.product_name; configItem.CopyConfig(); } // IOSGenerateHelper.IOSConfusing(); AssetDatabase.Refresh(); BuildPipeline.BuildPlayer(GetBuildScenes(), Builder.ApkSavePath, buildTarget, option); } Resources.UnloadUnusedAssets(); GC.Collect(); Builder.AddBuildLog("[end]Build App Finish !..."); return(final_path); }