將多個三方庫打包成一個動態庫

一.目的

項目里有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

庫地址: https://github.com/moonbeammm/GXPodContainer.git

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容