打包Framework,使用bundle,Framework聯(lián)調(diào)

文章主要介紹怎么打包靜態(tài)庫(kù)(這里只說Framework),打包bundleFramework聯(lián)調(diào)租悄,以及項(xiàng)目中遇到的一些關(guān)于Framework,bundle的問題红氯。

什么是靜態(tài)庫(kù),估計(jì)很多人不會(huì)怎么關(guān)心餐胀,很多也能說出個(gè)大概棚蓄。這里三兩句就過了堕扶。

  • 靜態(tài)庫(kù)
    以”.a”或者“.framework”為文件后綴名
    靜態(tài)庫(kù)鏈接時(shí)會(huì)被完整的復(fù)制到可執(zhí)行文件中,被多次使用就有多份拷貝梭依。
  • 動(dòng)態(tài)庫(kù)
    以”.dylib”或者“.framework”為文件后綴名
    動(dòng)態(tài)庫(kù)鏈接時(shí)不復(fù)制稍算,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存,供程序調(diào)用役拴。而且系統(tǒng)只加載一次糊探,多個(gè)程序共用,節(jié)省內(nèi)存河闰。

如何打包Framework

  • 新建一個(gè)Cocoa Touch Framework工程
新建Framwork工程
  • 在新建項(xiàng)目中放入自己代碼


    靜態(tài)庫(kù)設(shè)置
項(xiàng)目結(jié)構(gòu)
暴露的接口
把頭文件暴露出來
在.h文件將所有項(xiàng)目需要外露的頭放出來

這里說兩句科平,一般網(wǎng)上的教程都是直接放一張簡(jiǎn)單的項(xiàng)目結(jié)構(gòu),跟一個(gè)簡(jiǎn)單的項(xiàng)目實(shí)現(xiàn)文件姜性。但是很多時(shí)候瞪慧,我們要處理的是一整個(gè)項(xiàng)目的內(nèi)容。這里是我集成完一個(gè)AR項(xiàng)目之后的感受污抬。

(1)原項(xiàng)目中引用到的Framework汞贸,是不會(huì)被你自己打包出來的Framework引用的,所以你打包的Framewrok中用到的第三方Framwork印机,在新的項(xiàng)目中還要再次導(dǎo)入引用。這個(gè)可以憑借平時(shí)你使用別用的Framework的時(shí)候也是需要多導(dǎo)入一些系統(tǒng)的Framework门驾,不然就會(huì)出現(xiàn)無法找到一個(gè)庫(kù)方法的錯(cuò)誤射赛。
(2)原項(xiàng)目中引用到的.a靜態(tài)庫(kù)文件,是會(huì)被打包進(jìn)去我們的Framework的奶是,所以當(dāng)你把.a文件在Framework引用到楣责,就不要在新項(xiàng)目中使用,不然會(huì)出現(xiàn)重復(fù)引用的錯(cuò)誤聂沙。
(3)注意Build Phases里面的Compile Source這里會(huì)出現(xiàn)原項(xiàng)目里面使用到的.m實(shí)現(xiàn)文件(C++的實(shí)現(xiàn)文件也會(huì)在這里),Link Binary With Libraries里面會(huì)出現(xiàn)原項(xiàng)目中引用到的庫(kù)秆麸,Header會(huì)出現(xiàn)原項(xiàng)目中使用的.h頭文件(C++的頭文件也會(huì)在這里)。這里的一個(gè)作用是把你需要暴露的頭放到Public里面及汉,但是還有一個(gè)作用就是沮趣,可以把部分會(huì)引用到你自己的實(shí)現(xiàn)文件的第三方文件去掉關(guān)聯(lián),這里去掉關(guān)聯(lián)的意思是坷随,將不會(huì)打包進(jìn)你的Framework房铭。

這里舉個(gè)例子:
例如你的一個(gè)控制器驻龟,需要用到AppDelegate這個(gè)類,但是你如果在Framework里面添加了AppDelegate缸匪,那么就會(huì)與你新項(xiàng)目中的AppDelegate有沖突翁狐,這時(shí)候怎么辦呢?你的Framework中的AppDelegate不用刪掉凌蔬,只需要在我剛剛說的Compile Source``Header中刪掉AppDelegate的文件露懒,然后將你需要的AppDelegate的內(nèi)容添加到新項(xiàng)目的AppDelegate中就可以了。這里只是提出一種解決方法的思路砂心,如果有更好的思路可以在下面給我留言懈词。

關(guān)于Framework我一開始不太會(huì)用,所以試著把xib计贰,圖片資源放到了Framework里面钦睡,后來從網(wǎng)上找來說這些資源都是放在bundle里面。Framework包內(nèi)容是有這些圖片和xib資源的躁倒,但是當(dāng)你導(dǎo)入到工程里面荞怒,你就看不見這些內(nèi)容,所以估計(jì)這種想把資源放在Framework里面是不可行的吧秧秉。

如何打包Bundle

  • 點(diǎn)擊工程在TARGETS下方的+,在masOS選擇bundle
  • Build Settings修改Base SDK->Latest iOS
  • Build Phases將需要的xib褐桌,圖片資源添加到Copy Bundle Resources
  • Combine High Resolution ArtworkCOMBINE_HIDPI_IMAGES
    這兩項(xiàng)一個(gè)是OSX下的名字,一個(gè)是iOS下的名字,改為NO才可以存圖片,不然存進(jìn)去是tiff
  • 然后build就會(huì)生成需要bundle文件

注意:
1.這里有兩種方式導(dǎo)入原項(xiàng)目中的文件。

  • 用'Asset.xcassets'導(dǎo)入圖片象迎,然后在Copy Bundle Resources里面添Asset.xcassets
  • 直接將圖片導(dǎo)入項(xiàng)目荧嵌,然后在'Copy Bundle Resources'添加

第一種

如果你只是單純的想把你原項(xiàng)目中的xib中用到的圖片資源打包進(jìn)bundle你最好是使用第一種,而且是將原項(xiàng)目的整個(gè)Asset.xcassets內(nèi)容復(fù)制過去砾淌。因?yàn)橛袝r(shí)候我們?yōu)榱碎_發(fā)的方便啦撮,把圖片資源放入Asset.xcassets之后,還會(huì)進(jìn)行名字的修改汪厨,這個(gè)時(shí)候我們xib使用的只是一個(gè)假的圖片的名字赃春,如果你之間將你們UI同事給的切圖文件夾全部?jī)?nèi)容拿過去用。這個(gè)時(shí)候可能會(huì)出現(xiàn)
Could not load the "ic_lingqujiangli_13" image referenced from a nib in the bundle with identifier "com.Gemo.InterestingARBundle"
這樣子的錯(cuò)誤劫乱。因?yàn)槟闶褂玫膱D片的名字是一個(gè)假的名字织中,可以理解為Xcode為我們做的一個(gè)索引,讓我們?nèi)フ业秸媸堑膱D片衷戈,然而如果你只把真實(shí)名字圖片放進(jìn)去狭吼,它是找不到,因此要放一個(gè)Asset.xcassets殖妇。但是刁笙,你會(huì)發(fā)現(xiàn),你在代碼里面使用類似
[UIImage imageNamed:@"ImageName"];會(huì)奇怪的找不到圖片。也是同樣的報(bào)出上面的提示采盒。你會(huì)想旧乞,我不是把圖片放在了Asset.xcassets里面并且加進(jìn)去了嗎?

第二種磅氨。
你在原項(xiàng)目里面使用代碼去獲取圖片尺栖,你可以思考一下他會(huì)從哪些地方去拿這個(gè)圖片?我可以告訴你烦租,如果在新項(xiàng)目中添加這個(gè)圖片資源是可以獲取到的延赌。但是你如果給別人打包的一個(gè)Frameworkbundle文件,難道你還想單獨(dú)給別人幾張圖片嗎叉橱?所以這時(shí)候我們需要將圖片資源單獨(dú)添加到bundleCopy Bundle Resources中挫以。

把同一圖片用兩種方式添加,并且修改Asset中圖片名字

  • 如何使用bundle中的xib,圖片資源
    因?yàn)楝F(xiàn)在讀取圖片跟xib的資源都不是MainBundle中獲取了窃祝,所以需要對(duì)源頭進(jìn)行切換掐松。

  • xib讀取方式
    - (instancetype)init{
    NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"TestFrameworkBundle" ofType:@"bundle"]];
    self = [super initWithNibName:NSStringFromClass([self class]) bundle:bundle];
    return self;
    }

  • 圖片讀取方式(代碼中使用圖片)
    [UIImage imageNamed:@"TestFrameworkBundle.bundle/ic_zuobiao"];

如何將打包的Framewoek,bundle粪小,和測(cè)試工程整合一起聯(lián)調(diào)

  • 在當(dāng)前的Framework工程在添加一個(gè)target->Single View Application
  • TARGETS中選中新加的app,設(shè)置Build Phases為上面生成的Framework,Copy Bundle Resources為上面生成的bundle大磺,可以用右鍵查看framework和bundle的路徑,如果看到上一級(jí)目錄的是Debug或者Release開頭探膊,那你就可以放心的調(diào)試了杠愧。
app target

最后的最后 附上本文代碼地址 覺得好的同學(xué)幫忙點(diǎn)個(gè)star 謝謝??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赢笨,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,331評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绳瘟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡姿骏,警方通過查閱死者的電腦和手機(jī)稽荧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來工腋,“玉大人,你說我怎么就攤上這事畅卓∩醚” “怎么了?”我有些...
    開封第一講書人閱讀 167,755評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵翁潘,是天一觀的道長(zhǎng)趁冈。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么渗勘? 我笑而不...
    開封第一講書人閱讀 59,528評(píng)論 1 296
  • 正文 為了忘掉前任沐绒,我火速辦了婚禮,結(jié)果婚禮上旺坠,老公的妹妹穿的比我還像新娘乔遮。我一直安慰自己,他們只是感情好取刃,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評(píng)論 6 397
  • 文/花漫 我一把揭開白布蹋肮。 她就那樣靜靜地躺著,像睡著了一般璧疗。 火紅的嫁衣襯著肌膚如雪坯辩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,166評(píng)論 1 308
  • 那天崩侠,我揣著相機(jī)與錄音漆魔,去河邊找鬼。 笑死却音,一個(gè)胖子當(dāng)著我的面吹牛改抡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播僧家,決...
    沈念sama閱讀 40,768評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼雀摘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了八拱?” 一聲冷哼從身側(cè)響起阵赠,我...
    開封第一講書人閱讀 39,664評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肌稻,沒想到半個(gè)月后清蚀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,205評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡爹谭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評(píng)論 3 340
  • 正文 我和宋清朗相戀三年枷邪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诺凡。...
    茶點(diǎn)故事閱讀 40,435評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡东揣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出腹泌,到底是詐尸還是另有隱情嘶卧,我是刑警寧澤,帶...
    沈念sama閱讀 36,126評(píng)論 5 349
  • 正文 年R本政府宣布凉袱,位于F島的核電站芥吟,受9級(jí)特大地震影響侦铜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钟鸵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評(píng)論 3 333
  • 文/蒙蒙 一钉稍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧棺耍,春花似錦贡未、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至左敌,卻和暖如春瘾蛋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背矫限。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工哺哼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叼风。 一個(gè)月前我還...
    沈念sama閱讀 48,818評(píng)論 3 376
  • 正文 我出身青樓取董,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親无宿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子茵汰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評(píng)論 2 359

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