iOS自制framework

最近公司需要寫(xiě)自己的framework,從未接觸過(guò)的我頓時(shí)頭腦一片空白,想想還不是要做。那就開(kāi)工吧。到處查資料,跳過(guò)了度娘,直沖google,找到的都是一篇篇的長(zhǎng)篇大論,突然覺(jué)得我餓了。還是先不說(shuō)這些打擊士氣了。早早寫(xiě)完吃飯飯去。

1.新建一個(gè)framework-->Next-->命名為XMSDK-->保存

2.添加一個(gè)類(lèi),用于測(cè)試

3.將你要暴露到外面的文件,也就是讓調(diào)用的文件放倒public里面,右鍵Move to public Group即可。

4.在framework創(chuàng)建時(shí)默認(rèn)建立的頭文件里導(dǎo)入外部需要用的文件

5.在模擬器和真機(jī)下分別build。XMSDK.framework會(huì)由紅變黑。

6.由于真機(jī)和模擬器分別會(huì)生成不同的framework,so,在開(kāi)發(fā)工程中最好是將其合并。先穿插講一下合并方法:

對(duì)XMSDK.framework文件 ?show in Finder,找到其路徑

然后打開(kāi)終端,運(yùn)行如下命令行。

7、lipo -create真機(jī)framework路徑/XMSDK 模擬器framework路徑/XMSDK -output XMSDK

然后可以用 lipo -info Test2SDK 查看指令集

8、前往~/(home文件、根目錄)找到XMSDK,然后替換掉真機(jī)和模擬器里面的這個(gè)文件


9.最后將framework拖入到工程中使用

10.導(dǎo)入framework后,使用里面的類(lèi)及其方法,按道理來(lái)說(shuō)已經(jīng)ok了,但各位到這里終于快好了,準(zhǔn)備run時(shí)發(fā)現(xiàn)問(wèn)題一大堆。但我是很負(fù)責(zé)的啦。咱接著往下看!

11.可能出現(xiàn)的錯(cuò)誤有這兩種:

(1).真機(jī)運(yùn)行錯(cuò)誤

解決方案:在XMTest-->General-->Embedded Binaries-->添加我們的XMSDK.framework庫(kù)

再次運(yùn)行看看,ok,真機(jī)問(wèn)題解決。

(2).模擬器錯(cuò)誤(注意:模擬器運(yùn)行時(shí)也需要先走(1)這一步)

模擬器錯(cuò)誤分兩種情況:(個(gè)人目前只遇到了這兩種情況,有不同的望分享哈)

第一種是iphone5c及其以前的版本,報(bào)Undefined symbols for architecture i386錯(cuò)誤

第二種是iphone5s及其以后的版本,報(bào)Undefined symbols for architecture x86_64錯(cuò)誤

以上兩種錯(cuò)誤,不難看出都是處理器指令集的問(wèn)題,所以解決辦法都是一樣的。還記得前面的7/8/9這三個(gè)步驟嗎,不記得就鼠標(biāo)滾動(dòng)起來(lái)。沒(méi)錯(cuò),同樣的步驟,再走兩遍。分別把模擬器選擇iphone5/iphone5s,build生成相對(duì)應(yīng)的framework,同樣合并真機(jī)的framework。把最后一次的framework添加到項(xiàng)目中。(其實(shí)這里我在想咱們第一次合并的時(shí)候就直接把這兩種情況考慮了,然后直接生成同時(shí)支持i386 x86_64 armv7 arm64的。這樣是不是會(huì)方便點(diǎn),有待各位去嘗試。嘿嘿)

ok,我已完成這一步,所以效果也出來(lái)了。模擬器也不報(bào)錯(cuò)啦。

12.基本的framework這就完成了,以后就可以直接在XMSDK.framework里面添加?xùn)|西了。在此也在提醒一下,如果framework里面有分類(lèi),那么使用的時(shí)候還會(huì)報(bào)錯(cuò),報(bào)其找不到相應(yīng)的方法。沒(méi)事,我已經(jīng)找到解決辦法啦。如下操作:

Build Settings --> Linking->Other Linker Flags 中加上 -ObjC 或者-all_load 。

它的作用就是將靜態(tài)庫(kù)中所有的和對(duì)象相關(guān)的文件都加載進(jìn)來(lái),不過(guò)在64位的Mac系統(tǒng)或者iOS系統(tǒng)下,鏈接器有一個(gè)bug,會(huì)導(dǎo)致只包含有類(lèi)別的靜態(tài)庫(kù)無(wú)法使用-ObjC標(biāo)志來(lái)加載文件。變通方法是使用-all_load 或者-force_load標(biāo)志,它們的作用都是加載靜態(tài)庫(kù)中所有文件,不過(guò)-all_load作用于所有的庫(kù),而-force_load后面必須要指定具體的文件。

好了。大家應(yīng)該都能看懂吧,如果能幫到你那就給我來(lái)個(gè)贊吧,??。已經(jīng)餓得沒(méi)力氣了。好吃好喝的各位帥哥美女砸過(guò)來(lái)吧。我接著。

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 如果你想將你開(kāi)發(fā)的控件與別人分享,一種方法是直接提供源代碼文件。然而,這種方法并不是很優(yōu)雅。它會(huì)暴露所...
    和玨貓閱讀 49,126評(píng)論 53 145
  • 前言 如果你想將你開(kāi)發(fā)的控件與別人分享,一種方法是直接提供源代碼文件。然而,這種方法并不是很優(yōu)雅。它會(huì)暴露所有的實(shí)...
    大沖哥閱讀 1,436評(píng)論 0 4
  • (原文:How to Create a Framework for iOS作者:Sam Davies 譯者:Mr_...
    Yaanco閱讀 2,477評(píng)論 4 5
  • 如果你想將你開(kāi)發(fā)的控件與別人分享,一種方法是直接提供源代碼文件。然而,這種方法并不是很優(yōu)雅。它會(huì)暴露所有的實(shí)現(xiàn)細(xì)節(jié)...
    小熱狗閱讀 3,615評(píng)論 3 9
  • 原文鏈接在上一篇教程(中譯版)中,你學(xué)到了怎么樣創(chuàng)建一個(gè)可復(fù)用的圓形旋鈕控件。然而你可能不清楚怎樣讓其他開(kāi)發(fā)者更方...
    _冷憶閱讀 2,601評(píng)論 9 5

友情鏈接更多精彩內(nèi)容