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