iOS如何生成framework

1.首先新建一個(gè)項(xiàng)目携添,選擇Cocoa touch Framework

2.然后隨便取一個(gè)名字

3.然后將要封裝成framework的代碼拖入工程


4.選擇工程文件>target第一項(xiàng)>Build Setting>搜索linking誊册,然后幾個(gè)需要設(shè)置的選項(xiàng)都顯現(xiàn)出來(lái)剩愧,首先是Dead Code Stripping設(shè)置為NO图柏,網(wǎng)上對(duì)此項(xiàng)的解釋如下刻蟹,大致意思是如果開(kāi)啟此項(xiàng)就會(huì)對(duì)代碼中的”dead”午衰、”unreachable”的代碼過(guò)濾割择,不過(guò)這個(gè)開(kāi)關(guān)是否關(guān)閉眷篇,似乎沒(méi)有多大影響,不過(guò)為了完整還原framework中的代碼荔泳,將此項(xiàng)關(guān)閉也未曾不可蕉饼。

The resulting executable will not include any “dead” or unreachable code

然后將Link With Standard Libraries關(guān)閉,我想可能是為了避免重復(fù)鏈接

最后將Mach-O Type設(shè)為Static Library玛歌,framework可以是動(dòng)態(tài)庫(kù)也可以是靜態(tài)庫(kù)椎椰,對(duì)于系統(tǒng)的framework是動(dòng)態(tài)庫(kù),而用戶制作的framework只能是靜態(tài)庫(kù)沾鳄。


5.然后將需要公開(kāi)的頭文件從Project中拖入Public慨飘,至于是否需要將私有的頭文件拖入Private,我覺(jué)得直接放在Project中即可,若是Private中有頭文件瓤的,打包以后的framework中會(huì)多出一個(gè)Private的文件夾包含著放入Private的頭文件休弃,不過(guò)我覺(jué)得如果是私有最好還是不要讓別人看到。


6.Build Settings ->Build Active Architecture Only設(shè)置為NO.?(圖中的選項(xiàng)如果設(shè)為YES圈膏,會(huì)導(dǎo)致其編譯時(shí)只生成當(dāng)前機(jī)器的框架塔猾;將其設(shè)置為NO后,發(fā)現(xiàn)用模擬器編譯后生成的framework同時(shí)包含x86_64和i386架構(gòu)稽坤。)


7.下面就開(kāi)始編譯了丈甸,先選擇Generic iOS Device,按下Command+B:Build一下的到的是支持真機(jī)的framework,然后隨意選擇一個(gè)模擬器再次Build一下得到支持模擬器的framework,找到Build后的framework

8.我們看到總共有兩個(gè)文件夾尿褪,上面是真機(jī)編譯生成的文件睦擂,下面是模擬器編譯生成的文件。

9.然后用命令行將下面兩個(gè)文件進(jìn)行合成(也可以單獨(dú)提供杖玲,不合并顿仇,合并了會(huì)導(dǎo)致包很大,各有優(yōu)缺點(diǎn)吧摆马,如果framework包不太大建議合并臼闻,否則還是提供兩個(gè))



將合成后的文件輸出,這里解釋一下這看似很復(fù)雜的命令:lipo -create+上面兩個(gè)文件的路徑 +-output+ 合成后文件的輸出路徑(直接使用模擬器或者真機(jī)的SDK的路徑即可囤采,不用再創(chuàng)建新的文件夾)

在開(kāi)發(fā)中述呐,導(dǎo)入一些靜態(tài)庫(kù)的時(shí)候經(jīng)常會(huì)要求我們?cè)贐uild Settings->Other Linker Flags設(shè)置-ObjC。

主要是因?yàn)镺C語(yǔ)言中類別(分類)蕉毯,Unix的標(biāo)準(zhǔn)靜態(tài)庫(kù)實(shí)現(xiàn)和Objective-C的動(dòng)態(tài)特性之間有一些沖突:OC沒(méi)有為每個(gè)函數(shù)(或者方法)定義鏈接符號(hào)市埋,它只為每個(gè)類創(chuàng)建鏈接符號(hào)。這樣當(dāng)在一個(gè)靜態(tài)庫(kù)中使用類別來(lái)擴(kuò)展已有類的時(shí)候恕刘,鏈接器不知道如何把類原有的方法和類別中的方法整合起來(lái)缤谎,就會(huì)導(dǎo)致你調(diào)用類別中的方法時(shí),出現(xiàn)錯(cuò)誤褐着。為了解決這個(gè)問(wèn)題坷澡,引入了-ObjC標(biāo)志,它的作用就是將靜態(tài)庫(kù)中所有的和對(duì)象相關(guān)的文件都加載進(jìn)來(lái)含蓉。

另外還有兩個(gè)方法频敛,分別是用來(lái)全部導(dǎo)入和部分導(dǎo)入。使用-all_load 或者-force_load標(biāo)志馅扣,它們的作用都是加載靜態(tài)庫(kù)中所有文件斟赚,不過(guò)all_load作用于所有的庫(kù),而-force_load后面必須要指定具體的文件差油。

11.如果framework內(nèi)部使用了圖片拗军,則需要建一個(gè)資源包文件夾任洞,并將改文件夾后綴名改為.bundle,然后將圖片放到這個(gè)文件夾中同framework一同提供給APP使用。

當(dāng)然在我們的framework里面加載本地圖片方法也有所變化发侵,示例代碼:

NSString *allPath = [[NSBundle mainBundle]pathForResource:name ofType:@"png"??? inDirectory:@"DFBankSDKResource.bundle"];

UIImage *image =? [UIImage imageWithContentsOfFile:allPath];

基礎(chǔ)概念和常用操作命令

靜態(tài)庫(kù): 鏈接時(shí)完整地拷貝至可執(zhí)行文件中交掏,被多次使用就有多份冗余拷貝。

動(dòng)態(tài)庫(kù):鏈接時(shí)不會(huì)拷貝至可執(zhí)行文件中刃鳄,運(yùn)行時(shí)動(dòng)態(tài)加載進(jìn)內(nèi)存盅弛,供程序調(diào)用,只加載一次叔锐,多個(gè)程序可以共用挪鹏。

1.設(shè)備的CPU架構(gòu)(指令集)

模擬器:

4s-5: i386

5s-6s Plus: x86_64

真機(jī)(iOS設(shè)備):

armv6: iPhone、iPhone 2愉烙、iPhone 3G讨盒、iPod Touch(第一代)、iPod Touch(第二代)

armv7: iPhone 3Gs齿梁、iPhone 4催植、iPhone 4s肮蛹、iPad勺择、iPad 2

armv7s: iPhone 5、iPhone 5c?

arm64: iPhone 5s伦忠、iPhone 6省核、iPhone 6 Plus、iPhone 6s昆码、iPhone 6s Plus气忠、iPad Air、iPad Air2赋咽、iPad mini2旧噪、iPad mini3...到現(xiàn)在

2.判斷framework或.a文件支持框架的命令:

查看framework

cd? /Users/.../xxxSDK.framework

lipo -info xxxSDK (不要加后綴)

---------------------------------------------------------------

查看.a

lipo -info? /Users/.../libXYPlatform.a

3.合并framework的命令:

lipo -create /Users/.../RKPlatform.framework/RKPlatform /Users/.../RKPlatform.framework/RKPlatform -output /Users/.../RKPlatform.framework/RKPlatform

前兩個(gè)是分別支持真機(jī)和模擬器的framework的路徑 -output后是合并后輸出可執(zhí)行文件的路徑

常見(jiàn)報(bào)錯(cuò)(待完善)

1.不支持當(dāng)前運(yùn)行設(shè)備的架構(gòu)類型

不支持當(dāng)前運(yùn)行設(shè)備的架構(gòu)類型報(bào)錯(cuò)圖示

2.APP項(xiàng)目和SDK項(xiàng)目中使用了同名文件

APP項(xiàng)目和SDK項(xiàng)目中使用了同名文件報(bào)錯(cuò)圖示

如何處理:詳細(xì)請(qǐng)查看 SDK開(kāi)發(fā)中如何解決sdk和app中都想使用某個(gè)第三發(fā)庫(kù)引發(fā)的沖突

3.通過(guò)lipo命令會(huì)發(fā)現(xiàn)真機(jī)版本值支持armv7 arm64這兩種架構(gòu),這意味著不支持armv7s架構(gòu)脓匿,即不支持iPhone 5 和5c(這兩個(gè)型號(hào)手機(jī)市場(chǎng)占有率應(yīng)該很低),如何解決這個(gè)問(wèn)題來(lái)支持armv7s架構(gòu)淘钟。

答:默認(rèn)的Architectures竟然不包含armv7s.

想要生成的庫(kù)支持armv7s,把a(bǔ)rmv7s添加到Architectures中,重新生成Framework即可

參考:https://www.aliyun.com/jiaocheng/417635.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市陪毡,隨后出現(xiàn)的幾起案子米母,更是在濱河造成了極大的恐慌,老刑警劉巖毡琉,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铁瞒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡桅滋,警方通過(guò)查閱死者的電腦和手機(jī)慧耍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蜂绎,你說(shuō)我怎么就攤上這事栅表。” “怎么了师枣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵怪瓶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我践美,道長(zhǎng)洗贰,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任陨倡,我火速辦了婚禮敛滋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘兴革。我一直安慰自己绎晃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布杂曲。 她就那樣靜靜地躺著庶艾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪擎勘。 梳的紋絲不亂的頭發(fā)上咱揍,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音棚饵,去河邊找鬼煤裙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛噪漾,可吹牛的內(nèi)容都是我干的硼砰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼欣硼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼题翰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起分别,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤遍愿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后耘斩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體沼填,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年括授,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坞笙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岩饼。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖薛夜,靈堂內(nèi)的尸體忽然破棺而出籍茧,到底是詐尸還是另有隱情,我是刑警寧澤梯澜,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布寞冯,位于F島的核電站,受9級(jí)特大地震影響晚伙,放射性物質(zhì)發(fā)生泄漏吮龄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一咆疗、第九天 我趴在偏房一處隱蔽的房頂上張望漓帚。 院中可真熱鬧,春花似錦午磁、人聲如沸尝抖。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)昧辽。三九已至,卻和暖如春喧半,著一層夾襖步出監(jiān)牢的瞬間奴迅,已是汗流浹背青责。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工挺据, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脖隶。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓扁耐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親产阱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子婉称,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容