一、生成靜態(tài)庫(kù)的大步驟:
-
創(chuàng)建項(xiàng)目選擇靜態(tài)庫(kù)(.a)
Snip20170713_7.png -
設(shè)置需要暴漏的頭文件:TARGETS-->Build Phases-->Copy Files-->把需要暴漏的頭文件添加進(jìn)來(lái)即可
.h文件路徑 分別在模擬器和真機(jī)環(huán)境下編譯(得到模擬器環(huán)境下的靜態(tài)庫(kù),debug版本);

模擬器和真機(jī)切換
二、靜態(tài)庫(kù)的測(cè)試
- 使用模擬器的靜態(tài)庫(kù), 拖入測(cè)試工程。見下圖iPhone6測(cè)試結(jié)果。
- 測(cè)試結(jié)果分析:模擬器iphone6可以成功,5則報(bào)錯(cuò)。
- 模擬器和真機(jī)下的編譯成的靜態(tài)庫(kù)不能共用;
- 模擬器之間,真機(jī)之間,編譯的靜態(tài)庫(kù)也不能共用;
- 主要原因是CPU架構(gòu)不一樣。
- 注意靜態(tài)庫(kù)所支持的架構(gòu)
- 不同機(jī)型的CPU, 對(duì)應(yīng)的架構(gòu)不同;
- 模擬器:
- 4s----5 : i386
- 5s----7Plus : x86_64
- 真機(jī):
- 3gs---4s : armv7
- 5/5c : armv7s(armv7兼容armv7s)
- 5s---7Plus: arm64
- 查看靜態(tài)庫(kù)支持的架構(gòu)
- lipo -info 庫(kù)文件 (1.把庫(kù)文件拖入2.或者進(jìn)入到庫(kù)的文件夾下,輸入庫(kù)名)
- 怎樣一次編譯支持多個(gè)架構(gòu)的的靜態(tài)庫(kù)?
- 問題描述:正常情況下, 需要選中每一個(gè)模擬器進(jìn)行編譯, 生成支持對(duì)應(yīng)架構(gòu)的靜態(tài)庫(kù). 然后合并; 非常蛋疼。
- 解決方案:Build Settings -> Build Active Architecture Only -> NO,(表示不止編譯活躍的架構(gòu),讓所有的架構(gòu)都編譯)
- 對(duì)比Build Active Architecture Only的不同靜態(tài)庫(kù)信息

iPhone6測(cè)試結(jié)果.png
三、靜態(tài)庫(kù)文件的版本
- 調(diào)試版本
- 真機(jī)-Debug版本
- 模擬器-Debug版本
- 特點(diǎn):調(diào)試版本會(huì)包含完整的符號(hào)信息,以方便調(diào)試
- 發(fā)布版本
- 真機(jī)-Release版本
- 模擬器-Release版本
- 特點(diǎn):經(jīng)過優(yōu)化、大小略小、執(zhí)行速度快些但無(wú)顯著提升。
如何生成Debug和Release版本?
項(xiàng)目 -> Edit Scheme -> Run -> Release/Debug 分別進(jìn)行編譯靜態(tài)庫(kù),可以在模擬器和真機(jī)上運(yùn)行,怎么做?
模擬器和真機(jī)CPU構(gòu)架不同,所以沒法同時(shí)運(yùn)行;
-
解決方案:合并
檢測(cè).a的類型:$ lipo -info libCZTools.a
合并.a:lipo -create Debug-iphoneos/libTools.a Debug-iphonesimulator/libTools.a -output libTools.a
-
特點(diǎn):
- 合并.a的好處,開發(fā)過程中既可以在真機(jī)上調(diào)試,也可以在模擬器上調(diào)試;
- 合并.a的壞處,如果靜態(tài)庫(kù)太大,合并打包后,會(huì)非常大,因此很多第三方的靜態(tài)庫(kù)的.a是區(qū)分版本的;
- 今后在使用.a時(shí)一定注意版本。
-
補(bǔ)充:庫(kù)的拆解:
- lipo -thin 架構(gòu)名稱 架構(gòu)路徑 -output 目標(biāo)路徑
- fat庫(kù)的拆解.png



