一体捏、靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的區(qū)別:
靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)是相對(duì)編譯期和運(yùn)行期的,靜態(tài)庫(kù)以 .a 和 .framework 形式存在,鏈接時(shí)窄做,靜態(tài)庫(kù)會(huì)被完整地復(fù)制到可執(zhí)行文件中,被多次使用就有多份冗余拷貝慰技;
動(dòng)態(tài)庫(kù)以 .dylib 和 .framework 形式存在椭盏,鏈接時(shí)不復(fù)制,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存吻商,供程序調(diào)用掏颊,系統(tǒng)只加載一次,多個(gè)程序共用艾帐,節(jié)省內(nèi)存乌叶,一般只能由系統(tǒng)創(chuàng)建。
靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的存在形式
靜態(tài)庫(kù): .a 和 .framework
動(dòng)態(tài)庫(kù): .dylib 和 .framework
注:項(xiàng)目中如果使用了自制的動(dòng)態(tài)庫(kù)柒爸,不能被上傳到 AppStore
靜態(tài)庫(kù)分為真機(jī)—Debug(調(diào)試)版本准浴、真機(jī)—Release(發(fā)布)版本、模擬器—Debug版本捎稚、模擬器—Release版本乐横;開發(fā)中一般都打包Release(發(fā)布)版本,將真機(jī)和模擬器版本合并阳藻,提供外界晰奖。
二、創(chuàng)建靜態(tài)庫(kù)
1腥泥、新建項(xiàng)目匾南,點(diǎn)擊iOS—Framework&Library—Cocoa Touch Static Library。
系統(tǒng)自動(dòng)生成以工程名命名的.h和.m文件蛔外,可自定義的在目錄下添加或刪除文件蛆楞。
注意目錄下Products文件夾有一個(gè).a文件為紅色,說(shuō)明文件并不存在夹厌。
這里我們將系統(tǒng)生成的.h和.m文件刪除豹爹。
2、點(diǎn)擊Build Phases—Copy Files矛纹,左下角點(diǎn)擊+號(hào)按鈕臂聋,添加你需要暴露的接口頭文件。
如果你在靜態(tài)庫(kù)工程中使用了category,那么你可能會(huì)碰到鏈接問(wèn)題孩等,解決的辦法就是需要同時(shí)在生成靜態(tài) ? ? ? ? ?庫(kù)的工程和使用靜態(tài)庫(kù)的工程中使用“-all_load”編譯選項(xiàng)艾君,即在對(duì)應(yīng)target的"Build Settings"中的“Other Linker Flags”選項(xiàng)添加“-all_load”。
注意:使用靜態(tài)庫(kù)的工程中是一定要加該編譯選項(xiàng)的肄方!至于生成靜態(tài)庫(kù)的工程中加不加沒(méi)有試過(guò)冰垄,不過(guò)建議還是加上該編譯選項(xiàng)。
3权她、點(diǎn)擊Build Phases左上角的+號(hào)按鈕虹茶,選擇New Headers Phase?選擇需要暴露出來(lái)的 .h 文件
4、查看Build Active architecture only 都改為NO
Yes表示只編譯選中模擬器設(shè)備對(duì)應(yīng)的架構(gòu)隅要,
No則為編譯所有模擬器設(shè)備支持的cup架構(gòu)
(Debug版本同理)
5蝴罪、分別在模擬器和真機(jī)下Command+B編譯一下,Products文件夾下的.a文件變?yōu)楹谏搬悖硎緞?chuàng)建成功洲炊,否則失敗
6、選中Products文件夾下的.a文件尼啡,右擊 “Show In Finder” 暂衡,查看制作好的 .a 文件
Debug-iphoneos 文件夾里面的東西是用在真機(jī)上的
Debug-iphonesimulator 文件夾里面的東西是用在模擬器上的
如果 Scheme 是 Release 模式,生成的文件夾就以 Release 開頭
7崖瞭、.a 文件能同時(shí)用在真機(jī)和模擬器上狂巢,需要進(jìn)行合并
在終端輸入指令: lipo -create ?模擬器.a文件的路徑 ?真機(jī).a文件的路徑 ?-output ?合并后的保存路徑(.a)
例如:lipo -create /Users/xxxx/Library/Developer/Xcode/DerivedData/StaticLib/Build/Products/Release-iphoneos/libxxx.a ? ?/Users/xxxx/Library/Developer/Xcode/DerivedData/StaticLib/Build/Products/Release-iphonesimulator/libxxx.a ?-output /Users/shelin/Desktop/StaticLib.a
8、使用:只需將.a和暴露出來(lái)的.h頭文件導(dǎo)入工程目錄下就可供外界使用书聚。