iOS 開發中經常使用到第三方 SDK,經常是打包成 .a 文件,我們稱之爲靜態庫,所以自然也就有了動態庫.
靜態庫 一般以 .a 或 .framework 結尾 動態庫 以.dylib 和 .framework結尾. 靜態庫:鏈接時,靜態庫會被完整地複製到可執行文件中, 被多次使用就有多份冗餘拷貝. 動態庫:鏈接時不復制,程序運行時由系統動態加載到內存,供程序調用,系統只加載一次,多個程序共用,節省內存.但項目中如果使用了自制的動態庫,不能被上傳到 AppStore.蘋果只能使用其提供的動態庫.
如何製作靜態庫?
1. 創建一個工程
2.新創建工程
3. 刪除系統創建的 staticLibTest.h 和 staticLibTest.m 文件,導入自己想要打包的文件. eg: YAdchiveTest1.h
4.可以看到此時的 libStaticLibTest.a 文件是紅色的, 選擇 IOS Device , command + B 編譯.
5.編譯完成 libStaticLibTest.a 文件 由紅色變爲色.此時說明真機版的 .a 文件打包完成. 打包之前可在如下圖位置選擇需要暴露出來的頭文件.
6. 生成模擬器運行的 .a 文件.選擇模擬器. command + B 編譯.此時可生成模擬器對應的 .a 文件. 注意: 運行在哪個模擬器上生成的 .a 文件就只能運行在其對應的 cpu 架構上.
cpu 架構 : iPhone 4s 之前: i386 5 之後是 x86_64. 要想生成通用的 .a 文件,如下圖設置,把 YES --> NO. command + B 運行.
7. 右鍵 工程下的 Products 文件夾下的 .a 文件 --> show inFinder.則可以看到剛纔編譯的兩個文件. Debug-iphoneos 爲真機的, Debug-iphonesimulator 爲模擬器的.
8. 打開終端. 進入到 Debug-iphoneos 的上級目錄,cd xxxx .進入到文件夾後 輸入 : lipo -info + .a文件路徑.即可查看對應.a 文件所支持的 cpu 架構. 如下圖.
9. 爲了在模擬器和真機上同一個 .a 文件都可以運行,避免真機和模擬器導入兩個.a 文件,可以將模擬器和真機的兩個 .a 文件合爲一個文件.
終端鍵入命令: lipo -create 真機.a絕對路徑 模擬器.a 絕對路徑 -output/Users/電腦名/Desktop/xxxx.a 合成文件存放桌面
10. 測試 new 一個新工程,導入 .a 以及生成 .a 是的文件中的 .h 文件
11. 在 appDelegate 中運行如下
至此,一個靜態庫的基本製作就完成了.