iOS SDK開發(fā)流程(靜態(tài)庫)-OC

一坛怪、庫的分類:

1. 開源庫 -》 公開代碼袜匿,能看到具體是怎么實(shí)現(xiàn)的居灯,如:SDWebImage/AFNetworking

2.閉源庫 -》 不公開代碼怪嫌,經(jīng)過編譯后的二進(jìn)制文件即是無.m文件柳沙,只有.h文件(靜態(tài)庫偎行、動(dòng)態(tài)庫)

如:靜態(tài)庫:.framework和.a
動(dòng)態(tài)庫:.dylib和.framework(iOS9 取消了.dylib蛤袒,使用.tbd代替)

2.1妙真、動(dòng)態(tài)庫和靜態(tài)庫的區(qū)別:

靜態(tài)庫:鏈接時(shí),靜態(tài)庫會被完整的復(fù)制到可執(zhí)行文件中矗漾,被多次使用就有多份拷貝
動(dòng)態(tài)庫:鏈接時(shí)不復(fù)制薄料,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存。供程序調(diào)用誊役,系統(tǒng)只加載一次蛔垢,多程序共用鹏漆,節(jié)省內(nèi)存

注意:如果項(xiàng)目用到自制的動(dòng)態(tài)庫甫男,則無法上架到蘋果商店
分析.png

.a靜態(tài)庫

二、制作.a靜態(tài)庫:

1-> .a靜態(tài)庫

創(chuàng)建.a項(xiàng)目1.png

創(chuàng)建.a項(xiàng)目2.png

創(chuàng)建.a項(xiàng)目3.png

1.1 默認(rèn)會創(chuàng)建兩個(gè)文件編寫邏輯代碼,到時(shí)候真正開發(fā)中會有很多的代碼邏輯感混,所以我們可以創(chuàng)建更多的文件
1.2 我們編寫了無數(shù)很復(fù)雜的邏輯代碼后弧满,(分別在模擬器和真機(jī))command + B

編譯.png

1.2.1 我們show in finder 以下的文件庭呜,如圖:


2.1.2.1.png

Snip20180926_18.png

1.3 我們就可以看到兩個(gè)文件,一個(gè)是模擬器的数冬,一個(gè)是真機(jī)的 拐纱, Debug-文件


Snip20180926_20.png

我們可以發(fā)現(xiàn)目前只有一個(gè).h文件秸架,但是在真正的開發(fā)中肯定有很多.h的文件


Snip20180926_22.png

Snip20180926_23.png

Snip20180926_24.png

經(jīng)過以上的步驟你就可以暴露你的.h文件給別人使用了

三币绩、測試.a靜態(tài)庫:

1.將上面創(chuàng)建的Debug-iphonesimulator / Debug-iphoneos的其中一個(gè)放入項(xiàng)目(順便創(chuàng)建一個(gè)測試項(xiàng)目)缆镣,使用.a靜態(tài)庫的方法董瞻,編譯


Snip20180928_1.png

報(bào)了一堆的錯(cuò)誤钠糊,但是使用真機(jī)編譯的時(shí)候則無錯(cuò)誤抄伍,同樣截珍,用模擬器的架構(gòu)編譯真機(jī)也會報(bào)錯(cuò)箩朴,但是用模擬器編譯則不會炸庞,原因是找不到對應(yīng)的架構(gòu)埠居,所以報(bào)錯(cuò)

報(bào)如下的問題:
Undefined symbols for architecture arm64: 或者 linker command failed with exit code 1 (use -v to see invocation)
原因:靜態(tài)庫的架構(gòu)不對滥壕,真機(jī)/模擬器
解決辦法:檢查第三方類庫的架構(gòu)版本 真機(jī)/模擬器
模擬器架構(gòu):

i386 : 4s / 5 目前已經(jīng)沒有該模擬器了捏浊,所以用模擬器編譯的架構(gòu)都是x86_64
x86_64 : 5s ---> xs max

真機(jī)架構(gòu)

armv7: 4 / 4s
armv7s: 5 / 5c 最特殊的一代 默認(rèn)已經(jīng)不支持了
arm64: 5s ---> xr max

2.查看靜態(tài)庫的架構(gòu)

Snip20180928_8.png

根據(jù)上面的方法就可查詢到該靜態(tài)庫的架構(gòu)
用友盟的的QQ分享靜態(tài)庫對比一下


Snip20180928_9.png

很明顯友盟的靜態(tài)庫有很多種的架構(gòu)浊洞,友盟的靜態(tài)庫可以在模擬器和真機(jī)編譯就是這個(gè)這個(gè)原因法希,所以我們要合成.a靜態(tài)庫的所有架構(gòu)

3.合成所有靜態(tài)庫的架構(gòu)

打開終端 cd 到架構(gòu)的上一個(gè)目錄苫亦,如圖:


3.3.1.png

然后輸入命令行 : lipo -create 靜態(tài)庫1.a 靜態(tài)庫2.a -output 新靜態(tài)庫.a (如上圖所示3.3.1.png)
運(yùn)行完命令行之后屋剑,我們可以發(fā)現(xiàn)Products文件夾下面多出了一個(gè) 新靜態(tài)庫.a 文件(如圖所示3.3.2.png)


3.3.2.png

查看xxx.a文件的架構(gòu)唉匾,如圖:


Snip20180928_13.png

因?yàn)樯厦娴囊呀?jīng)說過5s以后的機(jī)型都是同一個(gè)架構(gòu)厂财,但是如果有需求要支持5s 以下的機(jī)型峡懈,可以使用以下的方法進(jìn)行編譯肪康,再合并


Snip20180928_15.png

Snip20180928_18.png
完成上面兩步就可以創(chuàng)建兩種模擬器架構(gòu),三種真機(jī)架構(gòu)齐唆,然后合并架構(gòu)冻河,就能合成與友盟QQ分享一樣的包含5種架構(gòu)的靜態(tài)庫

三叨叙、.a靜態(tài)庫的問題:

1.靜態(tài)庫包含的架構(gòu)越多則.a靜態(tài)庫就越大擂错,所以有一些的第三方框架就會出現(xiàn)發(fā)布版本(真機(jī))和測試版(模擬器版)
2.資源包問題,場景:項(xiàng)目中有一張YJphoto.png圖片昨凡,靜態(tài)庫中也有一張YJphoto.png圖片便脊,然后在項(xiàng)目中引用靜態(tài)庫中(UIImage *)getImage方法

+(UIImage *)getImage;     //暴露給別人的方法



+(UIImage *)getImage    //實(shí)現(xiàn)方法
{
    return [UIImage imageNamed:@"YJphoto"];
}

執(zhí)行的效果就是使用項(xiàng)目中的YJphoto.png圖片哪痰,而不是使用靜態(tài)庫中的YJphoto.png圖片晌杰。所以我們在靜態(tài)庫中不可以直接使用YJphoto.png圖片镇饺,而是使用資源庫(.bundle)的方法來調(diào)用圖片,

+(UIImage *)getImage    //實(shí)現(xiàn)方法
{
    return [UIImage imageNamed:@"xxx.bundle/YJphoto"];
}

四奸笤、.a靜態(tài)庫邊開發(fā)邊調(diào)試:

1.在實(shí)際開發(fā)中不可能編譯一次生成靜態(tài)庫监右,然后再把靜態(tài)庫導(dǎo)入項(xiàng)目健盒,這樣做太麻煩了扣癣,所以本文在這里提示使用邊開發(fā)邊調(diào)試

2.創(chuàng)建普通項(xiàng)目父虑,然后

第一步.png

第二步.png

第三步.png

創(chuàng)建和編寫完成之后呜魄,command + B 會報(bào)一個(gè)錯(cuò)誤爵嗅,


Snip20180928_22.png

該錯(cuò)誤上面已經(jīng)提及過了睹晒,所以我直接給解決辦法


Snip20180928_24.png

Snip20180928_25.png

Snip20180928_26.png

完成這幾步岔激,編譯就可以成功了

3.邊開發(fā)邊調(diào)試總結(jié)

3.1 按照常規(guī)創(chuàng)建項(xiàng)目即可
3.2開發(fā)靜態(tài)庫 --》 添加target
3.3使用時(shí)虑鼎,頭文件及方法正常調(diào)用炫彩,編譯運(yùn)行時(shí)江兢,一定要記得導(dǎo)入.a文件

4.邊開發(fā)邊調(diào)試區(qū)別

4.1 如果使用此種方式進(jìn)行開發(fā)丁频,實(shí)際上靜態(tài)庫文件根本沒有被編譯席里,直接可以使用
4.2如果要導(dǎo)出奖磁,還是需要按照以前的方式進(jìn)行編譯咖为,注意要切換target

.framework靜態(tài)庫

零秕狰、

Xcode6開始,才有了Framework工程模板躁染,以前基本上都是使用.a鸣哀,現(xiàn)在的大部分的第三方都是使用Framework靜態(tài)庫(如:百度、支付寶等等),在Xcode6以前吞彤,也可以制造Framework,但是需要去Github上下載模板文件(使用率很低我衬,在Xcode6出現(xiàn)后,此模板文件不再更新)

一备畦、創(chuàng)建framework靜態(tài)庫

Snip20180928_27.png
Snip20180928_28.png

其實(shí)framework和.a靜態(tài)庫開發(fā)很相似许昨,也是要分架構(gòu)的懂盐,不明白可以參考上面的.a靜態(tài)庫開發(fā)
區(qū)別:
1.導(dǎo)出頭文件,跟.a不一樣糕档。需要將公開的頭文件移到Public下(如下圖1-1.png莉恼,1-2.png)
2.制作的Framework拌喉,默認(rèn)是動(dòng)態(tài)庫文件(無法上架AppStore)
3.自己制作的動(dòng)態(tài)庫使用,需要添加Embedder Binarier -----> 此選項(xiàng)的意思就是將來的動(dòng)態(tài)庫文件代碼轉(zhuǎn)換成二進(jìn)制文件俐银,此時(shí)就無關(guān)動(dòng)態(tài)還是靜態(tài)了(如下圖3-1.png)
4.因?yàn)閯?dòng)態(tài)庫上架不了AppStore尿背,所以要將動(dòng)態(tài)庫轉(zhuǎn)換成靜態(tài)庫,去bulid Setting中搜索Mach-O type 修改成Static(如下圖4-1.png)
5.靜態(tài)庫直接使用即可捶惜,不需要設(shè)置Embedder Binarier


1-1.png

1-2.png
3-1.png
4-1.png

二田藐、邊開發(fā)邊調(diào)試framework

1.與.a靜態(tài)庫邊調(diào)試邊開發(fā)差不多,在調(diào)試時(shí)也不區(qū)分動(dòng)態(tài)還是靜態(tài)
2.頭文件吱七,不需要使用<>汽久,還是使用常規(guī)的“”
3.因?yàn)闆]有生成靜態(tài)庫/動(dòng)態(tài)庫,所以不需要手動(dòng)設(shè)置編譯二進(jìn)制的選項(xiàng)

這就是整個(gè)靜態(tài)庫的開發(fā)流程了踊餐,如果有什么地方說的不好景醇,可以在下方留言
謝謝各位看官老爺
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吝岭,隨后出現(xiàn)的幾起案子三痰,更是在濱河造成了極大的恐慌,老刑警劉巖窜管,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件散劫,死亡現(xiàn)場離奇詭異,居然都是意外死亡微峰,警方通過查閱死者的電腦和手機(jī)舷丹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜓肆,“玉大人颜凯,你說我怎么就攤上這事≌萄铮” “怎么了症概?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長早芭。 經(jīng)常有香客問我彼城,道長,這世上最難降的妖魔是什么退个? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任募壕,我火速辦了婚禮,結(jié)果婚禮上语盈,老公的妹妹穿的比我還像新娘舱馅。我一直安慰自己,他們只是感情好刀荒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布代嗤。 她就那樣靜靜地躺著棘钞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪干毅。 梳的紋絲不亂的頭發(fā)上宜猜,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機(jī)與錄音硝逢,去河邊找鬼姨拥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛渠鸽,可吹牛的內(nèi)容都是我干的垫毙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拱绑,長吁一口氣:“原來是場噩夢啊……” “哼综芥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起猎拨,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤膀藐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后红省,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體额各,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年吧恃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了虾啦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡痕寓,死狀恐怖傲醉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呻率,我是刑警寧澤硬毕,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站礼仗,受9級特大地震影響吐咳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜元践,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一韭脊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧单旁,春花似錦沪羔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至融柬,卻和暖如春死嗦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粒氧。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工越除, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人外盯。 一個(gè)月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓摘盆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饱苟。 傳聞我的和親對象是個(gè)殘疾皇子街夭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

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