一.目的
項(xiàng)目里有A.B.C三個(gè)庫(kù)的時(shí)候.
想用cocopods集成三方庫(kù).
就需要每個(gè)庫(kù)都通過(guò)cocopods來(lái)集成.
個(gè)人強(qiáng)迫癥.感覺(jué)很不爽.
最后看見(jiàn)大神的一個(gè)做法.
(1) 新建一個(gè)靜態(tài)庫(kù).
(2) 讓這個(gè)GXPodLinker靜態(tài)庫(kù)通過(guò)cocopods集成你想要的三方庫(kù).
(3) 將這個(gè)GXPodLinker靜態(tài)庫(kù)與三方庫(kù)一起打成一個(gè) all_in_one.a靜態(tài)包.
這個(gè)all_in_one.a靜態(tài)包就包含了所有三方庫(kù)的.o文件.
(4) 創(chuàng)建一個(gè)動(dòng)態(tài)庫(kù)D作為all_in_one.a靜態(tài)包的殼.
動(dòng)態(tài)庫(kù)D編譯出來(lái)的framework就可以作為一個(gè)公用組件放在工程里使用了.
二.具體實(shí)現(xiàn)步驟
1.創(chuàng)建動(dòng)態(tài)庫(kù)GXPodContainer
2.在GXPodLinker目錄下創(chuàng)建GXPodLinker靜態(tài)庫(kù).如下圖目錄結(jié)構(gòu)
3.在GXPodLinker目錄下創(chuàng)建Podfile.并填寫(xiě)依賴的三方庫(kù).
4.運(yùn)行pod install命令.
5.打開(kāi)GXPodLinker.xcworkspace.
6.在build phases/Link Binary With Libraries里添加你依賴的三方庫(kù).如圖.
7.創(chuàng)建Aggregate
7.1.點(diǎn)擊下圖加號(hào)
7.2.選擇Aggregate
7.3.創(chuàng)建自定義腳本
7.4.填寫(xiě)要運(yùn)行的腳本
7.5.腳本如下.需要放在GXPodLinker工程目錄下才能被找到.
7.6.將target切換到GXPodLinkerShell.并運(yùn)行.就可以生成all_in_one.a靜態(tài)包了.
腳本會(huì)把a(bǔ)ll_in_one.a放在GXPodLinker工程目錄下的lib文件夾
8.打開(kāi)GXPodContainer工程.將all_in_one.a靜態(tài)包拖入GXPodContainer工程.如下圖
9.將all_in_one.a包link到工程
下圖中還link了libz.tbd和libsqlite3.tbd是因?yàn)閍ll_in_one.a靜態(tài)包里的文件需要依賴.
10.將三方庫(kù)的頭文件賦值到include文件夾目錄下
10.1.如下圖創(chuàng)建腳本
10.2.填寫(xiě)如下腳本
下圖中的GXPodLinker需要改成你創(chuàng)建的靜態(tài)庫(kù)殼的工程名
10.3.修改other linker flags
為什么修改見(jiàn)
注意3
10.4.將GXPodContainer工程拖入你的主工程既可使用剛才你添加的三方庫(kù)類(lèi)了.
二.注意
1.靜態(tài)庫(kù)安裝cocopods時(shí)必須使用靜態(tài)庫(kù)導(dǎo)入.即Podfile文件里需要注釋掉use_frameworks!
2.靜態(tài)庫(kù)通過(guò)cocopods導(dǎo)入三方庫(kù)后.需要在Build Phases -> Link Binary With Libraries 里添加你所依賴的三方庫(kù).a >>> 很關(guān)鍵!!! 很關(guān)鍵!!! 很關(guān)鍵!!! 重要的事說(shuō)三遍以上.
3.將all_in_one.a靜態(tài)包拖入動(dòng)態(tài)庫(kù)A使用時(shí).動(dòng)態(tài)庫(kù)必須設(shè)置other linker flags 為 -ObjC. (關(guān)于other linker flags見(jiàn)other linker flags)
4.此時(shí)編譯動(dòng)態(tài)庫(kù)A.工程可能會(huì)報(bào)錯(cuò).根據(jù)錯(cuò)誤link對(duì)應(yīng)的系統(tǒng)庫(kù)即可.(因?yàn)榭赡苋綆?kù)需要依賴的系統(tǒng)庫(kù)你沒(méi)導(dǎo)入)
三.實(shí)現(xiàn)好的工程庫(kù)地址
使用方法請(qǐng)見(jiàn)該庫(kù)的 README.md