金田html
前言
Apple 的WWDC所發佈內容在給你們帶來驚喜之際,給各位iOS開發的同仁卻也帶來了不一樣程度的麻煩。首先不講新功能,就單指原來老版本的項目升級、代碼升級,就是一堆問題,並且是不得不面臨的問題。下面就跟着筆者一塊兒來回顧下,這次在項目升級過程當中,所遇到的各個問題點,以及解決方案,與各位已經作過和正在作iOS代碼升級的同仁共勉,也給各位將要作Xcode 7和iOS9兼容的同仁以參考。
開發環境安裝
本來運行得好好的項目,要升級Xcode7,首先就得安裝Xcode7,具體的能夠從開發者官網下載(目前最新版本是Xcode_7_GM_seed).下載好後,就雙擊下載好的dmg包,固然,前提仍是須要咱們的Mac環境升級到Mac OS 10.10.4+(圖1.1),就能夠打開Xcode安裝鏡像,如圖1.2:緩存
圖1.1 Mac OS 更新示意圖安全
圖1.2 Xcode 7 GM安裝服務器
接下來,咱們只要將圖1.1所示的Xcode拖動到指定文件夾,便可完成安裝,接下來,咱們只要雙擊運行便可。
開發環境運行
各位可能會以爲,筆者在此還要講開發環境的運行,是否是畫蛇添足。其實並不是如此,綜合筆者這幾年iOS開發經驗的總結,運行新版本,特別是測試版本的Xcode是一個須要格外當心的事情,講起來都是血淚史。
在運行 GM 版本Xcode時,咱們須要特別注意如下幾個方面:
- 在運行GM版本Xcode前,務必要退出原來正式版本Xcode(如Xcode 6.4)
- 在運行GM版本Xcode時,務必要避免雙擊打開工程文件(也是爲了不新舊版本同時運行)。
- 若是要切換回原來版本時,必定要先退出GM版本,並且儘量將Xcode的緩存數據清除。
固然,可能在實際的過程當中,仍是會有很多朋友就這麼幹了,固然,若是咱們App後續只須要使用新版本Xcode,天然是沒有太大關係,只是對於還須要用舊版原本開發或者發佈App的朋友,可能就會有點麻煩,可能在用舊版本編譯App在運行的時候,就會出現各類詭異的現象(如打印信息明明是正常,App運行邏輯卻不正常等)。這時,可能你們要考慮的就是把Xcode刪除掉,從新來過,甚至是重裝操做系統。固然,不知道是否有朋友有更好的方案。不過筆者是再也不想經歷這種事情了。
App 項目運行
待項目運行,首先會碰到的問題就是配置兼容,會出現以下錯誤網絡
圖2.1 BitCode 錯誤app
當咱們看到App編譯報錯的時候,首先想項目不兼容Xcode7,再仔細一看less
ld: ‘/Volumes/MacintoshHD/…/AnimationDesk Universal/Sources/AnimaitonDesk Universal/Classes/Supporting Files/GoogleLibrary/libGoogleAnalyticsServices.a(TAGDataProvider.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
其中 ENABLE_BITCODE 吸引了咱們的注意,看結合其它的描述信息,基本能夠肯定是咱們使用的第三方靜態庫(.a)不支持BitCode,固然,咱們對應就有以下兩種方案來解決:
方法一:更新對應的第三方靜態庫(如今更新的靜態庫,基本都能支持BitCode)
方法二:能夠將Xcode7默認開啓的BitCode功能關閉,如圖2.2所示ide
圖2.2 關閉BitCode 操做示意圖測試
固然,除了上面的問題外,當咱們在添加Framework的時候,會發現此前導入的動態連接庫(dylib)他部變成了紅色,如圖2.3所示,所幸的是,就算不替換成Xcode 7新的動態庫文件(.tbd),仍然能夠正常運行.圖2.3 動態連接庫丟失示意圖ui
最後,部分App在編譯的時候,可能還會收到以下報錯,小編也遇到過一次
All interface orientations must be supported unless the app requires full screen.
看到這句提示,就是說App默認是有開啓了多任務功能,而多任務功能是須要App支持全部方向,若是咱們App是有須要支持多任務,則須要開啓App對各個方向(上、下、左、右)的支持;若是App不須要開啓多任務,則只須要將以下示意圖的 requires full screen 勾選上就ok(如圖2.4)。
圖2.4 勾選 Requires full screen示意圖
不出意外,接下來,App應該是能正常編譯運行(小編的AnimationDesk Cloud接下來是能夠正常運行),但緊接着,發生了更詭異的事情,之前的的網絡訪問,如今徹底訪問不通;你們也許會以爲這多是服務器掛了,或是外網被牆了,小編最初也是這麼想的,但事實上,服務器(從Safari)仍是能照常被訪問,只是App訪問不了,因而後來聯想到iOS9 WWDC講到的網絡數據傳輸安所有分,通過一翻折騰,最終,網絡訪問的部分也恢復了正常。
其實只要在App的Info.plist裏面加入以下信息就能夠
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
添加成功後的示意圖以下圖(圖2.4)
圖2.4 添加Transport Security 示意圖
其它事項
可能還有部分朋友跟小編同樣,有碰到另一個現象,就是UITextView,不管怎麼設置它的textColor顯示的總會是黑色,小編已找到具體的原理,準確地講,應該是Xcode的一個Bug。
當小編在App開發時,在Xib上面設置過UITextView的背景色(BackgroundColor)爲非默認顏色(WhiteColor)時,UITextView的文字顏色(textColor)不管怎麼設置,都將會是黑色,若是想要顏色值正常,能夠在設置好文本後,再重設一次顏色便可正常。