升級xcode10.2,swift庫相容性問題
最近專案頻頻被拒,也是心情煩躁,最新的被拒理由除了老生常談的5.2.1,就是執行在12.2系統ipad上佈局錯亂的問題了,同樣涉及到了swift版本遷移
你們也知道,17-18年P2P頻頻暴雷,不可避免的,我們做的小額貸款類app也告一段落,從18年9月份便開啟了使用swift開發醫美的生涯,號稱集團19年重點專案,繞不開的圈圈依舊是沒有資質(目前)---心累!!!
本專案純swift開發,當然也用到了一些OC的三方庫,比如SDWebimage、MBProgressHud、環信、支付寶、微信等,當然還有一些半野生的cocoapods整合的git庫,本文就來介紹,升級xcode版本遇到的swift版本庫相容性問題
正題
蘋果的反饋是app執行在最新的ios12.2系統ipad上佈局錯亂,沒辦法,只能將ipad升級到12.2,執行~~~提示需要將xcode升級到10.2(當前10.1),事實上10.2也是最近剛出的,好吧,我升級,然後又遇見了10.2的xcode需要10.14.4的系統版本支援,繼續升級(這裡說下,升級mac os 10.14.4遇到了一些問題,意思是說檔案不完整或者損壞,刪除重新更新),一切準備妥當之後執行專案!
不負眾望!!!先來個警告先!!!

swift版本衝突.png
意思是當前cocoapods整合的EZSwiftExtensions以及DGElasticPullToRefresh這兩個庫支援的是swift3.x,而我們的xcode(10.2)支援的swift版本如下:

xcode10.2支援的swift版本.png
說人話就是,這兩個庫過時了,不能用在xcode10.2上!
ok,開啟我的podfile檔案看看
cd 專案根目錄 open -e podfile

podfile中的庫.jpeg
目前來說,只有這兩個庫在xcode10.2上有問題,先改他倆
首先我們去git上檢視這兩個庫是否有swift4的支援
pod searchEZSwiftExtensions

WechatIMG20103.jpeg
我們發現,專案中使用的是1.11版本,此版本庫最新版本是2.0,複製連結去git上看看,這個2.0新版是否支援swift4

WechatIMG20128.jpeg
excuse me ?我專案中好多佈局用到了這個庫,頓時懵逼,點選Release看看

Release.jpeg

Release_detail.jpg
2.0版本支援swift4,頓時心情舒暢了好多,所以提醒各位,在cocoapods整合的時候一定要再三思量,此庫是否會有人持續維護!!!
同樣的道理pod 搜尋DGElasticPullToRefresh,發現此庫沒有繼續維護,最高支援3.0,幸好專案中用到的比較少,索性直接刪除了
pod 更新如下

替換或刪除不支援的swift庫.jpeg
執行:
pod install

deleteAndUpdate.jpeg
shift+command+option+k,執行專案,報錯如下:

swift_version_unsupported.png
修復此庫的問題如下(選擇swift4):

WechatIMG20147.png
再次執行

WechatIMG20150.jpeg

WechatIMG20152.jpeg
此問題看這裡( https://blog.csdn.net/weiwandaixu_/article/details/88842491 ),
更新pod中的HanyJson到最新版

HanyJson_5.jpeg

HanyJson_4.jpeg
執行
pod install
會顯示
Installing HandyJSON 5.0.0-beta.1 (was 4.2.1 and source changed to `https://github.com/CocoaPods/Specs.git` from `https://github.com/cocoapods/specs.git`)
再次執行專案報了一些用到DGElasticPullToRefresh庫的錯誤,修改過來,繼續執行

某些刪除的庫找不到錯誤.png
意思是專案中有我們沒有刪除乾淨的DGElasticPullToRefresh餘黨!!!
我們搜尋這個庫試試

螢幕快照 2019-04-04 下午1.43.19.png
發現podfile檔案中還是有這個庫,什麼情況???
開啟podfile檔案
發現還真有,刪除

WechatIMG20158.jpeg
執行
pod install pod repo update
至此podfile中的沒刪乾淨的DGElasticPullToRefresh刪完了,然後再刪除.xcodeproj檔案中沒刪乾淨的DGElasticPullToRefresh
找到專案目錄中的. xcodeproj檔案->顯示包內容->雙擊開啟project.pbxproj檔案->command+f->輸入DGElasticPullToRefresh->刪除所有搜尋到的DGElasticPullToRefresh->done儲存

WechatIMG20159.jpeg

WechatIMG20160.jpeg
然後執行
shift+command+k && shift+command+option+k
執行專案
build success!
至此,一些不相容的swift3.x問題得到解決(其他庫如有相似問題,按照上面步驟解決就好了)
專案能運行了,可是我執行在自己的ios12.2系統ipad上佈局並沒有錯亂啊,蘋果稽核人員是在跟我開玩笑?他們遇見了我十年都難復現的問題?運行了十幾遍佈局並無問題啊~啊~啊,就在我塊崩潰的時候bug重現了,將ipad橫屏放置執行專案,果真錯亂了,才發現我犯了一個低階錯誤,如下:

general_portrait.jpeg

info_portrait.jpeg
除了general中設定只支援豎屏之外,info.plist中也應該做此單選portrait設定,如圖刪除相應的模組就好了,至此,佈局錯亂的問題得到解決!