unity ios渠道批量打包以及需要注意的两个小点

针对每个渠道,肯定是要分开打包,ios方面unity打成xcode工程再得在xcode里进行build,有个批量打包的工具肯定是能节省很多时间。

下面是代码(在雨松momo的批量打包代码基础上进行了一些改动,,原文地址:):

using UnityEngine;using UnityEditor;using System.Collections;using System.Collections.Generic;using System;using System.IO;public class PerformBuild : EditorWindow {static Dictionary<string, bool> componentDic = new Dictionary<string, bool>();static string[] sList = new string[7]{"91","AiSi","KuaiYong","TongBuTui","iTools","PP","XY",};static List<string> selectBuild = new List<string> ();static string inputText = "";[MenuItem("Tools/Build Project")]static void Init(){EditorWindow.GetWindow<PerformBuild>(true, "Build Project");selectBuild.Clear ();/*for (int i=0; i<selectBuild.Length; i++) {selectBuild[i] = null;}*/componentDic.Clear ();componentDic.Add ("91", false);componentDic.Add ("AiSi", false);componentDic.Add ("KuaiYong", false);componentDic.Add ("TongBuTui", false);componentDic.Add ("iTools", false);componentDic.Add ("PP", false);componentDic.Add ("XY", false);}private static string[] FindEnabledEditorScenes(){List<string> EditorScenes = new List<string>();foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes){if (!scene.enabled) continue;EditorScenes.Add(scene.path);}return EditorScenes.ToArray();}void BuildSelect(){for (int i = 0; i<sList.Length; i++){if(componentDic[sList[i]]){selectBuild.Add(sList[i]);}}for (int i=0; i<selectBuild.Count; i++) {BulidTarget(selectBuild[i]);}}void OnGUI(){EditorGUILayout.BeginVertical();EditorGUILayout.SelectableLabel ("Please Input Your Bundle Version:");inputText = EditorGUILayout.TextField ("",inputText);EditorGUILayout.SelectableLabel ("Select You Want Build SDK Project:");for (int i = 0; i<sList.Length; i++){if(i==0)EditorGUILayout.BeginHorizontal();if(i==3||i==sList.Length-1){EditorGUILayout.EndHorizontal();EditorGUILayout.BeginHorizontal();}componentDic[sList[i]] = EditorGUILayout.Toggle(sList[i],componentDic[sList[i]]);}EditorGUILayout.EndHorizontal();if (GUILayout.Button ("Build Select")) {BuildSelect();}EditorGUILayout.EndVertical ();}static string[] SCENES = FindEnabledEditorScenes();static void BulidTarget(string name){string app_name = name;string target_dir = null;string target_name = app_name;BuildTargetGroup targetGroup = BuildTargetGroup.iPhone;BuildTarget buildTarget = BuildTarget.iPhone;string applicationPath = Application.dataPath.Replace("/Assets","");target_dir = applicationPath + "/TargetIOS";//每次build删除之前的残留if(Directory.Exists(target_dir)) {if (File.Exists(target_name)){File.Delete(target_name);}}else{Directory.CreateDirectory(target_dir); }//==================这里是比较重要的东西=======================Texture2D[] icon = new Texture2D[7];string iconPath = null;switch(name){case "91":iconPath = "Assets/XX/Icon/Icon_91/";PlayerSettings.bundleIdentifier = "com.XX.XX.91";break;case "AiSi":iconPath = "Assets/XX/Icon/Icon_i4/";PlayerSettings.bundleIdentifier = "com.XX.XX.i4";break;case "KuaiYong":iconPath = "Assets/XX/Icon/Icon_ky/";PlayerSettings.bundleIdentifier = "com.XX.XX.ky";break;case "TongBuTui":iconPath = "Assets/XX/Icon/Icon_tb/";PlayerSettings.bundleIdentifier = "com.XX.XX.tb";break;case "iTools":iconPath = "Assets/XX/Icon/Icon_sky/";PlayerSettings.bundleIdentifier = "com.XX.XX.sky";break;case "PP":iconPath = "Assets/XX/Icon/Icon_pp/";PlayerSettings.bundleIdentifier = "com.XX.XX.pp";break;case "XY":iconPath = "Assets/XX/Icon/Icon_xy/";PlayerSettings.bundleIdentifier = "com.XX.XX.xy";break;default:return;}PlayerSettings.bundleVersion = inputText;for(int i=0;i<icon.Length;i++){icon[i] = (Texture2D)Resources.LoadAssetAtPath(iconPath+i+".png",typeof(Texture2D));}PlayerSettings.SetIconsForTargetGroup(targetGroup,icon);FileUtil.ReplaceFile(iconPath+"defaultIcon.png", "Assets/XX/Icon/normal/defaultIcon.png");//==================这里是比较重要的东西=======================//开始Build场景,等待吧~Debug.Log ("start build:"+name);GenericBuild(SCENES, target_dir + "/" + target_name, buildTarget,BuildOptions.AcceptExternalModificationsToPlayer);}static void GenericBuild(string[] scenes, string target_dir, BuildTarget build_target, BuildOptions build_options){EditorUserBuildSettings.SwitchActiveBuildTarget(build_target);EditorUserBuildSettings.appendProject = true;string res = BuildPipeline.BuildPlayer(scenes,target_dir,build_target,build_options);if (res.Length > 0) {throw new Exception("BuildPlayer failure: " + res);}}}需要注意的两个小点是1.<span style="font-family: Arial, Helvetica, sans-serif;">EditorUserBuildSettings.appendProject = true;</span>这句话是打出来的xcode工程在原工程的基础上以append的形式追加,而不写默认就是replace的,那些设置与引用的sdk就都白弄了。

光有这句代码并不能实现append的效果,还需要这句:

因害怕失败而不敢放手一搏,永远不会成功

unity ios渠道批量打包以及需要注意的两个小点

相关文章:

你感兴趣的文章:

标签云: