其實(shí)滓侍,這個(gè)項(xiàng)目也就頂多一個(gè)月沒有持續(xù)開發(fā)和維護(hù),當(dāng)時(shí)的開發(fā)環(huán)境是xcode7.2搭配iOS9.2的系統(tǒng)烙样,到昨天的結(jié)果就是:在Xcode7.3.1下各種編譯不通過蝶溶。
首先簡(jiǎn)單介紹一下該項(xiàng)目的情況:工程通過Cocoapods 引入了FMDB,SDWebImage赊时,MJRefresh還有其他一些第三方的lib吨铸,然后工程內(nèi)部又放了第三方供應(yīng)商提供的一個(gè)動(dòng)態(tài)鏈接庫(kù)(暫且叫它A.framework),在Xcode7.2 和Cocoapods v0.38.2下?lián)f(shuō)正常使用祖秒,但到我的Xcode7.3.1 + Cocoapods V1.0.1下诞吱,就報(bào)A.framework錯(cuò)誤。
開始排查錯(cuò)誤竭缝,第一步房维,記得前段時(shí)間遇到一個(gè)問題,是在Cocoapods V1.0.1下pod install后造成的編譯錯(cuò)誤抬纸,所以咙俩,先降級(jí)Cocoapods,降級(jí)到 V0.38.2:
$ gem uninstall cocoapods -v 1.0.1
$ gem install cocoapods -v 0.38.2
(注:這塊如果你安裝了多個(gè)版本的Cocoapods的話,可以通過 pod _0.38.2_ install
的方式使用特定版本進(jìn)行install阿趁。)
完成后膜蛔,使用pod install后還是錯(cuò)誤,所以猜測(cè)應(yīng)該跟A.framework本身有關(guān)了脖阵,然后就是與供應(yīng)商聯(lián)系皂股,他們確認(rèn)A.framework在Xcode7.3上有編譯錯(cuò)誤問題并且已經(jīng)更新了framework,然后提供了新的下載鏈接命黔,我就順著鏈接去下載了呜呐,等到解壓后,徹底傻眼了悍募,大版本變化已經(jīng)好幾個(gè)版本蘑辑,接口API都變了,而且A.framework又依賴了FMDB.framework,并且在新的UI GUI里邊坠宴,竟然直接放置了一份SDWebImage和MJRefresh的.a靜態(tài)庫(kù)洋魂,修改的過程逐漸變得有意思起來(lái)。
當(dāng)把新的framework和它的GUI文件拷貝(雖然這種copy的方法很不爽啄踊,但是供應(yīng)商沒有Cocoapods的repo忧设,只能呵呵了)到工程編譯后,必然出現(xiàn)文件沖突的問題颠通,下來(lái)需要一步步解決址晕。
首先,查看代碼后顿锰,去掉了A.framework GUI中的MJRefresh的lib谨垃,因?yàn)樵谖覀兊臉I(yè)務(wù)場(chǎng)景中,A的GUI沒有下拉刷新的需求硼控,直接去掉后刘陶,刪除了GUI中下拉刷新邏輯。
然后牢撼,因?yàn)锳中的FMDB.framework是必須的匙隔,所以,只能從Pods這邊動(dòng)手熏版,刪除了FMDB的聲明纷责,在代碼中,將Native代碼中的FMDB使用的地方的頭文件修改成動(dòng)態(tài)鏈接庫(kù)的引用形式撼短,即:#import <FMDB/FMDatabase.h>
,這樣就解決了FMDB的問題再膳。
最后,SDWebImage的情況類似曲横,但是因?yàn)樵贏的GUI文件中喂柒,本來(lái)就是以代碼形式集成,所以,直接刪除了Pods中的SDWebimage即可灾杰。
整個(gè)修改后的工程文件變成了下邊的依賴:
交叉依賴的問題蚊丐,就被解決掉了,工程也能被運(yùn)行起來(lái)吭露。
但是問題并沒完吠撮,在工程啟動(dòng)后,直接crash讲竿,log信息只有 XXX/XXXX/XXX/A.framework Reason: image not found
, google后是因?yàn)锳.framework同時(shí)集成了OC和Swift兩種動(dòng)態(tài)鏈接庫(kù),需要在工程的Build Settings設(shè)置屬性Embedded Content Contains Swift Code = YES
,至此弄屡,工程就妥妥的運(yùn)行起來(lái)题禀。
整個(gè)過程現(xiàn)在來(lái)講比較清晰,但是剛開始接手代碼時(shí)膀捷,沒有準(zhǔn)備思路的時(shí)候迈嘹,就像蒼蠅一樣亂撞,等到真正排查出來(lái)問題的時(shí)候全庸,思路才逐漸清晰起來(lái)秀仲,希望這篇文檔對(duì)大家能夠起到一些開闊思路的作用,還記得之前說(shuō)道的A.framework GUI和API更新的問題么壶笼,我要?dú)g快的去埋這個(gè)坑去了~