有時候想寫個靜態(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)建工程2,刪除系統(tǒng)生成的文件。創(chuàng)建自己的文件
寫自己想要的方法。在 .h 文件中。然后.m 中實現(xiàn)![
3, 在工程中。聲明頭文件,這樣就可以把生成的.a 文件的頭文件暴露出去了
如果點制作靜態(tài)庫中我們需要往里面丟圖片。有資源文件。那么我么做一個 bundle 文件,專門存放資源文件。
屏幕快照 2018-01-13 下午11.02.10.png
我們把圖片等丟在bundle 里面。然后在靜態(tài)類、聲明如何拿到資源文件,如圖
聲明
5,查看 show a finder 找到.a 和 .h 頭文件
另外一個工程要使用就導(dǎo)入 .a 和 .h 即可
6, 這樣我們就做好了靜態(tài).a 和 頭文件,再把bundle 一起放在一個 lib 文件夾注意點,這樣是只支持 真機 或者 模擬器 i386 。我們模擬器編譯和真機編譯會生成2種不同的.a 為了同時在 真機和模擬器那么我們需要用控制臺合并
這就是真機和模擬器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$
下面是合并后的文件
現(xiàn)在就完成了。 把 XC_tool.a XCTools.bundle XC_tools.h 放在lib文件夾即可給其他人使用
如何調(diào)試靜態(tài)庫 ,我這里的環(huán)境是 Xcode 9.1
1,創(chuàng)建一個新的工程。
3,選擇你需要創(chuàng)建的靜態(tài)庫,
5,在xctools 寫完你想寫的方法 。然后
選擇 xc_tools 然后 編譯 。會生成 .a 靜態(tài)庫、然后我們重新選擇 工程文件
6,在viewController 文件,引入 靜態(tài)庫頭文件xc_tools.h ,然后使用xc_tools.h的方法 如圖 。
編譯會報錯。
可以看到報錯原因, viewController 有引用到 xc_tools 的方法 , link 失敗 ,因為沒有導(dǎo)入 在工程文件設(shè)置 .a target dependencies(目標依賴關(guān)系) 和 link binary with libraries (鏈接庫) 。我們需要在如圖位置
設(shè)置目標 靜態(tài)庫 ,然后 添加鏈接靜態(tài)庫
編譯 sunccess 。 就可以一遍寫 靜態(tài)庫方法,一邊調(diào)試了。
動態(tài)庫 framework 動態(tài)庫如何打包。 步驟和上面雷同
選擇動態(tài)庫生成。、
然后進入工程。比如 自己創(chuàng)建一個xc_tools 類。那么 我們需要如圖
這個的作用就是打包的 framework 頭文件暴露出去。
在使用的時候注意 。在General 下面的
注意把我們的動態(tài)庫。添加到這里面就好。不然會在使用的時候報錯
/// 因為 動態(tài)庫不可以上傳到 app store
那么 怎么把動態(tài)換成靜態(tài)呢 如圖
這樣設(shè)置后編譯即可