背景
通過Unity3d生成Xcode工程后:
打開 Unity-iPhone.xcodeproj,每次都需要手動添加一些配置選項,比如
-
需要添加項目中使用的系統庫
所以就需要每次都手動添加系統庫:
-
bitcode配置
低版本的unity(5.3.2以下)是不支持bitcode的,但是高版本的Xcode(7.0以上)默認是支持bitcode,這樣他們就有沖突
所以就需要每次都關閉bitcode
-
HTTP的支持
iOS9后,默認只支持HTTPS的網絡請求,那么HTTP怎么辦?所以就需要每次都手動修改ATS
-
其他項目配置
這樣問題就來了:
- 如果配置太多,修改的地方太多,產品使用起來就相當不方便
- 每次build后,都需要重新配置,太浪費時間了
所以希望能有一個自動配置的方式,那就再好不過了。
解決方案:
這里有一個開源的項目:XUPorter,a dependency porter from Unity to Xcode。
XUPorter是一個開源的Unity3D編譯Xcode工程的依賴管理工具。它能夠在Unity3D生成Xcode工程文件后,根據配置文件自動添加依賴庫和引用文件的工具。它使用PostProcessBuild標簽,在編寫后尋找配置文件并修改Xcode工程文件,完全運行于Unity3D編輯器中,而不需要涉及PostprocessBuildPlayer的腳本編寫和調試,十分方便。
XUPorter的適用版本Unity3.5及以上,以及Xcode4.x以上。(Unity4.x及Xcode5中亦能工作正常)
原理
在Unity3.5中,加入了一個很棒的標簽——[PostProcessBuild],被該標簽標注的函數將自動在build player后被調用,這為大家提供了一個不需要用腳本和命令行就能添加或修改編譯得到的工程的絕好的入口。
從上面可以看到,XUPorter是從Unity3.5開始支持的,支持到Xcode4.x和Xcode5,并且作者幾年前已經開始不維護了,所以對于新的版本,我們需要做一些修改
-
XUPorter標準的配置
添加動態鏈接庫(僅僅限于dylib文件, Xcode7的tbd不支持),添加frameworks,以及"linker_flags"這些常用的配置都有了,但Xcode7后的新特性并不支持.
XUPorter常量定義
-
bitcode
Xcode7出現的bitcode特性,Unity5.3.2版本才開始支持,所以在之前的版本需要主動設置為NO。
效果如下:
HTTP
Unity 5.2.1開始支持HTTP的設置,在之前的版本,需要修改Plist文件,主動添加上HTTP的支持
手動添加方式
(1) 在Info.plist中添加NSAppTransportSecurity
類型Dictionary
。
(2) 在NSAppTransportSecurity
下添加NSAllowsArbitraryLoads
類型Boolean
,值設為YES
XUPorter的源代碼,XCPlist文件在windows下運行會crash,所以最好都在MAC下操作。再mod文件中添加對HTTP的設置
-
其他配置選項
效果如下:
注意事項:
- XUPorter必須在MAC下運行,因為自動添加的framework、tbd路徑等,只有在MAC下才能配置正確
- Unity5后,舊的XUPorter代碼在projmods文件的 "libs"中添加“libz.tbd”不起效果,需要在"linker_flags"中添加"-lz"才行;不過新的XUPorter代碼已經添加了對tbd文件的支持,由于其他作者的努力。
- 對里面Bool類型的設置,也是字符串的形式, 大寫的"YES"對應Yes;大寫的"NO"對應No
4.Unity中如果選擇mono的話,能捕獲除零異常,NullReferenceException由于會觸發iOS底層的signal異常,所以APP會崩潰;但如果是IL2CPP模式,NullReferenceException能通過C#捕獲,程序不會崩潰,除零異常不會觸發。 - unity5.0.1: Default scripting backend is set to IL2CPP on iOS
-
unity在OSX El Capitan(10.11)下,build iOS項目時會crash
官方說是在 4.6.9已經修復,但在5.0.0以及接下來的多個版本還是存在這個問題,unity5后到底哪個版本修復了,版本太多無法驗證,最新的5.3.4是OK的。
iOS: Fixed crash while building iOS project on El Capitan.
參考:
- Unity3D研究院之IOS全自動編輯framework、plist、oc代碼
- http://project.onevcat.com/
- https://github.com/onevcat/XUPorter
- https://onevcat.com/2012/12/xuporter/
- xcode工程文件格式(Xcode Project File Format)詳解
踩
0