Pod本地私有庫使用圖片和XIB資源文件

前言

制作本地本地POD庫就不做過多的介紹狮含,因為本身就一個命令的事pod lib create xxxx

pod庫

pod管理項目的時候幅狮,如果用到了圖片或者XIB文件一般有兩種寫法:resources或者resource_bundles

Example

 spec.resources = "CXSalesmanModule/**/*.{xib,png}"

spec.resource_bundles = {
    'CXSalesmanModule' => ['CXSalesmanModule/**/*.{xib,png,xcassets}']
  }

先來說說區(qū)別:

  • 利用 resources 屬性可以指定 pod 要使用的資源文件。這些資源文件在build 時會被直接拷貝到 client targetmainBundle 里。這樣就實現(xiàn)了把圖片、音頻、NIB等資源打包進最終應用程序的目的旬陡。但是這會導致POD庫的資源文件和主工程里的資源文件命名沖突。

Example

主工程有一個a.png的圖片语婴,而pod庫里面也有一個a.png的圖片描孟,此時就產(chǎn)生命名沖突了。

  • resource_bundles就是為了解決命名沖突的問題砰左,CocoaPods0.23.0 加入的新屬性匿醒。
  • resource_bundles會自動生成bundle把資源文件打包進去,resources則不會缠导。所以我們在使用resources的時候一般都會把資源文件提前打包到bundle最后在添加廉羔。

建議使用resource_bundles方式來管理資源文件

use_frameworks重點

OC項目pod init的時候一般是不使用use_frameworks!,但是當我們用cocoapods導入swift框架到swift項目和OC項目都必須要use_frameworks!

對于Podfile有或者沒有使use_frameworks僻造;resources或者resource_bundles這兩種寫法的最后編譯之后生成的包是不一樣的憋他。

  • 如果使用了use_frameworks編譯之后查看包,我們會發(fā)現(xiàn)POD庫是放在mainBundle下的Frameworks目錄下髓削。
  • 沒有使用use_frameworks竹挡,則不會生成Frameworks

pod install編譯之后我們來看下資源文件打包到哪里了

show in finder
products

使用spec.resources寫法

 spec.resources = ["CXSalesmanModule/**/*.{xib,png}"]

沒有使用user_frameworks
resources沒有使用user_frameworks

如果使用圖片或者XIB立膛,因為資源文件是直接打包到和主工程的bundle也就是mainBundle此迅,所以我們依舊可以和之前的寫法一樣:

使用

self.imagView.image = [UIImage imageNamed:@"icon_mine_grade"];
// xib 這里暫未做測試
使用了user_frameworks
resources使用user_frameworks

此時我們發(fā)現(xiàn)pod庫里面的資源文件被打包進了主工程(即:mainBundle)下的Frameworks->CXSalesmanModule.framework目錄下:
所以我們使用資源文件的時候,就不能直接加載mainBundle旧巾;我們需要找到資源文件所在的bundle

獲取bundle的兩種方式

通過class類型查找對應的bundle目錄,這種在category中不能使用忍些,雖然可以通過傳入class的方式查找鲁猩,但是容易出錯。不建議使用

NSBundle *cbundle = [NSBundle bundleForClass:[self class]]; 
NSString *path = [bundle pathForResource:bundleName ofType:@"bundle"]; 
NSBundle *bundle = [NSBundle bundleWithPath:path];

使用

NSURL *associateBundleURL = [[NSBundle mainBundle] URLForResource:@"Frameworks" withExtension:nil];
associateBundleURL = [associateBundleURL URLByAppendingPathComponent:@"CXSalesmanModule"];
associateBundleURL = [associateBundleURL URLByAppendingPathExtension:@"framework"];
NSBundle *bundle = [NSBundle bundleWithURL:associateBundleURL];
self.imagView.image = [UIImage imageNamed:@"icon_mine_grade"
  inBundle: associateBunle
compatibleWithTraitCollection:nil];

XIB同理也是通過Bundle去加載罢坝。

使用spec.resource_bundles寫法

spec.resource_bundles = {
  'CXSalesmanModule' => ['CXSalesmanModule/**/*.{xib,png,xcassets}']
}
沒有使用user_frameworks
resource_bundles沒有使用user_frameworks

此時我們發(fā)現(xiàn)pod庫里面的資源文件是被打包進了主工程(即:mainBundle)里面的CXSalesmanModule.bundle內(nèi)廓握,所以我們使用的話搅窿,只需要拿到這個bundle即可。這里也驗證了上面所說的resource_bundles會默認生成bundle

使用

NSURL *url = [[NSBundle mainBundle] URLForResource:@"CXSalesmanModule" withExtension:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithURL:url];
self.imagView.image = [UIImage imageNamed:@"icon_mine_grade"
  inBundle: bundle
compatibleWithTraitCollection:nil];
使用了user_frameworks
resource_bundles使用了user_frameworks

此時我們發(fā)現(xiàn)pod庫里面的資源文件是被打包進了主工程(即:mainBundle)下的Frameworks->CXSalesmanModule.framework->CXSalesmanModule.bundle目錄下:
所以我們使用資源文件的時候隙券,就不能直接加載mainBundle男应;我們需要找到資源文件所在的CXSalesmanModule.bundle這里也驗證了上面所說的resource_bundles會默認生成bundle

使用

NSURL *associateBundleURL = [[NSBundle mainBundle] URLForResource:@"Frameworks" withExtension:nil];
associateBundleURL = [associateBundleURL URLByAppendingPathComponent:@"CXSalesmanModule"];
associateBundleURL = [associateBundleURL URLByAppendingPathExtension:@"framework"];
NSBundle *associateBunle = [NSBundle bundleWithURL:associateBundleURL];
associateBundleURL = [associateBunle URLForResource:@"CXSalesmanModule" withExtension:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithURL:associateBundleURL];
self.imagView.image = [UIImage imageNamed:@"icon_mine_grade"
  inBundle: bundle
compatibleWithTraitCollection:nil];

XIB同理也是通過Bundle去加載娱仔。

總的來說沐飘,使用pod庫里面的資源文件,我們只需要找資源文件所在的路徑即可牲迫,如果是mainBundle則使用方式不變耐朴,如果是其他的bundle,我們只要獲取到bundle就可以通過bundle去使用盹憎。

圖片存放方式

  • 直接將png格式的圖片拖到Assets目錄下筛峭。
  • 采用xcassets,將圖片都放到Images.xcassets里面陪每,新建項目的時候默認工程會有一個Assets.xcassets影晓。

這里的圖片是采用xcassets來打包的,按住command + n選擇Asset Catalog即可檩禾。

資源文件
生成Asset

一般我們都是直接把圖片放到相應的目錄下挂签,這里我要說的是resource_bundles打包圖片使用xcassets的注意點

注意(低于iOS10的系統(tǒng))

對于pod資源打包方式采用resource_bundles并且podfile里使用了user_framework,如果采用.xcassets方式打包圖片锌订,iOS9 Release環(huán)境下圖片會加載不出來竹握。如果未使用user_framework則可以正常展示(iOS8暫沒有測試,以及采用resources來打包這里本人暫未做測試有興趣的小伙伴可以去測試一波)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辆飘,一起剝皮案震驚了整個濱河市啦辐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜈项,老刑警劉巖芹关,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異紧卒,居然都是意外死亡侥衬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門跑芳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轴总,“玉大人,你說我怎么就攤上這事博个』痴粒” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵盆佣,是天一觀的道長往堡。 經(jīng)常有香客問我械荷,道長,這世上最難降的妖魔是什么虑灰? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任吨瞎,我火速辦了婚禮,結果婚禮上穆咐,老公的妹妹穿的比我還像新娘颤诀。我一直安慰自己,他們只是感情好庸娱,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布着绊。 她就那樣靜靜地躺著,像睡著了一般熟尉。 火紅的嫁衣襯著肌膚如雪归露。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天斤儿,我揣著相機與錄音剧包,去河邊找鬼。 笑死往果,一個胖子當著我的面吹牛疆液,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播陕贮,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼堕油,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肮之?” 一聲冷哼從身側響起掉缺,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎戈擒,沒想到半個月后眶明,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡筐高,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年搜囱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柑土。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜀肘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出稽屏,到底是詐尸還是另有隱情幌缝,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布诫欠,位于F島的核電站涵卵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏荒叼。R本人自食惡果不足惜轿偎,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望被廓。 院中可真熱鬧坏晦,春花似錦、人聲如沸嫁乘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜓斧。三九已至仓蛆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挎春,已是汗流浹背看疙。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留直奋,地道東北人能庆。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像脚线,于是被迫代替她去往敵國和親搁胆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344