一、前言
代碼庫(kù)可分為開源庫(kù)和閉源庫(kù)
? ? ? ?開源庫(kù)即公開源代碼,能看到內(nèi)部的具體實(shí)現(xiàn),我們常見的AFN,Masonry都是開源庫(kù)
? ? ? ?閉源庫(kù)是經(jīng)過編譯的二進(jìn)制文件,只看到聲明文件,看不到內(nèi)部的實(shí)現(xiàn)方法,可分為靜態(tài)庫(kù),動(dòng)態(tài)庫(kù)兩種。靜態(tài)庫(kù)有兩種形式:.a和.framework。動(dòng)態(tài)庫(kù)形式:.dylib,.tbd 和 .framework
? ? ? 這里簡(jiǎn)單說一下靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)在使用上的區(qū)別,Link Binary With Libraries時(shí),靜態(tài)庫(kù)會(huì)被完整地復(fù)制到可執(zhí)行文件中,被多次使用就有多次冗余拷貝(一般三方閉源庫(kù)使用)。動(dòng)態(tài)庫(kù)是在程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存,供程序使用,系統(tǒng)只加載一次,多個(gè)程序同時(shí)使用這一個(gè),節(jié)省內(nèi)存(一般系統(tǒng)閉源庫(kù)使用)。恕我直言,項(xiàng)目中如果使用了自制的動(dòng)態(tài)庫(kù),審核會(huì)被拒的哦!
二、下面開始制作.a靜態(tài)庫(kù)
1. File-New-Project,選擇Cocoa Touch Static Library

2. 添加庫(kù)需要包含的源碼,將代碼放到靜態(tài)庫(kù)工程里


3. 編譯前所要注意的一些地方



4. Edit Scheme,選擇release模式

5. Device分別選中真機(jī)和模擬器,Command+B進(jìn)行編譯,成功之后,原先紅色的那個(gè)地方會(huì)變黑。點(diǎn)到那里,右鍵Show In Finder??梢钥吹絉elease-iphoneos(真機(jī)下的.a) release-iphonesimulator(模擬器下的.a)兩個(gè)文件夾

6. 對(duì)模擬器下的.a和真機(jī)下的.a進(jìn)行合并,以便本靜態(tài)庫(kù)支持真機(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)庫(kù)就成功制作完成,只需要將暴漏的頭文件以及制作的.a放入工程,別人就可以使用你的程序了,麻麻再也不用擔(dān)心你的源碼暴漏或者有些屌絲隨意修改你的代碼了。注:圖片資源是不能打進(jìn).a的,需要在外面添加
三、注意:
? ? ? ?如果靜態(tài)庫(kù)中有category類,則在使用靜態(tài)庫(kù)的項(xiàng)目配置中的build setting里搜索Other Linker Flags,添加參數(shù)[-ObjC]或者[-all_load]
下一回會(huì)介紹.framework靜態(tài)的的制作心得與使用方法,敬請(qǐng)期待。碼農(nóng)共勉!