iOS 制作 framework

一:什么是framework

Framework是資源的集合,將靜態(tài)庫(kù)(iOS8以后可以是動(dòng)態(tài)庫(kù))和其頭文件包含到一個(gè)結(jié)構(gòu)中,讓Xcode可以方便地把它納入到你的項(xiàng)目中。
分為真機(jī)—Debug(調(diào)試)版本、真機(jī)—Release(發(fā)布)版本、模擬器—Debug版本、模擬器—Release版本;開(kāi)發(fā)中一般都打包Release(發(fā)布)版本,將真機(jī)和模擬器版本合并,提供外界。
在項(xiàng)目開(kāi)發(fā)的過(guò)程中,例如兩個(gè)公司之間業(yè)務(wù)交流,不可能把源代碼都發(fā)送給另一個(gè)公司,這時(shí)候?qū)⑺矫軆?nèi)容打包成framework,別人只能調(diào)用接口,而不能知道其中實(shí)現(xiàn)的細(xì)節(jié)。
framework對(duì)CPU架構(gòu)的支持,首先了解iOS設(shè)備CPU架構(gòu)方面的知識(shí),ARM是微處理器行業(yè)的一家知名企業(yè),arm處理器以體積小和高性能的優(yōu)勢(shì)在嵌入式設(shè)備中廣泛使用,幾乎所有手機(jī)都是使用它的。

模擬器:iphone4s-5 : i386 , iphone5s-6plus : x86_64。
真機(jī):iphone3gs-4s : armv7 , iphone5-5c : armv7s (靜態(tài)庫(kù)只要支持了armv7,就可以跑在armv7s的架構(gòu)上), iphone5s-6plus : arm64。
armv6, armv7, armv7s是ARM CPU的不同指令集,原則是向下兼容的。例如iPhone4S CPU支持armv7, 但它同時(shí)兼容armv6,只是使用armv6指令可能無(wú)法充分發(fā)揮它的特性。
###將GameSDK_Resource文件夾 和 FamesFWSDK.framework 加入項(xiàng)目。

二,制作Framework

1.打開(kāi)Xcode 創(chuàng)建一個(gè)framework工程。

按照下圖步驟創(chuàng)建一個(gè)framework。1選擇iOS平臺(tái)。2選擇Framework & Libarary欄下的 Cocoa Touch Framework。3點(diǎn)擊Next 進(jìn)行下一步

創(chuàng)建framework.png

按照下圖步驟1給Framework起個(gè)名字。2選擇語(yǔ)言O(shè)C或Swift。3點(diǎn)擊Next 進(jìn)行下一步

起名字.png

2.創(chuàng)建好framework 以后記得一下兩個(gè)配置:

---設(shè)置Build Active Architecture Only 的值 為NO:

配置1.png

---設(shè)置Mach-O Type 的值 為Static Library(靜態(tài)庫(kù)):

配置2.png

三,開(kāi)發(fā)使用Framework

可自行查閱,不做過(guò)多闡述。

生成framework合并真機(jī)和模擬器:http://www.itdecent.cn/p/298c54d51bdc

四,補(bǔ)充Framework,如果使用了category。

編譯過(guò)程:

從C代碼到可執(zhí)行文件經(jīng)歷的步驟是:源代碼 > 預(yù)處理器 > 編譯器 > 匯編器 > 機(jī)器碼 > 鏈接器 > 可執(zhí)行文件

在最后一步需要把.o文件和C語(yǔ)言運(yùn)行庫(kù)鏈接起來(lái),這時(shí)候需要用到ld命令。源文件經(jīng)過(guò)一系列處理以后,會(huì)生成對(duì)應(yīng)的.obj文件,然后一個(gè)項(xiàng)目必然會(huì)有許多.obj文件,并且這些文件之間會(huì)有各種各樣的聯(lián)系,例如函數(shù)調(diào)用。鏈接器做的事就是把這些目標(biāo)文件和所用的一些庫(kù)鏈接在一起形成一個(gè)完整的可執(zhí)行文件。Other linker flags設(shè)置的值實(shí)際上就是ld命令執(zhí)行時(shí)后面所加的參數(shù)

下面逐個(gè)介紹3個(gè)常用參數(shù):

-ObjC:加了這個(gè)參數(shù)后,鏈接器就會(huì)把靜態(tài)庫(kù)中所有的Objective-C類和分類都加載到最后的可執(zhí)行文件中

-all_load:會(huì)讓鏈接器把所有找到的目標(biāo)文件都加載到可執(zhí)行文件中,但是千萬(wàn)不要隨便使用這個(gè)參數(shù)!假如你使用了不止一個(gè)靜態(tài)庫(kù)文件,然后又使用了這個(gè)參數(shù),那么你很有可能會(huì)遇到ld: duplicate symbol錯(cuò)誤,因?yàn)椴煌膸?kù)文件里面可能會(huì)有相同的目標(biāo)文件,所以建議在遇到-ObjC失效的情況下使用-force_load參數(shù)。

-force_load:所做的事情跟-all_load其實(shí)是一樣的,但是-force_load需要指定要進(jìn)行全部加載的庫(kù)文件的路徑,這樣的話,你就只是完全加載了一個(gè)庫(kù)文件,不影響其余庫(kù)文件的按需加載

最后編輯于
?著作權(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)容