iOS開發(fā)Xcode7 Framework制作流程簡介

引言:? 在簡書混跡也有些時日了板惑,一直在關(guān)注IT界大牛們的分享裆熙,各位無私的分享端礼,對我裨益匪淺,也越來越喜歡這里入录,雖然我還是個iOS開發(fā)的“小白白”蛤奥,O(∩_∩)O~!不過呢我也會虛心學習并隨時記錄我的學習心得僚稿,點滴積累凡桥,不積跬步無以至千里,不積小流無以成江海蚀同,為了自己的夢唬血,起航吧!此過程中肯定會有瑕疵唤崭,不足拷恨,歡迎批評指正,我會虛心接受谢肾,如果也會給你帶來一點點的幫助腕侄,我非常榮幸!


?????? 1.創(chuàng)建一個新工程文件:

1. 新建Framework文件

如圖所示選擇上述的箭頭所指的Cocoa Touch Framework文件芦疏,第二個是靜態(tài)庫文件冕杠,也就是我們常說的.a文件。今天我們做的是Framework(框架)文件酸茴。

? ? ? 2.將自動生成的.h文件刪掉分预,因為我們既需要頭文件也需要實現(xiàn)文件,所以我們自己新建個類文件薪捍,繼承自NSObject即可笼痹,名字為與項目名稱相同,因為Framework制作完成使用的時候簡單酪穿、方便凳干。如下圖所示:

2.1 刪除自動生成的.h文件
2.2 刪除至垃圾桶

?????? 3. 在頭文件內(nèi)自定義一個測試方法,在實現(xiàn)文件內(nèi)實現(xiàn)此方法被济。

3.1 在頭文件自定義方法
3.2 在實現(xiàn)文件實現(xiàn)自定義方法

????? 4.下面進行整個工程的配置:

??????????? 4.1救赐、TARGETS - >Build Settings -> Architectures:添加 armv7s

4.1 配置Architectures參數(shù)

上述3步驟完成后會出現(xiàn)other選項只磷,點擊后如下圖操作:

4.2 點擊加號添加armv7s

注:此處為什么添加armv7s经磅?

??? 首先了解一下什么是ARM泌绣,ARM是微處理器,而armv6, armv7, armv7s是ARM CPU的不同指令集预厌,

armv6設(shè)備:iPhone阿迈, iPhone2, iPhone 3G配乓,第一代、第二代iPod Touch

armv7設(shè)備:iPhone 3GS惠毁,iPhone 4犹芹,iPhone 4S,iPad 鞠绰,iPad 2腰埂,iPod Touch 3G,iPod Touch 4

armv7s設(shè)備:iPhone 5蜈膨,iPad4

arm64設(shè)備:iPhone 5S屿笼,iPad Air,iphone6翁巍,iphone6plus驴一,iPhone6s,iPhone6s Plus等

? ? Xcode6更新后灶壶,默認不支持armv7s肝断,也就是默認不會編譯armv7s架構(gòu),雖然其處理器架構(gòu)會向下兼容驰凛,但是無法進行相關(guān)優(yōu)化操作胸懈。如果你提供的Framework默認不支持armv7s架構(gòu),但是使用者要支持armv7s架構(gòu)恰响,這時就會有沖突趣钱,Xcode無法構(gòu)建代碼原因是丟失某架構(gòu)(armv7s架構(gòu))鏈接庫的錯誤,所以為了避免沖突胚宦,F(xiàn)ramework默認支持armv7s架構(gòu)首有,使用過程中由使用者自行決定是否支持。

???????? 4.2"Build Active Architecture Only" 設(shè)置為 "NO"

4.3 設(shè)置Build active Architecture Only

注:Build active Architecture Only為什么設(shè)置為NO枢劝?

????? 在目標設(shè)備上绞灼,執(zhí)行設(shè)備對應(yīng)的指令集。Build active Architecture Only 設(shè)置為YES呈野,只會選擇編譯低矮、鏈接對應(yīng)的指令集,設(shè)置為NO時被冒,會涵蓋所有指令集军掂,在必要的時候選擇執(zhí)行對應(yīng)的指令集轮蜕。所以一般在Debug時會選擇設(shè)置為YES(效率會高點,雖然也沒什么卵用)蝗锥,Release時會選擇設(shè)置為NO跃洛,以支持所有可能的架構(gòu)。

???????? 4.3"Mach-O Type" 在iOS8之后终议,設(shè)置為靜態(tài)庫或者動態(tài)庫都可以上架App Store汇竭,一般來說動態(tài)庫要比靜態(tài)庫好。因為鏈接時不復制穴张,程序運行時由系統(tǒng)動態(tài)加載到內(nèi)存细燎,供程序調(diào)用,系統(tǒng)只會加載一次皂甘,多個程序公用玻驻,節(jié)省內(nèi)存。

注意:這是并不能動態(tài)更新App Store上架的應(yīng)用偿枕,因為上架App Store的應(yīng)用是經(jīng)過開發(fā)者證書簽名璧瞬,并上傳App Store再次簽名,拿到App Store的私鑰是不可能的渐夸,所以動態(tài)更新不可能實現(xiàn)嗤锉,蘋果也絕對不允許。

4.4 設(shè)置 Mach-O Type

???????? 4.4"iOS Deployment Target" 設(shè)置為 "iOS 8.0" 墓塌,這是支持最低運行iOS系統(tǒng)版本(可自行選擇档冬,但是要注意的是,iOS SDK中桃纯,已經(jīng)廢棄的方法酷誓,這個需要配合 Base SDK 設(shè)置)。

4.5 設(shè)置IOS Deployment Target

在Xcode7及以上版本中 Dead Code Stripping态坦、Link with Standard Libraries不再需要設(shè)置成NO盐数!

5.下面我們將頭文件暴露在外,實現(xiàn)文件隱藏起來伞梯,如下:

? ? ? 5.1 TARGETS - >Build Settings -> Build Phases中玫氢,將Headers中的Project內(nèi)的頭文件拖到Public中。如下:

5.1 暴露頭文件

6.制作Framework文件

????? 6.1來到工程目錄樹谜诫,Products下的文件都是紅色的漾峡,現(xiàn)在我們選中.framework文件,分別真機和模擬器運行一遍(成功運行)喻旷,然后Show in Finder 找到對應(yīng)的 .framework文件(上級目錄可以看出是真機還是模擬器文件夾)生逸,真機和模擬器運行成功的文件是在這倆個文件夾內(nèi)的。如下圖:

6.1 真機執(zhí)行文件
6.2 模擬器執(zhí)行文件

????? 6.2我們需要將上圖內(nèi)的兩個文件(FrameworkTest)合并成一個新的文件,并放在上述.framework文件中(真機or模擬器)槽袄,使之可以在模擬器和真機上均能運行烙无。這需要用到命令行工具:

6.3 利用命令行合成新文件

注:為了避免權(quán)限問題 請使用sudo(因為我公司的Mac有兩個用戶,當初我就因此問題無法合成遍尺。)

????? 命令行語句:sudo lipo -create (此處請?zhí)顚懻鏅CFrameworkTest文件路徑 上述的FrameworkTest文件) (此處填寫模擬器FrameworkTest文件路徑) -output? 自定義合成文件存儲路徑(合成文件的名字FrameworkTest)

?我存放在temp文件夾中截酷,如圖:

6.4 存放合成文件

將合成的FrameworkTest文件復制到上述真機or模擬機器編譯執(zhí)行的.framework文件夾內(nèi),將原來的FrameworkTest文件替換乾戏,至此我們就制作完成了Framework框架了迂苛,也就是當前的.framework文件。如圖:

6.5 替換原文件中的FrameworkTest文件

注:為什么要替換FrameworkTest文件鼓择?

????? 因為原來的FrameworkTest文件要么只能在真機上運行三幻,要么只能在模擬器上運行。合成文件為的就是讓.framework文件既能在真機上運行也能在模擬器上運行惯退,畢竟不能讓使用者只能在某個特定的情況下才可以使用赌髓,那樣就背離我們的初衷啦从藤!

????? 6.3將.framework文件添加到一個測試項目工程文件中(這個相信大家都知道催跪,這里就不贅述啦),在實現(xiàn)文件內(nèi)調(diào)用.framework內(nèi)部頭文件聲明的方法夷野,看是否會輸出我們NSLog的語句懊蒸,如果輸出即為成功。如下圖:

6.6 測試成功
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悯搔,一起剝皮案震驚了整個濱河市骑丸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妒貌,老刑警劉巖通危,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異灌曙,居然都是意外死亡菊碟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門在刺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逆害,“玉大人,你說我怎么就攤上這事蚣驼∑悄唬” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵颖杏,是天一觀的道長纯陨。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么队丝? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任靡馁,我火速辦了婚禮蝗茁,結(jié)果婚禮上肠槽,老公的妹妹穿的比我還像新娘礼预。我一直安慰自己扇单,他們只是感情好捞魁,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布凯傲。 她就那樣靜靜地躺著骂维,像睡著了一般楚殿。 火紅的嫁衣襯著肌膚如雪侠畔。 梳的紋絲不亂的頭發(fā)上结缚,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機與錄音软棺,去河邊找鬼红竭。 笑死,一個胖子當著我的面吹牛喘落,可吹牛的內(nèi)容都是我干的茵宪。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼瘦棋,長吁一口氣:“原來是場噩夢啊……” “哼稀火!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赌朋,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤凰狞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后沛慢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赡若,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年团甲,在試婚紗的時候發(fā)現(xiàn)自己被綠了逾冬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡伐庭,死狀恐怖粉渠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情圾另,我是刑警寧澤霸株,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站集乔,受9級特大地震影響去件,放射性物質(zhì)發(fā)生泄漏坡椒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一尤溜、第九天 我趴在偏房一處隱蔽的房頂上張望倔叼。 院中可真熱鬧,春花似錦宫莱、人聲如沸丈攒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巡验。三九已至,卻和暖如春碘耳,著一層夾襖步出監(jiān)牢的瞬間显设,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工辛辨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捕捂,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓斗搞,卻偏偏與公主長得像指攒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子榜旦,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

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