靜態(tài)庫簡單學習

有時候想寫個靜態(tài)庫玩玩練練手,做了一次之后,時間久了又給忘了步驟。今天就簡單的記錄一下。便于日后的記憶。

什么是庫?
  • 程序代碼的集合,共享程序代碼的一種方式
庫分為 開源 和 閉源庫-->
  • 閉源庫分 為靜態(tài)庫.a 和 .framework
  • 動態(tài)庫: .dylib 和 .framework
靜態(tài)庫和動態(tài)庫的使用區(qū)別
  • 靜態(tài)庫: 鏈接時。靜態(tài)庫會被完整的復(fù)制到可執(zhí)行的文件中。被多次使用就會有多次復(fù)制拷貝。有冗余 。比如系統(tǒng) 中 程序a 和 程序b 都是用了 靜態(tài)庫 .a 那么 .a 就會在系統(tǒng)中加載2次

*動態(tài)庫: 系統(tǒng)中 。程序a 和 程序 b 都使用了某個動態(tài)庫 .dylib那么程序運行時由系統(tǒng)加載到內(nèi)存,系統(tǒng)只加載一次,供一個多個程序使用,節(jié)省內(nèi)存。但蘋果不支持 使用 第三方 動態(tài)庫上傳到 App Store 。會被拒絕

靜態(tài)庫 還有一個用處,可以打包mrc 的第三方,變成靜態(tài)庫。然后倒入工程這樣就不需要我們手動在去管理了

如何生存靜態(tài)庫

1, 創(chuàng)建工程
屏幕快照 2018-01-13 下午10.24.05.png

2,刪除系統(tǒng)生成的文件。創(chuàng)建自己的文件
屏幕快照 2018-01-13 下午10.32.28.png

寫自己想要的方法。在 .h 文件中。然后.m 中實現(xiàn)![
屏幕快照 2018-01-13 下午10.33.41.png
屏幕快照 2018-01-13 下午10.33.41.png

3, 在工程中。聲明頭文件,這樣就可以把生成的.a 文件的頭文件暴露出去了


屏幕快照 2018-01-13 下午10.37.45.png
如果點制作靜態(tài)庫中我們需要往里面丟圖片。有資源文件。那么我么做一個 bundle 文件,專門存放資源文件。
屏幕快照 2018-01-13 下午11.02.10.png
屏幕快照 2018-01-13 下午11.02.39.png

我們把圖片等丟在bundle 里面。然后在靜態(tài)類、聲明如何拿到資源文件,如圖
屏幕快照 2018-01-13 下午11.09.31.png

聲明

屏幕快照 2018-01-13 下午11.09.43.png

4,這樣 command + b 編譯即可。就會生成 靜態(tài)庫
屏幕快照 2018-01-13 下午10.41.28.png

5,查看 show a finder 找到.a 和 .h 頭文件


屏幕快照 2018-01-13 下午10.42.43.png
屏幕快照 2018-01-13 下午10.42.51.png

另外一個工程要使用就導(dǎo)入 .a 和 .h 即可

6, 這樣我們就做好了靜態(tài).a 和 頭文件,再把bundle 一起放在一個 lib 文件夾
屏幕快照 2018-01-13 下午11.14.59.png

注意點,這樣是只支持 真機 或者 模擬器 i386 。我們模擬器編譯和真機編譯會生成2種不同的.a 為了同時在 真機和模擬器那么我們需要用控制臺合并

屏幕快照 2018-01-13 下午11.17.51.png

這就是真機和模擬器2個文件夾、 那么我們先用用控制臺進入 product 文件。然后進行合并操作

Last login: Sat Jan 13 23:03:10 on ttys000
zwcmacbook-pro:~ chenguimin$ cd /Users/chenguimin/Library/Developer/Xcode/DerivedData/staticDemo-erbbkpjwhmuufidtvkdyxugbbtbf/Build/Products 

//合并 prodects 下面的模擬器Debug-iphonesimulator/libstaticDemo.a
//  和 prodects 下面的真機.a  Debug-iphoneos/libstaticDemo.a 
 // 合并成功,輸出 -output   XC_tool.a 
zwcmacbook-pro:Products chenguimin$ lipo -create Debug-iphonesimulator/libstaticDemo.a  Debug-iphoneos/libstaticDemo.a -output XC_tool.a
zwcmacbook-pro:Products chenguimin$ 

下面是合并后的文件


09C552BB-D1F3-4EA1-94D0-70EB71CCBA67.png

現(xiàn)在就完成了。 把 XC_tool.a XCTools.bundle XC_tools.h 放在lib文件夾即可給其他人使用


屏幕快照 2018-01-13 下午11.30.04.png

如何調(diào)試靜態(tài)庫 ,我這里的環(huán)境是 Xcode 9.1

1,創(chuàng)建一個新的工程。

2, 選擇新的工程的
22BB5C60-9D5B-49EB-8162-B98029D62795.png

3,選擇你需要創(chuàng)建的靜態(tài)庫,
屏幕快照 2018-01-14 下午10.06.23.png

4,我這里創(chuàng)建了xc_tools
屏幕快照 2018-01-14 下午10.08.08.png

5,在xctools 寫完你想寫的方法 。然后


屏幕快照 2018-01-14 下午10.11.26.png

選擇 xc_tools 然后 編譯 。會生成 .a 靜態(tài)庫、然后我們重新選擇 工程文件

6,在viewController 文件,引入 靜態(tài)庫頭文件xc_tools.h ,然后使用xc_tools.h的方法 如圖 。


屏幕快照 2018-01-14 下午10.29.33.png

編譯會報錯。


屏幕快照 2018-01-14 下午10.16.34.png

可以看到報錯原因, viewController 有引用到 xc_tools 的方法 , link 失敗 ,因為沒有導(dǎo)入 在工程文件設(shè)置 .a target dependencies(目標依賴關(guān)系) 和 link binary with libraries (鏈接庫) 。我們需要在如圖位置

751BA137-BA65-4E2F-87DD-A80CAC133966.png

設(shè)置目標 靜態(tài)庫 ,然后 添加鏈接靜態(tài)庫


FEC7FC94-A143-4FEF-9BDC-7D35D3D60A0A.png

編譯 sunccess 。 就可以一遍寫 靜態(tài)庫方法,一邊調(diào)試了。

動態(tài)庫 framework 動態(tài)庫如何打包。 步驟和上面雷同

屏幕快照 2018-01-14 下午11.00.27.png

選擇動態(tài)庫生成。、

然后進入工程。比如 自己創(chuàng)建一個xc_tools 類。那么 我們需要如圖


19F832B7-4E6F-4E7A-A9E1-E31477866235.png

這個的作用就是打包的 framework 頭文件暴露出去。

在使用的時候注意 。在General 下面的


屏幕快照 2018-01-14 下午11.04.13.png

注意把我們的動態(tài)庫。添加到這里面就好。不然會在使用的時候報錯

/// 因為 動態(tài)庫不可以上傳到 app store
那么 怎么把動態(tài)換成靜態(tài)呢 如圖


BB5834E3-39CA-48FC-8EF2-DC1B8DF949A4.png

這樣設(shè)置后編譯即可

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370

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