一、動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)
- 動(dòng)態(tài)庫(kù):動(dòng)態(tài)庫(kù)在程序編譯時(shí)并不會(huì)被連接到目標(biāo)代碼中,而是在程序運(yùn)行時(shí)才被載入,因此在程序運(yùn)行時(shí)還需要?jiǎng)討B(tài)庫(kù)存在。
.dylib和.framework
.framework可靜可動(dòng),取決于配置 - 靜態(tài)庫(kù):靜態(tài)庫(kù)在程序編譯時(shí)會(huì)被連接到目標(biāo)代碼中,程序運(yùn)行時(shí)將不再需要該靜態(tài)庫(kù)。
.a和.framework
二、.a靜態(tài)庫(kù)的制作
1、新建工程,選擇Static Library

新建工程
2、Build Active Architecture Only 設(shè)置為NO(不同機(jī)型的架構(gòu)不一樣,設(shè)置為NO適配不同機(jī)型)

Build Active Architecture Only 設(shè)置
3、設(shè)置最低支持版本和暴露頭文件

設(shè)置最低支持版本

設(shè)置暴露頭文件
4、運(yùn)行代碼生成對(duì)應(yīng)庫(kù)(模擬器和真機(jī)下分別在debug和release環(huán)境下運(yùn)行代碼,總共是4次,右鍵點(diǎn)擊上圖中的紅框內(nèi)庫(kù)文件,Show in Finder會(huì)發(fā)現(xiàn)4個(gè)人文件,對(duì)應(yīng)剛才4次運(yùn)行結(jié)果)

5、合并庫(kù)文件
說(shuō)明:最終生成了兩個(gè)合并好的庫(kù)文件,debug和release。使用時(shí)根據(jù)當(dāng)前工程配置情況選用對(duì)應(yīng)庫(kù)文件。
生成debug庫(kù)文件
終端:lipo -create debug下模擬器庫(kù)文件路徑 debug模式下真機(jī)庫(kù)文件路徑 -output 合并后庫(kù)文件路徑+合并后庫(kù)文件名.a
生成release庫(kù)文件
終端:lipo -create release下模擬器庫(kù)文件路徑 release模式下真機(jī)庫(kù)文件路徑 -output 合并后庫(kù)文件路徑+合并后庫(kù)文件名.a
6、驗(yàn)證
注:.a靜態(tài)庫(kù)文件沒(méi)有頭文件,需要自己手動(dòng)添加,找到剛才生成的四個(gè)文件,任選一個(gè),拷貝include文件夾,同合并好的庫(kù)文件一起添加到工程中才能正常使用。

驗(yàn)證
三、.framework靜態(tài)庫(kù)的制作
1、新建framework工程

新建framework工程
2、Build Active Architecture Only 設(shè)置為NO(不同機(jī)型的架構(gòu)不一樣,設(shè)置為NO適配不同機(jī)型)

Build Active Architecture Only 設(shè)置
3、暴露頭文件
注意:framework工程新建就有一個(gè).h文件,其實(shí)就是一個(gè)主頭文件。我們?cè)谥黝^文件中導(dǎo)入需要導(dǎo)入的頭文件,后面我們?cè)谑褂眠@個(gè)靜態(tài)庫(kù)的時(shí)候只需要導(dǎo)入這個(gè)主頭文件即可。就像我們使用很多第三方開(kāi)源框架一樣。

暴露頭文件
4、設(shè)置為靜態(tài)庫(kù)(默認(rèn)是動(dòng)態(tài)庫(kù))

設(shè)置靜態(tài)庫(kù)
5、合并庫(kù)文件,做法和.a靜態(tài)庫(kù)一樣。
注意:output文件后綴為.lipo;生成的.lipo文件去掉后綴名,改為與合并前文件一樣的名稱(chēng),拖入開(kāi)始運(yùn)行生成的一個(gè)文件中,替換原來(lái)的。

需要合并的文件
6、驗(yàn)證

驗(yàn)證
參考的地址已忘記,多謝大神