標籤:
前言
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編譯報錯的時候,首先想項目不相容Xcode7,再仔細一看
| 1 |
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所示
圖2.2 關閉BitCode 操作
當然,除了上面的問題外,當我們在添加Framework的時候,會發現此前置入的動態連結程式庫(dylib)他部變成了紅色,2.3所示,所幸的是,就算不替換成Xcode 7新的動態庫檔案(.tbd),仍然可以正常運行.
圖2.3 動態連結程式庫丟失
最後,部分App在編譯的時候,可能還會收到如下報錯,小編也遇到過一次
| 1 |
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裡面加入如下資訊就可以
| 1 2 3 4 5 |
<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)無論怎麼設定,都將會是黑色,如果想要顏色值正常,可以在設定好文本後,再重設一次顏色即可正常。
iOS項目更新之升級Xcode7 & iOS9