iOS-靜態(tài)庫(1)

一、靜態(tài)庫的簡介

1砾脑、什么是庫?

  • 庫是程序代碼的集合艾杏,是共享程序代碼的一種方式韧衣。
  • 根據(jù)源代碼的公開情況,庫可以分為兩種類型:
    開源庫:
    公開源代碼购桑,能看得到具體實現(xiàn)
    比如:SDWebImage畅铭、AFNetworking
    閉源庫:
    不公開源代碼,是經(jīng)過編譯后的二進制文件勃蜘,看不到具體實現(xiàn)
    主要分為:靜態(tài)庫和動態(tài)庫

2硕噩、 靜態(tài)庫和動態(tài)庫的存在形式

       靜態(tài)庫:.a和.framework
      動態(tài)庫:.dylib和.framework[iOS9取消了.dylib,使用.tbd替代]

3元旬、 靜態(tài)庫和動態(tài)庫在使用上的區(qū)別

  - 靜態(tài)庫:鏈接時榴徐,靜態(tài)庫會被完整地賦值到可執(zhí)行文件中,*被多次使用就會有多份冗余拷貝*匀归。(如左圖)
  ----- 例如:兩個程序都需要分享,a需要加載.a文件耗帕,b也要加載.a文件穆端,就會造成多次加載,冗余拷貝的現(xiàn)象仿便,占內(nèi)存体啰。
   動態(tài)庫:鏈接時不復制,程序運行時由系統(tǒng)動態(tài)加載到內(nèi)存嗽仪,共程序調(diào)用荒勇,系統(tǒng)只加載一次,多個程序共用闻坚,節(jié)省內(nèi)存沽翔。(如右圖)
  ----- 例如:誰來用了,找我窿凤。
靜態(tài)庫與動態(tài)庫的區(qū)別

####### 需要注意的是:在iOS8之前仅偎,項目中項目中如果使用了自制的動態(tài)庫,不能上傳到AppStore ■ㄊ猓現(xiàn)在可以橘沥,大多人不知道。

4夯秃、靜態(tài)庫的好處

  • 靜態(tài)庫主要作用是對核心代碼進行封裝座咆,隱藏代碼的實現(xiàn)
  • 提高代碼的安全性痢艺,對公司核心機密進行保護
  • 例如,公司新來了一個小王介陶,老王不想讓小王看堤舒,就對代碼進行了靜態(tài)庫的封裝,交給了小王斤蔓。對方可以用植酥,但看不到實現(xiàn)。
  • 避免弦牡,代碼的誤修改-防止修改
  • 相當于一個工具類的封裝--WBTools
  • .a文件相當于一個底層文件(二進制文件) -- 可以作為MRC中向ARC中添加的打包文件友驮,避免報錯

二、靜態(tài)庫常見的錯誤

Undefine symbols for architecturei386/x86_64/armv7/arv7S/arm64

  • 原因-找不到符號在xx框架上

  • 解決方案:看一看是否導入了正確的框架

    模擬器架構(gòu):
    i386 : 32位 4s和5
    x86_64: 64位 5s之后機型

真機架構(gòu):
armv7 : 32位 4s/4
armv7s: 5/5c-->這是一個失敗的架構(gòu)
arm64 : 64位 5s以后機型

架構(gòu)位數(shù)關于內(nèi)存尋址效率驾锰,位數(shù)越高卸留,效率越快。

三椭豫、利用命令來查看靜態(tài)庫架構(gòu)(-架構(gòu)的合并-)

  • 1.查詢方法:找到指定的靜態(tài)庫的文件夾耻瑟,將其拖入終端,并輸入:
    app$ lipo -info xxxxLib.a //查詢xxxxLib.a的架構(gòu)
查詢架構(gòu)結(jié)果為:x86_64

*只能在64位的模擬器上運行

  • 2 . 注意要點:一般SDK赏酥,對真機和模擬器的架構(gòu)做了拆分喳整,就會造成程序,在真機上能運行裸扶,在模擬器運行不了框都。在模擬器上能運行,而在真機上運行不了呵晨。如下圖:
真機/模擬器-架構(gòu)的拆分
  • 3.解決真機與模擬器都能運行的方法:合成多個架構(gòu)
    .創(chuàng)建靜態(tài)庫
    1.例如:
    1)創(chuàng)建工程項目
創(chuàng)建工程項目

2)配置要導出的文件.h

導出Tools.h

3)配置靜態(tài)庫的方法-核心函數(shù)的打包


核心函數(shù)的打包

4)模擬器合并多個架構(gòu)魏保,并運行--->此步驟對真機編譯沒有影響


模擬器合并多個架構(gòu)

5)用終端查詢結(jié)果
真機結(jié)果
模擬器結(jié)果

1.Debug對結(jié)果沒有查詢影響
2.arm7s這個架構(gòu)不需要管。2014年10月份Xcode更新中摸屠,取消了默認輸出這一架構(gòu)

  • 手動添加armv7s谓罗,讓真機加入7s架構(gòu)
    1.選擇工程-如圖顯示
bulid-Setting中尋找

2.armv7s的添加,添加完畢后運行

框架的添加

3.終端查詢

終端查詢結(jié)果
  • 真機加入7s架構(gòu),需要手動在Architectures中, 添加3個架構(gòu), 再次編譯.

補充1


Snip20160530_35.png

4季二、真機與模擬器架構(gòu)的合并

  • 如果文件過大不建議合成
    合成代碼: lipo -create 靜態(tài)庫1.a 靜態(tài)庫2.a -output 新靜態(tài)庫名

操作如下圖所示:

從product中找到
合并
創(chuàng)建完會多一個.a
查詢

5.用新合成的.a文件檩咱,替換Debug-iphoneos里的.a文件。
此時,替換完成戒傻,一個共用的靜態(tài)庫架構(gòu)税手,合并就終于完畢了。

五需纳、Release和Debug的區(qū)別

  • Debug: 調(diào)試模式
  • Release:發(fā)布模式 ->會去除一些系統(tǒng)的調(diào)試語句芦倒,從而使文件體積變小一丟丟 ,執(zhí)行速度也會變快一丟丟不翩。對用戶沒有明顯的感覺兵扬。
  • Release版本的實現(xiàn)步驟:(如圖所示)

1.從工程中找到Edit Scheme


找到Edit Scheme

2.把Build Configuration 改成Release模式


Release模式

3.選擇模擬器麻裳,運行一遍,Generic iOS Device 運行一遍


Generic iOS Device

4.打開Show in Finder


Show in Finder

5.檢查上級文件夾器钟,會包含Release版本


Release版本

注意津坑,如果需要進行架構(gòu)合并,可以按照iOS-靜態(tài)庫(1)中的方法進行架構(gòu)合并傲霸,是一樣的疆瑰。

后面,總結(jié)的有點著急昙啄,我會慢慢完善穆役。請批評指導,虛心學習梳凛。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末耿币,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子韧拒,更是在濱河造成了極大的恐慌淹接,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叛溢,死亡現(xiàn)場離奇詭異塑悼,居然都是意外死亡,警方通過查閱死者的電腦和手機楷掉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門拢肆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人靖诗,你說我怎么就攤上這事≈荆” “怎么了刊橘?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長颂鸿。 經(jīng)常有香客問我促绵,道長,這世上最難降的妖魔是什么嘴纺? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任败晴,我火速辦了婚禮,結(jié)果婚禮上栽渴,老公的妹妹穿的比我還像新娘尖坤。我一直安慰自己,他們只是感情好闲擦,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布慢味。 她就那樣靜靜地躺著场梆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纯路。 梳的紋絲不亂的頭發(fā)上或油,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機與錄音驰唬,去河邊找鬼顶岸。 笑死,一個胖子當著我的面吹牛叫编,可吹牛的內(nèi)容都是我干的辖佣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼宵溅,長吁一口氣:“原來是場噩夢啊……” “哼凌简!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恃逻,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤雏搂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后寇损,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凸郑,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年矛市,在試婚紗的時候發(fā)現(xiàn)自己被綠了芙沥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡浊吏,死狀恐怖而昨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情找田,我是刑警寧澤歌憨,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站墩衙,受9級特大地震影響务嫡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜漆改,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一心铃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挫剑,春花似錦去扣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秀存。三九已至,卻和暖如春羽氮,著一層夾襖步出監(jiān)牢的瞬間或链,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工档押, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留澳盐,地道東北人。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓令宿,卻偏偏與公主長得像叼耙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粒没,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

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