1.創(chuàng)建靜態(tài)庫工程延赌,工程命名為BaseSDK,生成的.a文件名變成libBaseSDK劣光。
2.刪掉自動生成的文件BaseSDK.h? BaseSDK.m
3.添加你的實(shí)用類文件
4.添加Headers Phase
5.將暴露給外面用的頭文件加入進(jìn)來,加進(jìn)來后要移到public中去(不移到public中也沒錯(cuò)闹丐,只是下面第11步中不會出現(xiàn).h文件对蒲,需要從庫的源碼中找)
6.然后設(shè)置編譯模式萝快,打開Xcode菜單Product--->Scheme--->Edit Scheme屎即,改為release模式庙睡,因?yàn)樽罱K打包是要用release模式
7.設(shè)置Build Active Architecture Only
模擬器:iPhone4s~5 : i386 iPhone5s~6plus : x86_64
真機(jī):iPhone3gs~4s : armv7 iPhone5~5c : armv7s iPhone5s~6plus : arm64
如果Build Active Architecture Only設(shè)置為YES,那么編譯出來的.a靜態(tài)庫就只包含當(dāng)前設(shè)備的指令集技俐。
舉個(gè)例子:如果我們選擇iPhone 5模擬器編譯乘陪,則編譯出來的.a靜態(tài)庫只能用iPhone4s~5模擬器跑程序,用iPhone5s~6plus雕擂,則會報(bào)找不到x86_64的APPBaseSDK庫啡邑。
設(shè)置為NO,則會把所有指令集的都打包合并井赌。因此靜態(tài)庫有個(gè)缺點(diǎn)就是靜態(tài)庫包比源碼大很多谤逼。
8.設(shè)置最低支持版本
9.編譯生成靜態(tài)庫
編譯時(shí),需要用模擬器和真機(jī)各編譯一次仇穗,這樣Products目錄下的libBaseSDK.a靜態(tài)庫才會變?yōu)楹谏鞑浚益Ishow in Finder,可以進(jìn)入Products目錄下纹坐。
10.合并模擬器和真機(jī)靜態(tài)庫文件libBaseSDK.a贵涵,打開終端命令如下
lipo -create /Users/zhanglinfeng/Library/Developer/Xcode/DerivedData/BaseSDK-cexmrzesjuswutaldkedwjpnpxnk/Build/Products/Release-iphoneos/libBaseSDK.a /Users/zhanglinfeng/Library/Developer/Xcode/DerivedData/BaseSDK-cexmrzesjuswutaldkedwjpnpxnk/Build/Products/Release-iphonesimulator/libBaseSDK.a -output /Users/zhanglinfeng/Desktop/libBaseSDK.a
11.使用.a靜態(tài)庫
將靜態(tài)庫拖入新建的工程,我這里拖到下圖箭頭所指的UseA文件夾下(如果你要拖到其他目錄恰画,就要改Library Search Paths,后面我會介紹Library Search Paths路徑相關(guān)知識)瓷马,再將暴露給外面用的.h文件也拖入工程拴还,
注意:如果沒有include里的.h文件.那就從庫的源碼中挑出一些需要暴露的.h文件。
導(dǎo)入頭文件就可以使用了欧聘,如下圖
注意:如果要用到靜態(tài)庫中的category方法片林,需要設(shè)置Other Linker Flags為-ObjC(注 意大小寫,有些資料里大小寫搞錯(cuò)了坑死我了)怀骤。引入了-ObjC標(biāo)志费封,它的作用就是將靜態(tài)庫中所有的和對象相關(guān)的文件都加載進(jìn)來本來這樣就可以解決問題 了,不過在64位的Mac系統(tǒng)或者iOS系統(tǒng)下蒋伦,鏈接器有一個(gè) bug弓摘,會導(dǎo)致只包含有類別的靜態(tài)庫無法使用-ObjC標(biāo)志來加載文件。變通方法是使用-all_load 或者-force_load標(biāo)志痕届,它們的作用都是加載靜態(tài)庫中所有文件韧献,不過all_load作用于所有的庫末患,而-force_load后面必須要指定具 體的文件。