[程序員日記]iOS靜態(tài)庫(kù)制作

簡(jiǎn)介##

在企業(yè)開(kāi)發(fā)中,一些核心技術(shù)或者常用框架,出于安全性和穩(wěn)定性的考慮,不想被外界知道,所以會(huì)把核心代碼打包成靜態(tài)庫(kù),只暴露頭文件給程序員使用(比如:友盟、百度地圖等第三方的sdk)
靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的存在形式
? 靜態(tài)庫(kù):.a 和 .framework
? 動(dòng)態(tài)庫(kù):.dylib(xcode7以上時(shí).tbd) 和 .framework

靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的區(qū)別##

? 靜態(tài)庫(kù):鏈接時(shí),靜態(tài)庫(kù)會(huì)被完整地復(fù)制到可執(zhí)行文件中,被多次使用就有多份冗余拷貝
? 動(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)存

修改:之前說(shuō)##項(xiàng)目中如果使用了動(dòng)態(tài)庫(kù),會(huì)蘋果拒接##,但在Xcode 6(iOS 8)之后可以使用動(dòng)態(tài)庫(kù), 在官方文檔中也有了說(shuō)明(iOS developers can now create dynamic frameworks),實(shí)際上不僅僅是iOS 8及之后可以使用動(dòng)態(tài)庫(kù),低版本的也可以使用,只不過(guò)低版本會(huì)需要手動(dòng)的使用dlopen()加載下。動(dòng)態(tài)庫(kù)上架會(huì)有一些機(jī)審的規(guī)則需要注意下,至于能不能上架,答案是肯定的。

在此,感謝 MrChens 的提醒。

靜態(tài)庫(kù)文件的版本(4種)##

? 真機(jī)-Debug版本
? 真機(jī)-Release版本
? 模擬器-Debug版本
? 模擬器-Release版本

Debug(調(diào)試)版本

  1. 含完整的符號(hào)信息,以方便調(diào)試
  2. 不會(huì)對(duì)代碼進(jìn)行優(yōu)化

Release(發(fā)布)版本

  1. 不會(huì)包含完整的符號(hào)信息
  2. 執(zhí)行代碼是進(jìn)行過(guò)優(yōu)化的
  3. 大小會(huì)比Debug版本的略小
  4. 在執(zhí)行速度方面,Release版本會(huì)更快些(但不意味著會(huì)有顯著的提升)

在開(kāi)發(fā)中都打包Release(發(fā)布)版本,提供外界

制作靜態(tài)庫(kù)##

1.新建靜態(tài)庫(kù),選擇新建Cocoa Touch Static Library文件

新建靜態(tài)庫(kù)

2.新建文件后,會(huì)自動(dòng)生成與文件名相同的.h和.m文件,可在其中編輯,也將其刪除新建

新建文件

3.在Buiding Phases中新建Header Phase,將文件中所有.h文件添加至其中

添加.h文件會(huì)在project中,將其全部選中拖入public中

新建Header Phase

4.打開(kāi)Products文件,會(huì)看到.a文件,此時(shí).a文件是不存在故為紅色的,選擇設(shè)備為ios 設(shè)備編譯(Command+B)生成支持真機(jī)的Debug版本,選擇ios模擬器變異 ,生成支持模擬器的Debug版本,此時(shí).a文件變?yōu)楹谏?/p>

生成Debug版本

5.將文件show in finder,會(huì)看到對(duì)應(yīng)的靜態(tài)庫(kù),里面包括.a文件和所有的.h文件,將其內(nèi)容導(dǎo)入新的工程中即可使用。

靜態(tài)庫(kù)

6.合并靜態(tài)庫(kù),在終端中進(jìn)入對(duì)應(yīng)文件,輸入lipo -create Debug-iphoneos/XXXX.a Debug-iphonesimulator/XXXX.a - output YYYY.a 將XXXX.a靜態(tài)庫(kù)合并成YYYY.a靜態(tài)庫(kù)(如lipo -create Debug-iphoneos/libHTTPRequestLib.a Debug-iphonesimulator/libHTTPRequestLib.a - output HTTPRequest.a)

使用對(duì)應(yīng)的HTTPRequest.a和.h文件即可同時(shí)支持模擬器和真機(jī)。

[注意]生成靜態(tài)庫(kù)是模擬器還是真機(jī),若使用的類型不同會(huì)有相應(yīng)的報(bào)錯(cuò),生成靜態(tài)庫(kù)時(shí)對(duì)應(yīng)的CPU不同也會(huì)有報(bào)錯(cuò)

設(shè)備的CPU架構(gòu)簡(jiǎn)介(補(bǔ)充知識(shí))##

模擬器:
? 4s~5 : i386
? 5s~6plus : x86_64
真機(jī):
? 3gs~4s : armv7
? 5~5c : armv7s (靜態(tài)庫(kù)只要支持了armv7,就可以跑在armv7s的架構(gòu)上)
? 5s~6plus : arm64

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容