制作.a靜態(tài)庫(kù)

一、前言

代碼庫(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. 編譯前所要注意的一些地方

編譯前products下的這個(gè)文件顯示為紅色
build architecture設(shè)為NO
在compile sources設(shè)置好編譯的依賴文件,copy files設(shè)置好聲明文件

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)共勉!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容