背景
通過(guò)Unity3d生成Xcode工程后:
打開(kāi) Unity-iPhone.xcodeproj幌蚊,每次都需要手動(dòng)添加一些配置選項(xiàng),比如
-
需要添加項(xiàng)目中使用的系統(tǒng)庫(kù)
所以就需要每次都手動(dòng)添加系統(tǒng)庫(kù):
-
bitcode配置
低版本的unity(5.3.2以下)是不支持bitcode的闲礼,但是高版本的Xcode(7.0以上)默認(rèn)是支持bitcode芒澜,這樣他們就有沖突
所以就需要每次都關(guān)閉bitcode
-
HTTP的支持
iOS9后,默認(rèn)只支持HTTPS的網(wǎng)絡(luò)請(qǐng)求骇窍,那么HTTP怎么辦祥诽?所以就需要每次都手動(dòng)修改ATS
-
其他項(xiàng)目配置
這樣問(wèn)題就來(lái)了:
- 如果配置太多,修改的地方太多,產(chǎn)品使用起來(lái)就相當(dāng)不方便
- 每次build后身腻,都需要重新配置产还,太浪費(fèi)時(shí)間了
所以希望能有一個(gè)自動(dòng)配置的方式,那就再好不過(guò)了嘀趟。
解決方案:
這里有一個(gè)開(kāi)源的項(xiàng)目:XUPorter脐区,a dependency porter from Unity to Xcode。
XUPorter是一個(gè)開(kāi)源的Unity3D編譯Xcode工程的依賴管理工具她按。它能夠在Unity3D生成Xcode工程文件后,根據(jù)配置文件自動(dòng)添加依賴庫(kù)和引用文件的工具牛隅。它使用PostProcessBuild標(biāo)簽,在編寫(xiě)后尋找配置文件并修改Xcode工程文件,完全運(yùn)行于Unity3D編輯器中,而不需要涉及PostprocessBuildPlayer的腳本編寫(xiě)和調(diào)試,十分方便尤溜。
XUPorter的適用版本Unity3.5及以上,以及Xcode4.x以上倔叼。(Unity4.x及Xcode5中亦能工作正常)
原理
在Unity3.5中汗唱,加入了一個(gè)很棒的標(biāo)簽——[PostProcessBuild]宫莱,被該標(biāo)簽標(biāo)注的函數(shù)將自動(dòng)在build player后被調(diào)用,這為大家提供了一個(gè)不需要用腳本和命令行就能添加或修改編譯得到的工程的絕好的入口哩罪。
從上面可以看到授霸,XUPorter是從Unity3.5開(kāi)始支持的,支持到Xcode4.x和Xcode5际插,并且作者幾年前已經(jīng)開(kāi)始不維護(hù)了碘耳,所以對(duì)于新的版本,我們需要做一些修改
-
XUPorter標(biāo)準(zhǔn)的配置
添加動(dòng)態(tài)鏈接庫(kù)(僅僅限于dylib文件, Xcode7的tbd不支持)框弛,添加frameworks辛辨,以及"linker_flags"這些常用的配置都有了,但Xcode7后的新特性并不支持.
XUPorter常量定義
-
bitcode
Xcode7出現(xiàn)的bitcode特性瑟枫,Unity5.3.2版本才開(kāi)始支持斗搞,所以在之前的版本需要主動(dòng)設(shè)置為NO。
效果如下:
HTTP
Unity 5.2.1開(kāi)始支持HTTP的設(shè)置慷妙,在之前的版本僻焚,需要修改Plist文件,主動(dòng)添加上HTTP的支持
手動(dòng)添加方式
(1) 在Info.plist中添加NSAppTransportSecurity
類型Dictionary
膝擂。
(2) 在NSAppTransportSecurity
下添加NSAllowsArbitraryLoads
類型Boolean
,值設(shè)為YES
XUPorter的源代碼虑啤,XCPlist文件在windows下運(yùn)行會(huì)crash,所以最好都在MAC下操作架馋。再mod文件中添加對(duì)HTTP的設(shè)置
-
其他配置選項(xiàng)
效果如下:
注意事項(xiàng):
- XUPorter必須在MAC下運(yùn)行,因?yàn)樽詣?dòng)添加的framework狞山、tbd路徑等,只有在MAC下才能配置正確
- Unity5后,舊的XUPorter代碼在projmods文件的 "libs"中添加“l(fā)ibz.tbd”不起效果叉寂,需要在"linker_flags"中添加"-lz"才行;不過(guò)新的XUPorter代碼已經(jīng)添加了對(duì)tbd文件的支持萍启,由于其他作者的努力。
- 對(duì)里面Bool類型的設(shè)置,也是字符串的形式, 大寫(xiě)的"YES"對(duì)應(yīng)Yes;大寫(xiě)的"NO"對(duì)應(yīng)No
4.Unity中如果選擇mono的話办绝,能捕獲除零異常伊约,NullReferenceException由于會(huì)觸發(fā)iOS底層的signal異常姚淆,所以APP會(huì)崩潰;但如果是IL2CPP模式,NullReferenceException能通過(guò)C#捕獲屡律,程序不會(huì)崩潰腌逢,除零異常不會(huì)觸發(fā)。 - unity5.0.1: Default scripting backend is set to IL2CPP on iOS
-
unity在OSX El Capitan(10.11)下超埋,build iOS項(xiàng)目時(shí)會(huì)crash
官方說(shuō)是在 4.6.9已經(jīng)修復(fù)搏讶,但在5.0.0以及接下來(lái)的多個(gè)版本還是存在這個(gè)問(wèn)題,unity5后到底哪個(gè)版本修復(fù)了霍殴,版本太多無(wú)法驗(yàn)證媒惕,最新的5.3.4是OK的。
iOS: Fixed crash while building iOS project on El Capitan.
參考:
- Unity3D研究院之IOS全自動(dòng)編輯framework来庭、plist妒蔚、oc代碼
- http://project.onevcat.com/
- https://github.com/onevcat/XUPorter
- https://onevcat.com/2012/12/xuporter/
- xcode工程文件格式(Xcode Project File Format)詳解
踩
0