一酪术、前言
代碼庫可分為開源庫和閉源庫
? ? ? ?開源庫即公開源代碼,能看到內(nèi)部的具體實(shí)現(xiàn),我們常見的AFN恤磷,Masonry都是開源庫
? ? ? ?閉源庫是經(jīng)過編譯的二進(jìn)制文件,只看到聲明文件野宜,看不到內(nèi)部的實(shí)現(xiàn)方法扫步,可分為靜態(tài)庫,動(dòng)態(tài)庫兩種匈子。靜態(tài)庫有兩種形式:.a和.framework河胎。動(dòng)態(tài)庫形式:.dylib,.tbd 和 .framework
? ? ? 這里簡單說一下靜態(tài)庫與動(dòng)態(tài)庫在使用上的區(qū)別虎敦,Link Binary With Libraries時(shí)游岳,靜態(tài)庫會(huì)被完整地復(fù)制到可執(zhí)行文件中,被多次使用就有多次冗余拷貝(一般三方閉源庫使用)其徙。動(dòng)態(tài)庫是在程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存胚迫,供程序使用,系統(tǒng)只加載一次唾那,多個(gè)程序同時(shí)使用這一個(gè)访锻,節(jié)省內(nèi)存(一般系統(tǒng)閉源庫使用)。恕我直言,項(xiàng)目中如果使用了自制的動(dòng)態(tài)庫朗若,審核會(huì)被拒的哦恼五!
二、下面開始制作.a靜態(tài)庫
1. File-New-Project哭懈,選擇Cocoa Touch Static Library
2. 添加庫需要包含的源碼灾馒,將代碼放到靜態(tài)庫工程里
3. 編譯前所要注意的一些地方
4. Edit Scheme,選擇release模式
5. Device分別選中真機(jī)和模擬器遣总,Command+B進(jìn)行編譯睬罗,成功之后,原先紅色的那個(gè)地方會(huì)變黑旭斥。點(diǎn)到那里容达,右鍵Show In Finder〈谷可以看到Release-iphoneos(真機(jī)下的.a) release-iphonesimulator(模擬器下的.a)兩個(gè)文件夾
6. 對(duì)模擬器下的.a和真機(jī)下的.a進(jìn)行合并花盐,以便本靜態(tài)庫支持真機(jī)和模擬器
6.1 將Release-iphoneos文件夾與release-iphonesimulator文件夾拷貝到一個(gè)新建的文件夾里,打開終端菇爪,輸入:
lipo? -create “真機(jī)下的.a文件路徑” “模擬器下的.a文件路徑” -output “合并后的.a所要存放的路徑”算芯。例如下圖
6.2 檢查合并后的.a是否滿足要求,輸入命令:lipo? -info “.a所在路徑”凳宙,例如下圖熙揍,符合armv7, x86_64機(jī)型(這個(gè)在編譯前可以在build setting里進(jìn)行配置)
7. 這樣.a 靜態(tài)庫就成功制作完成,只需要將暴漏的頭文件以及制作的.a放入工程氏涩,別人就可以使用你的程序了届囚,麻麻再也不用擔(dān)心你的源碼暴漏或者有些屌絲隨意修改你的代碼了。注:圖片資源是不能打進(jìn).a的是尖,需要在外面添加
三意系、注意:
? ? ? ?如果靜態(tài)庫中有category類,則在使用靜態(tài)庫的項(xiàng)目配置中的build setting里搜索Other Linker Flags饺汹,添加參數(shù)[-ObjC]或者[-all_load]
下一回會(huì)介紹.framework靜態(tài)的的制作心得與使用方法蛔添,敬請期待。碼農(nóng)共勉首繁!