iOS 靜態(tài)庫的使用

簡介

在企業(yè)開發(fā)中叭爱,一些核心技術(shù)或者常用框架撞叨,出于安全性和穩(wěn)定性的考慮愿吹,不想被外界知道不从,所以會把核心代碼打包成靜態(tài)庫,只暴露頭文件給程序員使用(比如:友盟犁跪、百度地圖等第三方的sdk)

靜態(tài)庫和動態(tài)庫的存在形式

靜態(tài)庫:.a 和 ?.framework

動態(tài)庫:.dylib 和 .framework

靜態(tài)庫和動態(tài)庫的區(qū)別

靜態(tài)庫:鏈接時椿息,靜態(tài)庫會被完整地復(fù)制到可執(zhí)行文件中,被多次使用就有多份冗余拷貝

動態(tài)庫:鏈接時不復(fù)制坷衍,程序運(yùn)行時由系統(tǒng)動態(tài)加載到內(nèi)存寝优,供程序調(diào)用,系統(tǒng)只加載一次惫叛,多個程序共用倡勇,節(jié)省內(nèi)存

注意:項目中如果使用了動態(tài)庫,會蘋果拒接

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

真機(jī)-Debug版本

真機(jī)-Release版本

模擬器-Debug版本

模擬器-Release版本

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

1.含完整的符號信息嘉涌,以方便調(diào)試

? ?2.不會對代碼進(jìn)行優(yōu)化

Release(發(fā)布)版本

1.不會包含完整的符號信息

? ?2.的執(zhí)行代碼是進(jìn)行過優(yōu)化的

? ?3.的大小會比Debug版本的略小

? ?4.在執(zhí)行速度方面妻熊,Release版本會更快些(但不意味著會有顯著的提升)

所以我們一般開發(fā)中都打包Release(發(fā)布)版本,提供外界

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

模擬器:

4s~5 : i386

5s~6plus : x86_64

真機(jī):

3gs~4s : armv7

5~5c : armv7s (靜態(tài)庫只要支持了armv7仑最,就可以跑在armv7s的架構(gòu)上)

5s~6plus : arm64

制作靜態(tài)庫 - Debug版

1.新建項目

2.添加靜態(tài)庫并命名

3.需要打包到進(jìn)靜態(tài)庫的代碼扔役,放在這個文件夾內(nèi)

4.重新創(chuàng)建測試類(HSCalculate),提供外界計算兩個數(shù)和的方法

HSCalculate.h

@interface HSCalculate : NSObject

+ (NSInteger)sumNum1:(NSInteger)num1 num2:(NSInteger)num2;

@end

HSCalculate.m

#import "HSCalculate.h"

@implementation HSCalculate

+ (NSInteger)sumWithNum1:(NSInteger)num1 num2:(NSInteger)num2

{

? ?return num1 + num2;

}

@end

5.需要暴露給外界的文件(接口)

6.打包支持模擬器和真機(jī)的靜態(tài)庫(分別選擇真機(jī)和模擬器運(yùn)行警医,就會生成對應(yīng)的靜態(tài)庫)

7.查看打包好的靜態(tài)庫

兩個文件夾亿胸,里面的.a文件就是打包好的靜態(tài)庫

Debug-iphoneos : 真機(jī)

Debug-iphonesimulator:模擬器

可用下面命令查看靜態(tài)庫支持的cpu架構(gòu)(可查看上面描述的cpu架構(gòu)類型)

lipo -info xxx.a

分別查看打包好的模擬器與真機(jī)的靜態(tài)庫所支持的cpu架構(gòu)

你會發(fā)現(xiàn)模擬器的靜態(tài)庫少了4s~5 : i386架構(gòu)

原因:

下面Debug:Yes表示只編譯選中模擬器對應(yīng)的架構(gòu),No則為編譯所有模擬器支持的cup架構(gòu)(Debug的Yes狀態(tài)改為No即可)

修改完后预皇,重新編譯:

8.在本項目對該靜態(tài)庫進(jìn)行調(diào)試侈玄,ViewController.m導(dǎo)入HSCalculate.h,測試運(yùn)行吟温,你會發(fā)現(xiàn)報錯了

#import "ViewController.h"

#import "HSCalculate.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

? ?[super viewDidLoad];

? ?NSInteger result = [HSCalculate sumWithNum1:23 num2:25];

? ?NSLog(@"result: %d", result);

}

@end

報錯:

原因:

需要導(dǎo)入靜態(tài)庫(編譯即可運(yùn)行成功)

9.同時支持真機(jī)與模擬器的靜態(tài)庫(需要合并)

真機(jī)和模擬器的靜態(tài)庫序仙,是不一樣的,不能同時適用在真機(jī)和模擬器上鲁豪,但要滿足這要求的話潘悼,要對編譯好的兩個靜態(tài)庫進(jìn)行合并

合并好壞:

好:開發(fā)過程中既可以在真機(jī)上調(diào)試,也可以在模擬器上調(diào)試

壞:如果靜態(tài)庫太大爬橡,合并打包后治唤,會非常大,因此很多第三方的靜態(tài)庫的.a是區(qū)分版本的

合并產(chǎn)生新的靜態(tài)庫:

lipo -create Debug-iphoneos/xxx.a Debug-iphonesimulator/xxx.a -output xxx.a

10.把合并好的靜態(tài)庫和外界訪問的文件拉入到新工程糙申,即可使用(inc文件自己建立的)

Snip20150830_26.png

新建工程測試:

Snip20150830_28.png

制作靜態(tài)庫 - Release版

跟Debug版步驟一樣宾添,只不過在編譯時,改下面的選項即可

制作靜態(tài)庫 - .framework版

步驟跟制作.a靜態(tài)庫,基本一致辞槐,但要注意的下面幾點(diǎn):

1.選擇framework

Snip20150830_32.png

2.編譯時掷漱,默認(rèn)制作成動態(tài)庫,要在下面選擇

Snip20150830_33.png

3.合并靜態(tài)庫時榄檬,是選.framework文件里的libstaticlib文件

合并:

刪除libstaticlib卜范,libCalculateTool拉入libstaticlib.framework項目中,libstaticlib.framework靜態(tài)庫制作完成

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鹿榜,一起剝皮案震驚了整個濱河市海雪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舱殿,老刑警劉巖奥裸,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沪袭,居然都是意外死亡湾宙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門冈绊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侠鳄,“玉大人,你說我怎么就攤上這事死宣∥岸瘢” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵毅该,是天一觀的道長博秫。 經(jīng)常有香客問我,道長眶掌,這世上最難降的妖魔是什么挡育? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮朴爬,結(jié)果婚禮上静盅,老公的妹妹穿的比我還像新娘。我一直安慰自己寝殴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布明垢。 她就那樣靜靜地躺著蚣常,像睡著了一般。 火紅的嫁衣襯著肌膚如雪痊银。 梳的紋絲不亂的頭發(fā)上抵蚊,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼贞绳。 笑死谷醉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冈闭。 我是一名探鬼主播俱尼,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼萎攒!你這毒婦竟也來了遇八?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤耍休,失蹤者是張志新(化名)和其女友劉穎刃永,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羊精,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡斯够,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了喧锦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片读规。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖裸违,靈堂內(nèi)的尸體忽然破棺而出掖桦,到底是詐尸還是另有隱情,我是刑警寧澤供汛,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布枪汪,位于F島的核電站,受9級特大地震影響怔昨,放射性物質(zhì)發(fā)生泄漏雀久。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一趁舀、第九天 我趴在偏房一處隱蔽的房頂上張望赖捌。 院中可真熱鬧,春花似錦矮烹、人聲如沸越庇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卤唉。三九已至,卻和暖如春仁期,著一層夾襖步出監(jiān)牢的瞬間桑驱,已是汗流浹背竭恬。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留熬的,地道東北人痊硕。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像押框,于是被迫代替她去往敵國和親岔绸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

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