庫(kù)的種類
-
開(kāi)源庫(kù)
-
閉源庫(kù)
閉源庫(kù)分類
-
動(dòng)態(tài)庫(kù)
- 鏈接時(shí)不復(fù)制狸涌,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存中卜壕,供程序調(diào)用寥掐。
- 系統(tǒng)只加載一次靴寂,多個(gè)程序共用,節(jié)省內(nèi)存召耘。(使用自制動(dòng)態(tài)庫(kù)的程序不能上傳Appstore百炬,WWDC大會(huì)上,蘋(píng)果對(duì)iOS 8開(kāi)放了加載dylib的接口污它,開(kāi)放了動(dòng)態(tài)庫(kù)掛載剖踊,但是很少用)
- eg:*.dylib(iOS9取消了.dylib,使用.tbd替代) 和 *.framework
-
靜態(tài)庫(kù)
- 對(duì)于老舊的MRC實(shí)現(xiàn)的功能衫贬,可以通過(guò)編譯成靜態(tài)庫(kù)文件在ARC環(huán)境下運(yùn)行德澈。
- 方便代碼移植,代碼保密固惯。
- .framework 靜態(tài)庫(kù)制作需要將build settings -> Mach-O Type 設(shè)置成static Library梆造,因?yàn)閒ramework默認(rèn)是動(dòng)態(tài)庫(kù)。
- eg:*.a 和 *.framework
關(guān)于架構(gòu)
-
模擬器架構(gòu):
i386 : 32位 4s和5 x86_64: 64位 5s之后機(jī)型
-
真機(jī)架構(gòu):
armv7 : 32位 4s/4 (靜態(tài)庫(kù)只要支持armv7葬毫,就可以跑在armv7s架構(gòu)上) armv7s: 5/5c arm64 : 64位 5s以后機(jī)型
-
架構(gòu)的兼容:
選擇target -> build active architecture only (只編譯活躍的架構(gòu)) -> NO
廢話不多說(shuō)镇辉,直接上手
-
新建工程
-
-
.h 聲明
-
-
.m 實(shí)現(xiàn)
-
-
靜態(tài)庫(kù)的生成
-
調(diào)試版本 VS 發(fā)布版本
- 調(diào)試版本會(huì)包含完整的符號(hào)信息,以方便調(diào)試
- 調(diào)試版本不會(huì)對(duì)代碼進(jìn)行優(yōu)化
- 發(fā)布版本不會(huì)包含完整的符號(hào)信息
- 發(fā)布版本的執(zhí)行代碼是進(jìn)行過(guò)優(yōu)化的
- 發(fā)布版本的大小會(huì)比調(diào)試版本的略小
- 在執(zhí)行速度方面贴捡,發(fā)布版本會(huì)更快些忽肛,但不意味著會(huì)有顯著的提升
- 查看靜態(tài)庫(kù)支持的架構(gòu)
打開(kāi)終端 : lipo -info 靜態(tài)庫(kù).a
- 查看靜態(tài)庫(kù)支持的架構(gòu)
- 靜態(tài)庫(kù)合并
打開(kāi)終端 : lipo -create 靜態(tài)庫(kù)1.a 靜態(tài)庫(kù)2.a -output 新靜態(tài)庫(kù).a
- 靜態(tài)庫(kù)合并
關(guān)于bitcode
-
什么是bitcode
Bitcode. When you archive for submission to the App Store, Xcode will compile your app into an intermediate representation. The App Store will then compile the bitcode down into the 64 or 32 bit executables as necessary.
當(dāng)我們提交程序到App store上時(shí),Xcode會(huì)將程序編譯為一個(gè)中間表現(xiàn)形式(bitcode)烂斋。然后App store會(huì)再將這個(gè)botcode編譯為可執(zhí)行的64位或32位程序屹逛。 -
哪些需要支持bitcode
iOS,bitcode是可選的汛骂。
watchOS罕模,bitcode是必須的。
Mac OS不支持bitcode香缺。 -
如何支持bitcode
- 1,選擇靜態(tài)庫(kù)對(duì)應(yīng)的target ->build settings 手销,搜索other c flags ,添加
-fembed-bitcode
- 1,選擇靜態(tài)庫(kù)對(duì)應(yīng)的target ->build settings 手销,搜索other c flags ,添加
這樣編譯出來(lái)的靜態(tài)庫(kù)就支持bitcode图张。
-
如何檢驗(yàn)是否已經(jīng)支持bitcode
進(jìn)入到.a所在的目錄锋拖,使用以下命令:
lipo -info xxxx.a
lipo -thin arm64 xxxx.a -output xxxx-arm64.a
ar -x xxxx-arm64.a诈悍,這三步完成后會(huì)在當(dāng)前文件夾下生成對(duì)應(yīng)的.o文件
otool -l xxxx.o | grep bitcode 最后通過(guò)這個(gè),會(huì)輸出sectname __bitcode字樣兽埃,說(shuō)明該靜態(tài)庫(kù)支持bitcode侥钳。
當(dāng)你按以上方法可以寫(xiě)出自己第一個(gè)靜態(tài)庫(kù)的時(shí)候,你就會(huì)發(fā)現(xiàn)一個(gè)缺點(diǎn)柄错,調(diào)試很不方便舷夺,想著如果能看到源碼調(diào)試的話就好了,所以后邊我們講如何真正方便的調(diào)試靜態(tài)庫(kù)售貌。
- 1给猾,新建single view application工程
- 2,新建靜態(tài)庫(kù)target
- 3颂跨,引用靜態(tài)庫(kù)敢伸,不然會(huì)報(bào)錯(cuò)
有不對(duì)的請(qǐng)指正。