iOS 封裝 Framework、 制作 SDK 已烤、集成項(xiàng)目...

本文包含 :

Framework 介紹鸠窗;

封裝一個(gè)Framework 步驟;

封裝 Framework 時(shí) 胯究,項(xiàng)目 配置 說(shuō)明稍计;

Framework 內(nèi)部 引用 圖片資源 ;

Framework 內(nèi)部 引用 Xib裕循;

Framework 外部 引用 Framework 中 的圖片資源臣嚣;

Framework 外部 引用 Framework 中 的Xib資源净刮;

Framework 里面包含 UI控件,如一個(gè)小App 硅则,小插件淹父;

Framework 介紹:

iOS/Mac 開(kāi)發(fā) Framework 是一種庫(kù),

什么是庫(kù)怎虫?

共享代碼便是庫(kù)弹灭,實(shí)現(xiàn)代碼的復(fù)用,一般分為靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)揪垄。

靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的區(qū)別穷吮?

靜態(tài)庫(kù):鏈接時(shí)完整的拷貝到可執(zhí)行文件,多次使用多次拷貝饥努,造成冗余捡鱼,使包變的更大。
動(dòng)態(tài)庫(kù):鏈接時(shí)不復(fù)制酷愧,程序運(yùn)行時(shí)由系統(tǒng)加在到內(nèi)存中驾诈,供系統(tǒng)調(diào)用,系統(tǒng)加在一次溶浴,多次使用乍迄,共用節(jié)省內(nèi)存。

iOS/Mac 中的靜態(tài)庫(kù)士败?

后綴為: .a和.framework 文件

iOS/Mac 中的動(dòng)態(tài)庫(kù)闯两?

后綴為: .dylib和.framework 文件

iOS/Mac Framework 為什么即是動(dòng)態(tài)又是靜態(tài)?

系統(tǒng)的架構(gòu)是動(dòng)態(tài)的谅将,我們自己創(chuàng)建的是靜態(tài)的漾狼。

.a和.framework的區(qū)別是什么?

.a是單純的二進(jìn)制文件饥臂,.framework是二進(jìn)制文件+資源文件逊躁。
其中.a不能直接使用,需要.h文件配合隅熙,而.framework則可以直接使用
.framework = .a + .h + sorrceFile(資源文件)

為什么要使用靜態(tài)庫(kù)稽煤?

共享代碼,方便使用囚戚。
實(shí)現(xiàn)iOS 程序的模塊化酵熙,固定的業(yè)務(wù)模塊話,減少開(kāi)發(fā)的重復(fù)勞動(dòng)弯淘。
和別人分享代碼绿店,但又不想讓別人知道代碼的具體實(shí)現(xiàn)。
開(kāi)發(fā)第三方SDK 的需要庐橙。
有時(shí)候集成其他項(xiàng)目的時(shí)候 也可以使用假勿。

封裝一個(gè)Framework 步驟:

1.新建工程選擇iOS —> Cocoa Touch Framework

創(chuàng)建
命名Framework

2.Framwork庫(kù)文件工程創(chuàng)建完成以后,會(huì)自動(dòng)生成一個(gè).h文件作為頭文件使用态鳖。

我這里這個(gè)叫 testNewFramwork.h
當(dāng)我們寫(xiě)好的源文件很多的時(shí)候转培,為了使用方便,往往我們會(huì)自己創(chuàng)建一個(gè).h文件浆竭。當(dāng)源文件中已經(jīng)有了.h文件的時(shí)候浸须,我們就不需要Framwork庫(kù)文件自動(dòng)生成.h文件。刪除即可邦泄。
刪除 系統(tǒng)自動(dòng)生成的 testNewFramwork.h 文件删窒。


刪除 自動(dòng)生成的 頭文件

注意: 刪除 系統(tǒng)自動(dòng)生成的 testNewFramwork.h 文件 會(huì)有一個(gè)警告
原因是項(xiàng)目需要一個(gè)和工程名同名的頭文件。


警告

添加一個(gè)同名文件即可


解決警告

3.引入 需要封裝到 Framwork 工程文件

引入內(nèi) img 圖片 并顯示
引入內(nèi) xib 文件 并顯示

因?yàn)?Framwork 工程是沒(méi)有自動(dòng)導(dǎo)入 系統(tǒng)的 UIKit.framwork 顺囊,我們Framwork里面是用到了UI控件的肌索,所以需要手動(dòng)導(dǎo)入 系統(tǒng)UI庫(kù)。否則 封裝完畢特碳,調(diào)用該庫(kù)的時(shí)候诚亚,里面的 UI控件是不可見(jiàn)的。

導(dǎo)入U(xiǎn)IKit.framwork

最后 工程目錄 如下:


工程目錄

4.配置 Framwork

(1).Build Active Architecture Only 設(shè)置為NO的意思是當(dāng)前打包的.framework支持所有的設(shè)備.否則打包時(shí)只能用當(dāng)前版本的模擬器或真機(jī)運(yùn)行.


配置

(2).Build Setting 搜索linking 設(shè)置Dead Code Stripping 為NO是編譯選項(xiàng)優(yōu)化,包瘦身,(可不改) Mach-O Type 選中StaticLibrary (靜態(tài)庫(kù)) Xcode默認(rèn)是動(dòng)態(tài)庫(kù).


配置

(3). 設(shè)置framework最低支持的版本.


配置

(4). 將需要呈現(xiàn)給來(lái)的頭文件,直接從Project拖到Public中. 不想呈現(xiàn)出來(lái)的.h文件不建議拖到Private中. 放在project中即可


配置

5.編譯 Framwork

進(jìn)行編譯之前應(yīng)該設(shè)置為release模式


編譯
編譯

6.真機(jī)版本和模擬器版本framework 合并

XCode12之前:
編譯模擬器靜態(tài)庫(kù)支持i386 x86_64兩架構(gòu)
編譯真機(jī)靜態(tài)庫(kù)支持armv7 arm64兩架構(gòu)
使用lipo -create -output命令可以將兩個(gè)庫(kù)合并成一個(gè)支持模擬器和真機(jī)i386 x86_64 armv7 arm64四種架構(gòu)的胖子庫(kù)午乓。

XCode12編譯的模擬器靜態(tài)庫(kù)也支持了arm64站宗,導(dǎo)致出現(xiàn)真機(jī)庫(kù)和模擬器庫(kù)不能合并的問(wèn)題。

have the same architectures (arm64) and can't be in the same fat output file
模擬器編譯時(shí)候:
設(shè)置Build Setting --> Excluded Architectures --> Release --> 添加上 arm64

來(lái)到工程目錄樹(shù)益愈,Products下的文件都是紅色的梢灭,現(xiàn)在我們選中.framework文件棍苹,分別真機(jī)和模擬器運(yùn)行一遍(成功運(yùn)行)
然后Show in Finder 找到對(duì)應(yīng)的 .framework文件(上級(jí)目錄可以看出是真機(jī)還是模擬器文件夾)
真機(jī)和模擬器運(yùn)行成功的文件是在這倆個(gè)文件夾內(nèi)的缤底。

合并
合并

內(nèi)部分為Debug版本和Release版本,同時(shí)兩者有分為真機(jī)版本和模擬器版本framework(iphoneos后綴代表真機(jī)版本橙依,iphonesimulator后綴代表模擬器)

(1).查看架構(gòu)信息
打開(kāi)終端使用命令行 lipo -info 查看framework架構(gòu)信息
終端 命令行 lipo -info 空格 framework 地址

取地址

真機(jī)版本

取架構(gòu)信息

模擬器版本

取架構(gòu)信息

(2).合并真機(jī)模擬器版本
因?yàn)橐陨汐@取的framework只能在對(duì)應(yīng)的版本上運(yùn)行(即真機(jī)只能在設(shè)備上運(yùn)行模擬器版本只能在模擬器上面運(yùn)行使用)所以需要合并為通用版本
命令行語(yǔ)句:sudo lipo -create 空格 (此處請(qǐng)?zhí)顚?xiě)真機(jī)testNewFramework文件路徑) 空格 (此處填寫(xiě)模擬器testNewFramework文件路徑) 空格 -output 空格 自定義合成文件存儲(chǔ)路徑(合成文件的名字testNewFramework)

合并
合并

查看合成的testNewFramework架構(gòu)信息


合并

替換

合并

小知識(shí)點(diǎn) :

為啥要合并 枣接,架構(gòu)信息 是什么意思 颂暇?
首先了解一下什么是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等

至此 封裝 Framework 完成。


Framework接入主程序

1.拖入主程序

拖入程序
拖入完成

2.引入Framework修壕,否則取不到Framework的圖片等資源

TARGETS —> Build Phases


引入

主程序 創(chuàng)建個(gè)導(dǎo)航控制器 然后點(diǎn)擊ViewController 跳轉(zhuǎn)到 Framework 中的 View1Controller 視圖控制器

圖例
圖例
圖例
圖例

外部--主程序 --調(diào)用Framework中的資源

調(diào)用

至此 使用 Framework 完成愈捅。

END.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市慈鸠,隨后出現(xiàn)的幾起案子蓝谨,更是在濱河造成了極大的恐慌,老刑警劉巖林束,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件像棘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡壶冒,警方通過(guò)查閱死者的電腦和手機(jī)缕题,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)胖腾,“玉大人烟零,你說(shuō)我怎么就攤上這事∠套鳎” “怎么了锨阿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)记罚。 經(jīng)常有香客問(wèn)我墅诡,道長(zhǎng),這世上最難降的妖魔是什么桐智? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任末早,我火速辦了婚禮,結(jié)果婚禮上说庭,老公的妹妹穿的比我還像新娘然磷。我一直安慰自己,他們只是感情好刊驴,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布姿搜。 她就那樣靜靜地躺著寡润,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舅柜。 梳的紋絲不亂的頭發(fā)上梭纹,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音业踢,去河邊找鬼栗柒。 笑死礁扮,一個(gè)胖子當(dāng)著我的面吹牛知举,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播太伊,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼雇锡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了僚焦?” 一聲冷哼從身側(cè)響起锰提,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎芳悲,沒(méi)想到半個(gè)月后立肘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡名扛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年谅年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肮韧。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡融蹂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出弄企,到底是詐尸還是另有隱情超燃,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布拘领,位于F島的核電站意乓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏约素。R本人自食惡果不足惜届良,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望业汰。 院中可真熱鬧伙窃,春花似錦、人聲如沸样漆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鳍怨,卻和暖如春呻右,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鞋喇。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工声滥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人侦香。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓落塑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親罐韩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子憾赁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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

  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱(chēng)項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明先生_x閱讀 15,968評(píng)論 3 119
  • 這是瓜甜的第一篇原創(chuàng)文章 起名叫做瓜甜散吵,完全是因?yàn)樾∨r(shí)代龙考,一個(gè)十分喜歡的男孩子給我起的綽號(hào) 我大名叫做田甜,...
    瓜田田的小世界閱讀 285評(píng)論 0 1
  • 前幾日矾睦,老公興匆匆地告訴我晦款,他的彩票中了五個(gè)數(shù)字,是三等獎(jiǎng)枚冗,單注獎(jiǎng)金是三千元缓溅,他中了三注,加起來(lái)是九千元官紫,我頓時(shí)歡...
    路語(yǔ)旁集閱讀 225評(píng)論 0 0
  • 2018年3月11日下午15時(shí)52分肛宋。人民大會(huì)堂會(huì)場(chǎng)頓時(shí)響起熱烈的掌聲,《中華人民共和國(guó)憲法修正案》通過(guò)束世,我們進(jìn)入...
    李語(yǔ)昕閱讀 424評(píng)論 0 1
  • 剛才突發(fā)奇想酝陈,想到“a.js中定義的函數(shù)可以在b.js中調(diào)用嗎?”這個(gè)問(wèn)題毁涉,于是親自實(shí)驗(yàn)了一下沉帮。 寫(xiě)完這個(gè)demo...
    趁你還年輕233閱讀 219評(píng)論 2 1