如果我們有些功能要給別人用透绩,但是又不想公開(kāi)源代碼,比如百度地圖等壁熄,這時(shí)候我們就可以打包成庫(kù)供別人使用帚豪。
庫(kù)分靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)兩種:
靜態(tài)庫(kù):以.a 和 .framework為文件后綴名。
動(dòng)態(tài)庫(kù):以.tbd(之前叫.dylib) 和 .framework 為文件后綴名草丧。
靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的區(qū)別
靜態(tài)庫(kù):鏈接時(shí)會(huì)被完整的復(fù)制到可執(zhí)行文件中狸臣,被多次使用就有多份拷貝。
動(dòng)態(tài)庫(kù):鏈接時(shí)不復(fù)制昌执,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存烛亦,系統(tǒng)只加載一次诈泼,多個(gè)程序共用(如系統(tǒng)的UIKit.framework等),節(jié)省內(nèi)存此洲。
蘋果規(guī)定不讓使用自己的動(dòng)態(tài)庫(kù)厂汗,否則審核就無(wú)法通過(guò)。
但是現(xiàn)實(shí)中集成了動(dòng)態(tài)庫(kù)也能上線審核通過(guò)呜师,可能我比較幸運(yùn)娶桦。
我們先來(lái)看一下iOS設(shè)備有哪些架構(gòu),因?yàn)橄旅嬉玫剑?/h3>
模擬器:
iPhone4s-iPnone5:i386
iPhone5s-iPhone7 Plus:x86_64
真機(jī):
iPhone3gs-iPhone4s:armv7
iPhone5-iPhone5c:armv7s
iPhone5s-iPhone7 Plus:arm64
支持armv7的靜態(tài)庫(kù)可以在armv7s上正常運(yùn)行汁汗。
一衷畦、 .a靜態(tài)庫(kù)的制作
-
1、先創(chuàng)建一個(gè)新的Xcode工程TestStaticLibrary知牌,需要選擇Cocoa Touch Static Library這個(gè)模板:
2祈争、創(chuàng)建完成后刪除TestStaticLibrary.h和TestStaticLibrary.m兩個(gè)沒(méi)有用的文件
-
3、新建文件或者從其它項(xiàng)目中拖入想要打包的文件角寸,這里拖入SmartCLLocationManager.h和SmartCLLocationManager.m兩個(gè)文件
-
3菩混、選擇添加公開(kāi)頭文件
為了讓使用者知道有哪些方法可以用,我們需要公開(kāi)頭文件扁藕,這里我們公開(kāi)SmartCLLocationManager.h:
-
4沮峡、修改配置
我們需要把 Build Active Architecture Only
修改為NO,否則生成的靜態(tài)庫(kù)就只支持當(dāng)前選擇設(shè)備的架構(gòu)亿柑。
-
5邢疙、然后編譯
我們?cè)?code>debug和Release
下分別選擇 Generic iOS Device
和 任意一個(gè)模擬器
各編譯一次,編譯完后我們會(huì)看到工程中Products文件夾下的libTestStaticLibrary.a由紅色變成了黑色望薄,然后 show in finder
坤候,看看生成的文件:
模擬器:
iPhone4s-iPnone5:i386
iPhone5s-iPhone7 Plus:x86_64
真機(jī):
iPhone3gs-iPhone4s:armv7
iPhone5-iPhone5c:armv7s
iPhone5s-iPhone7 Plus:arm64
支持armv7的靜態(tài)庫(kù)可以在armv7s上正常運(yùn)行汁汗。
2祈争、創(chuàng)建完成后刪除TestStaticLibrary.h和TestStaticLibrary.m兩個(gè)沒(méi)有用的文件
3菩混、選擇添加公開(kāi)頭文件
為了讓使用者知道有哪些方法可以用,我們需要公開(kāi)頭文件扁藕,這里我們公開(kāi)SmartCLLocationManager.h:
4沮峡、修改配置
我們需要把 Build Active Architecture Only
修改為NO,否則生成的靜態(tài)庫(kù)就只支持當(dāng)前選擇設(shè)備的架構(gòu)亿柑。
5邢疙、然后編譯
我們?cè)?code>debug和Release
下分別選擇 Generic iOS Device
和 任意一個(gè)模擬器
各編譯一次,編譯完后我們會(huì)看到工程中Products文件夾下的libTestStaticLibrary.a由紅色變成了黑色望薄,然后 show in finder
坤候,看看生成的文件:
我們看到它為真機(jī)和模擬器都生成了debug
和Release
版本的.a靜態(tài)庫(kù)亲雪。里面都包含我們選擇公開(kāi)的頭文件嘿期。
我們來(lái)看看靜態(tài)庫(kù)支持的框架:命令為lipo -info 靜態(tài)庫(kù)名字
我們看到芒澜,Debug-iphoneos
里面的靜態(tài)庫(kù)支持的架構(gòu)有armv7
和arm64
所以它只能用于真機(jī),在模擬器上會(huì)報(bào)錯(cuò)卧须。Debug-iphonesimulator
里面的靜態(tài)庫(kù)支持的架構(gòu)有i386
和x86_64
聪廉,所以它只能用于模擬器,在真機(jī)上會(huì)報(bào)錯(cuò)故慈。
如果想要讓模擬器和真機(jī)通用一個(gè)靜態(tài)庫(kù),我們可以使用終端命令來(lái)實(shí)現(xiàn)框全。命令格式:lipo -create 第一個(gè).a文件的絕對(duì)路徑 第二個(gè).a文件的絕對(duì)路徑 -output 最終的.a文件路徑
:
未完待續(xù)察绷。
首推:record,就是上傳時(shí)候有點(diǎn)慢津辩。以下鏈接拿好不寫拆撼。親測(cè)好用容劳。