iOS生成靜態(tài)庫(.a文件和Framework)

所謂庫就是程序代碼的集合,是共享程序代碼的一種方式邮辽。根據(jù)程序代碼的開源情況唠雕,庫可以分開源庫(源代碼是公開的贸营,你可以看到具體實(shí)現(xiàn))和閉源庫(不公開源代碼,只公開調(diào)用的接口岩睁,看不到具體的實(shí)現(xiàn)钞脂,是一個(gè)編譯后的二進(jìn)制文件)。同時(shí)庫又有靜態(tài)和動(dòng)態(tài)之分捕儒,靜態(tài)庫以".a"或者“.framework”為文件后綴名冰啃,動(dòng)態(tài)庫以".dylib"或者“.framework”為文件后綴名,靜態(tài)庫鏈接時(shí)會(huì)被完整的復(fù)制到可執(zhí)行文件中刘莹,被多次使用就有多份拷貝阎毅,動(dòng)態(tài)庫鏈接時(shí)不復(fù)制,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存点弯,供程序調(diào)用扇调。而且系統(tǒng)只加載一次,多個(gè)程序共用抢肛,節(jié)省內(nèi)存狼钮。

下面詳細(xì)介紹一下靜態(tài)庫的打包和使用過程:

一、打包.a文件
新建一個(gè)工程捡絮,選擇Cocoa Touch Static Library創(chuàng)建


屏幕快照 2018-06-07 下午3.17.21.png

建完之后的樣子


屏幕快照 2018-06-07 下午3.24.49.png

在自動(dòng)生成的MethodsTool文件中寫一個(gè)方法:
屏幕快照 2018-06-07 下午3.30.11.png
屏幕快照 2018-06-07 下午3.30.22.png

然后在創(chuàng)建一個(gè)CustomView的視圖文件(這種文件自己想怎么弄怎么弄熬芜,這里只是隨便創(chuàng)建一個(gè)當(dāng)例子),添加一個(gè)方法:
屏幕快照 2018-06-07 下午3.30.31.png
屏幕快照 2018-06-07 下午3.30.40.png

注意點(diǎn):適配所有模擬器架構(gòu)(如果選擇Yes锦援,只適配部分機(jī)型猛蔽,選擇NO則適配所有機(jī)型):


屏幕快照 2018-06-07 下午3.36.24.png

選擇編譯模式,編譯模式有Debug版本和Release版本:

Debug是調(diào)試版本灵寺,主要讓程序員使用。在調(diào)試的過程中Debug會(huì)啟動(dòng)更多的服務(wù)來監(jiān)控錯(cuò)誤区岗,運(yùn)行速度較慢略板,而且比較耗能。

Release是發(fā)布版本慈缔,主要讓用戶使用叮称,在使用的過程中會(huì)去掉那些繁瑣的監(jiān)控服務(wù),運(yùn)行速度相對(duì)較快藐鹤,而且比較節(jié)約內(nèi)存瓤檐。

這里,我們?cè)贒ebug版本和Release版本下娱节,使用模擬器和真機(jī)進(jìn)行編譯挠蛉,會(huì)生成Debug和Release兩種模式下模擬器和真機(jī)版本的靜態(tài)庫。

這里我們將模式切換成release


屏幕快照 2018-06-07 下午3.47.06.png
屏幕快照 2018-06-07 下午3.47.54.png

接下來添加需要公開接口的頭文件(.h文件),如果一個(gè)靜態(tài)庫很復(fù)雜肄满,需要暴露的.h比較多的話谴古,就可以在靜態(tài)庫的內(nèi)部創(chuàng)建一個(gè).h文件(一般這個(gè).h文件的名字和靜態(tài)庫的名字相同)质涛,然后把所有需要暴露出來的.h文件都集中放在這個(gè).h文件中,而那些原本需要暴露的.h都不需要再暴露了掰担,只需要把.h暴露出來就可以了


屏幕快照 2018-06-07 下午3.57.28.png
屏幕快照 2018-06-07 下午3.57.41.png

準(zhǔn)備工作就緒汇陆,接下來分別選一個(gè)模擬器和Generic iOS Device編譯一下,分別代表真機(jī)和模擬器带饱,編譯成功后可以看到.a文件由紅色變成了黑色


屏幕快照 2018-06-07 下午4.04.08.png

選中.a文件右鍵Show in Finder,可以看到release模式下分別生成了真機(jī)和模擬器的靜態(tài)庫.a文件和include文件毡代,其中include文件中包含的是公開的頭文件


屏幕快照 2018-06-07 下午4.06.06.png
屏幕快照 2018-06-07 下午4.06.20.png

如果想生成Debug模式下的靜態(tài)庫可以將模式切換成debug,然后分別選擇一個(gè)模擬器和Generic iOS Device編譯一下

下面進(jìn)行真機(jī)和模擬器靜態(tài)庫的合并:
打開終端輸入命令: lipo -create 真機(jī).a文件路徑 模擬器.a文件路徑 -output 合并后的文件路徑
注:合并后的文件路徑一般可以是:桌面路徑+合并后的文件名.a勺疼,如/Users/mac1/Desktop/libMethodTool.a ,libMethodTool.a是需要你自己在終端上輸入的教寂,想當(dāng)年看別人的教程傻傻的先在桌面建一個(gè).a文件夾,然后拖入終端獲取路徑恢口,后來發(fā)現(xiàn)不是這樣孝宗,額!8纭因妇!

合并成功后會(huì)生成一個(gè).a文件libMethodTool.a,然后新建一個(gè)文件夾猿诸,將合并生成的.a文件和include中包含的公開的頭文件都放在里面婚被,這個(gè)文件夾就是最終成品,用的時(shí)候只要將該文件拖入目標(biāo)工程就可以使用了梳虽。


屏幕快照 2018-06-07 下午4.45.49.png

在你生成庫文件的工程中址芯,創(chuàng)建一個(gè)App項(xiàng)目,并導(dǎo)入靜態(tài)庫使用:

屏幕快照 2018-06-07 下午4.54.57.png
屏幕快照 2018-06-07 下午4.55.16.png
屏幕快照 2018-06-07 下午4.56.10.png
屏幕快照 2018-06-07 下午5.03.01.png

通過上面的步驟App已經(jīng)創(chuàng)建成功窜觉,并成功導(dǎo)入靜態(tài)庫谷炸,執(zhí)行相應(yīng)的操作后結(jié)果如圖


屏幕快照 2018-06-07 下午5.06.47.png

當(dāng)你的靜態(tài)庫中用到自定義的控件或者分類時(shí)候,你會(huì)發(fā)現(xiàn)禀挫,導(dǎo)入靜態(tài)庫的時(shí)候旬陡,你的工程會(huì)報(bào)錯(cuò)。

解決辦法:
Build Setting—>Other Linker Flags 選項(xiàng)添加:-all_load 或者 -ObjC语婴。

二描孟、打包Framework文件

新建一個(gè)工程,選擇Cocoa Touch Framework


屏幕快照 2018-06-07 下午5.32.32.png

在系統(tǒng)生成的主頭文件中導(dǎo)入新添加文件的頭文件


屏幕快照 2018-06-07 下午6.29.04.png

設(shè)置打包的是靜態(tài)庫
屏幕快照 2018-06-07 下午5.36.13.png

適配所有模擬器架構(gòu)


屏幕快照 2018-06-07 下午5.40.24.png

根據(jù)需求切換編譯模式砰左,release or debug


屏幕快照 2018-06-07 下午5.44.27.png

添加需要公開的頭文件(.h文件)


屏幕快照 2018-06-07 下午5.54.05.png

接下來分別選一個(gè)模擬器和Generic iOS Device編譯一下匿醒,分別代表真機(jī)和模擬器,編譯成功后可以看到.framework文件由紅色變成了黑色缠导,選中該文件Show in Finder


屏幕快照 2018-06-07 下午5.49.13.png

此時(shí)生成的.framework文件就可以使用了

下面介紹一下合并真機(jī)和模擬器的framework庫文件廉羔,這里合并和.a方法類似,只是內(nèi)容上有所區(qū)別酬核,framework靜態(tài)庫合并的不是.framework文件,而是framework下的一個(gè)二進(jìn)制文件:


屏幕快照 2018-06-07 下午5.58.58.png

打開終端輸入命令: lipo -create 真機(jī)framework下二進(jìn)制文件路徑 模擬器framework下二進(jìn)制文件路徑 -output 合并后的文件路徑

新創(chuàng)建一個(gè)文件夾蜜另,將生成的文件和原framework下的Headers适室、Info.plist、Modules全部放入其中举瑰,這就是成品捣辆,用的時(shí)候直接將該文件夾拖入目標(biāo)工程即可使用,在生成framework庫的工程中創(chuàng)建App此迅,過程和之前的類似汽畴,創(chuàng)建好APP后導(dǎo)入framework即可調(diào)用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末耸序,一起剝皮案震驚了整個(gè)濱河市忍些,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坎怪,老刑警劉巖罢坝,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異搅窿,居然都是意外死亡嘁酿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門男应,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闹司,“玉大人,你說我怎么就攤上這事沐飘∮巫” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵耐朴,是天一觀的道長(zhǎng)借卧。 經(jīng)常有香客問我,道長(zhǎng)筛峭,這世上最難降的妖魔是什么谓娃? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蜒滩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奶稠。我一直安慰自己俯艰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布锌订。 她就那樣靜靜地躺著竹握,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辆飘。 梳的紋絲不亂的頭發(fā)上啦辐,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天谓传,我揣著相機(jī)與錄音,去河邊找鬼芹关。 笑死续挟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的侥衬。 我是一名探鬼主播诗祸,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼轴总!你這毒婦竟也來了直颅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤怀樟,失蹤者是張志新(化名)和其女友劉穎功偿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體往堡,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡械荷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了投蝉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片养葵。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瘩缆,靈堂內(nèi)的尸體忽然破棺而出关拒,到底是詐尸還是另有隱情,我是刑警寧澤庸娱,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布着绊,位于F島的核電站,受9級(jí)特大地震影響熟尉,放射性物質(zhì)發(fā)生泄漏归露。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一斤儿、第九天 我趴在偏房一處隱蔽的房頂上張望剧包。 院中可真熱鬧,春花似錦往果、人聲如沸疆液。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堕油。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掉缺,已是汗流浹背卜录。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留眶明,地道東北人艰毒。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像赘来,于是被迫代替她去往敵國(guó)和親现喳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容