Unity的IOS匯出工程配置工具xcodeapi
在把Unity打包成IOS安裝包是,經常需要自動化設定匯出工程的各項配置。
在Unity 4.x時代,有個常用的工具叫XUPorter,在Unity 5.x之後,Unity官方提供了另外一套工具,叫做xcodeapi,應為是官方維護的,所以在後期維護上可以更放心,所以推薦使用。
其實,這個工具的工作原理並不複雜,利用的是Unity工作的一個固定流程:Unity在匯出工程之後,會去繼續搜尋並執行被標記為[PostProcessBuildAttribute]的方法,而對於Unity匯出的IOS工程,所有的配置資訊都會被記錄在一個固定名稱的檔案裡面,其中一個是匯出工程目錄下的 Unity-iPhone.xcodeproj/project.pbxproj,是以json格式儲存的文字檔案,所有的Build Setting項都在這個檔案裡面;另外一個叫Info.plist,是個xml格式的檔案。所以,這個工具就是提供了json和xml檔案操作的能力,和幾個特定的介面,用於更改指定配置項的內容。
明確這一點之後,使用起來應該就可以更有數了。使用方法很簡單,只要把工程檔案下載下來,把裡面的xcode目錄放到你工程的某個Editor目錄下,然後在裡面新增一個標記為PostProcessBuildAttribute的方法,在這個方法裡面修改你的xcode工程配置就可以了,例如下面的類,也放在Editor目錄下,類名隨便取:
public class ProjectPostProcess { [PostProcessBuildAttribute(1)] public static void OnPostProcessBuild(BuildTarget buildTarget, string pathToBuiltProject) { // 只處理IOS工程, pathToBuildProject會傳入匯出的ios工程的根目錄 if (buildTarget != BuildTarget.iOS) return; // 建立工程設定物件 var projectPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject project = new PBXProject(); project.ReadFromFile(projectPath); string targetGuid = project.TargetGuidByName("Unity-iPhone"); // 修改BITCODE設定的例子 project.SetBuildProperty(targetGuid, "ENABLE_BITCODE", "NO"); // 修改後的內容寫回到配置檔案 File.WriteAllText(projectPath, project.WriteToString()); // 修改Info.plist的示例 var plistPath = Path.Combine(pathToBuiltProject, "Info.plist"); var plist = new PlistDocument(); plist.ReadFromFile(plistPath); // 增加字串型別的設定 plist.root.SetString("fieldname", "value"); // 修改後的內容寫回到檔案Info.plist plist.WriteToFile(plistPath); } }
一個日本人寫了一個包含更多示例用法的檔案,在:
關於這個方法的屬性,網上的有些例子上寫的是PostProcessBuild,其實只是PostProcessBuildAttribute的簡寫,意義是一樣的,不需要糾結。
不過這個工具相比XUPorter,沒有提供針對某類build型別的修改,比如,希望對debug和release版本的工程設定不同的配置,xcodeapi就做不了。不過,好像也不需要這樣配置,一次匯出很少有需求要同時輸出debug和release版本。如果有理解錯誤的地方,歡迎指正。