看到xcode9出來了后,想體驗下xcode9的新特性雄卷,就把xcode更新到xcode9豪嗽,而且因為xcode9必須要用swift4的版本珠十,所以swift也切換成了swift4.0版本
切換成xcode9和swift4后泥畅,重新編譯荠诬,一大堆錯誤。其實自己寫的代碼部分的error修改還不太復雜位仁,因為swift4的改動并不是很大柑贞,一個一個改就可以了。主要是一些api的deprecated聂抢,自己代碼里面的error很快就改完了钧嘶。
最大的坑是引用的第三方的庫,基本上都會有兼容性的問題琳疏。這個地方吸取的一個教訓是有决,對于上線的項目,還是要延后更新這些新特性轿亮,因為swift語言不支持后向兼容疮薇,基本上所有的第三方庫都需要更新。更坑的是我注,有些你引用的第三方庫的維護者并沒有及時更新,這時候如果不是很重要的庫迟隅,就只能替換方案了但骨。所以引用第三方庫的時候,也需要下智袭,盡量引用活躍度高的開源組件奔缠,以及最近有更新的庫,這樣的維護者一般都會將自己的庫同步到最新的版本吼野。
我使用的是pod引用第三方庫校哎,以下為更新到xcode9的過程中碰到的幾個主要問題:
1,更新一個庫時,github上已經(jīng)更新到了swift4闷哆,在podfile里面修改對應的版本號后腰奋,提示:
None of your spec sources contain a spec satisfying the dependency: ObjectMapper (~> 3.0).
You have either:
out-of-date source repos which you can update with pod repo update or with pod install --repo-update.
mistyped the name or version.
not added the source repo that hosts the Podspec to your Podfile.
主要原因是pod工具的spec文件沒有更新到最新版本,原因可參考鏈接:
http://www.reibang.com/p/1d058d224cad抱怔。這個地方的原因是有些最近更新的swift4相關的代碼劣坊,在本地的pod repo里面沒有鏈接引用,所以需要更新pod repo庫保存的數(shù)據(jù)屈留。
執(zhí)行pod repo update后局冰,再執(zhí)行pod install就可以解決問題
2,pod install在安裝時灌危,podfile.lock會記錄上一次安裝每個庫對應的版本號康二,除非你手動加上版本號,否則就不會更新這個庫到最新的版本勇蝙。
如綠色的was開頭的赠摇,表示這個庫對應的更新了
所以有些庫如果你需要更新到它的最新版本,需要在podfile的語句后面添加版本號浅蚪,如
pod 'AlamofireObjectMapper', '~> 5.0'
如果你想更新所有的庫藕帜,可以直接刪掉podfile.lock文件,再執(zhí)行pod install惜傲,對于沒帶版本號的庫就會更新到最新的版本
其實這兩個問題跟具體的xcode9沒太大關系洽故,主要是pod在使用時碰到的兩個問題
不過,如果大家項目沒有切到xcode9盗誊,其實還是建議切到xcode9和swift4时甚,因為蘋果系統(tǒng)的更新也是一起的,比如iphoneX的模擬器哈踱,如果升級到Xcode9荒适,有些頁面還可以對iphoneX做一些適配。另外ARKit也是必須要升級到xcode9后才能使用开镣。雖然會引入一些麻煩刀诬,但是蘋果系統(tǒng)的新特性如iOS 11等,如果要開發(fā)針對最新系統(tǒng)的應用邪财,也必須得升級到xcode9陕壹。