iOS 生成.a靜態(tài)庫 .framework 靜態(tài)庫

開篇

一直以來用過很多的第三方庫,但是一直沒有深究過他們是怎么做到把功能實(shí)現(xiàn)封裝起來打包成的.a文件.不了解的時(shí)候覺得神秘又酷,了解以后,確實(shí)很酷.但是它不在那么神秘了 ~

首先來說一下庫,分為靜態(tài)庫和動(dòng)態(tài)庫,又可以分成開源庫和不開源庫,所謂開源庫就是把源碼都分享給大家嘍~ 比如常用的AFNetworking,我們只能使用卻看不到源碼的就是不開源的庫,畢竟一些SDK是需要賺錢的,都共享出來可還行!! 好了,說一下靜態(tài)庫和動(dòng)態(tài)庫.

  • 靜態(tài)庫
    .a 我們平時(shí)接觸到的.a文件就是一種靜態(tài)庫,是以二進(jìn)制方式共享程序代碼的方式,說白了就是把實(shí)現(xiàn)細(xì)節(jié)打成了一個(gè).a的,用的人只要看到可調(diào)用的接口就可以.

**.framework **也是一種靜態(tài)庫

區(qū)別

.a 是只包含二進(jìn)制文件 必須和.h文件配合使用 .framework的是二進(jìn)制文件和一些資源文件(圖片等) ,可以直接使用
總結(jié)來講 framework = .a + .h + 資源文件

  • 動(dòng)態(tài)庫
    .framework也是一種動(dòng)態(tài)庫,沒錯(cuò),他是多變的.
    系統(tǒng)創(chuàng)建的.framework是動(dòng)態(tài)庫,我們自己創(chuàng)建的是靜態(tài)庫
區(qū)別

靜態(tài)庫在鏈接時(shí)會(huì)將整個(gè)二進(jìn)制文件拷貝到內(nèi)存中,舉個(gè)栗子,你用的A庫用到了MJRefresh,B庫也用了MJRefresh,那么內(nèi)存會(huì)存在兩份MJRefresh.
動(dòng)態(tài)庫在鏈接時(shí)不會(huì)將二進(jìn)制文件拷貝到內(nèi)存中,會(huì)提前打個(gè)標(biāo)記,程序運(yùn)行時(shí)動(dòng)態(tài)加載到內(nèi)存中,只加載一次,多個(gè)程序可以共用一個(gè)~
但是蘋果是禁止使用動(dòng)態(tài)庫的,ipa包需要經(jīng)過他的私鑰才可以使用,所以動(dòng)態(tài)庫是無法通過的. 直到iOS8后APP Extension出現(xiàn),Extension和app主程序需要共享代碼,需要用到動(dòng)態(tài)庫.不過這篇文章先不說了.待我研究明白吧.

生成.a

首先創(chuàng)建一個(gè)工程 此處命名為CxySDK


新建.a

默認(rèn)生成與項(xiàng)目同名.h .m文件,可以在里面添加想要實(shí)現(xiàn)的方法,也可以新建或?qū)肫渌愇募?
.m中添加方法


.m實(shí)現(xiàn)文件

接下來把想要暴露給別人的接口在.h中聲明出來


.h聲明文件

3.配置工程文件
在圖片中的3的位置點(diǎn)擊New Headers phase
在圖片中的4的位置添加想要暴露出來的.h文件


配置工程文件

4 . 此處修改為NO, 如果此處是YES,那么編譯出來的文件只在當(dāng)前模擬器機(jī)型下面可用,改成NO之后可以在所有機(jī)型中使用

Paste_Image.png

5 . Edit scheme 此處可以更改為release版本,如需要debug,可以執(zhí)行完6,7步驟以后改成debug重新執(zhí)行一遍


release

6.編譯. 需要分別在模擬器和真機(jī)下面同時(shí)編譯,會(huì)生成兩個(gè)文件夾

模擬器下編譯
真機(jī)下編譯

此處就從紅變黑了,如果沒變化,xcode關(guān)掉重新開一下


就要成功了,加油!!!

Xcode中點(diǎn)擊.a 右鍵show in finder 生成的文件夾如下

模擬器和真機(jī)下面兩種.a

7.合并兩種文件 這樣就可以同時(shí)在模擬器和真機(jī)中使用了(如果需要debug模式下 可以把合并過的release和debug的文件再次合并 ps.不確定是否行得通,理論上是可以的)

合并文件
lipo -create  iphonesimulator模式下的.a文件路徑  iphoneos模式下的.a文件路徑  -output 合并后的保存路徑和名字
使用

把合并過的.a和.h文件導(dǎo)入需要的工程中


測試工程
成功了~

.Framework生成和.a類似 好累改天再寫吧 可以參考
http://www.itdecent.cn/p/87dbf57cfe4a
http://www.itdecent.cn/p/43d55ae49f59

參考文章
https://www.valiantcat.cn/index.php/2017/04/24/45.html
http://blog.csdn.net/lvxiangan/article/details/43115131

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

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

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