Pod 庫資源文件的讀取

在進(jìn)行組件化或者打靜態(tài)庫時(shí),不可避免的會(huì)進(jìn)行資源文件的處理,一般有以下幾種情況:

1、pod 庫中的代碼讀取自身 pod 庫中的資源

2、pod 庫中代碼讀取其他 pod 庫資源

3、主工程讀取 pod 庫資源

4、pod 庫讀取主工程資源(這個(gè)讀取思想錯(cuò)誤)

通常在主工程調(diào)用主工程的資源時(shí),可以直接 imageName 或者 [mainbundle pathForRecource] 讀取,但是在 pod 進(jìn)行管理的時(shí)候, pod 資源文件也會(huì)變?yōu)?bundle 加入到 mainBundle 中,但是由于最直接的 bundle 并不是 mainBundle ,所以這種方法是行不通的,關(guān)鍵要取到資源相關(guān)聯(lián)的 bundle 。

一、資源文件引用的方式

CocoaPods 兩種資源文件引用方式 resource_bundles & resources

recource_bundles 允許當(dāng)前 Pod 庫的資源包的名稱和文件,key 是 bundle 的名稱,value 是需要包括文件的通配。

官方推薦使用 resource_bundles ,因?yàn)橛?key-value 可以避免相同名稱資源的名稱沖突。

建議 bundle 的名稱至少包括 pod 庫的名稱,避免同名沖突。

s.resource_bundles = {?? ? 'AClassTest' => ['AClassTest/Assets/**/*{xib,xcassets,storyboard}']? }

resources

使用 resource 來指定資源,被指定的資源只會(huì)簡單的被 copy 到目標(biāo)工程中。官方認(rèn)為用 resources 無法避免同名文件資源沖突,同時(shí) Xcode 也不會(huì)對這些資源做優(yōu)化。

s.resource = ['AClassTest/Assets/**/*{xib,xcassets,storyboard}']

二、圖片資源的管理

熟知常用的@2x @3x圖片是為了縮小用戶最終下載時(shí)的包的大小,通常會(huì)將圖片放在 .xcassets 文件中管理,新建的項(xiàng)目也默認(rèn)創(chuàng)建。

使用 .xcassets ?不僅可以方便Xcode 查看和拖入圖片,同時(shí) .xcassets ?最終打包生成為Assets.car 文件。對于 Assets.car 文件, App Slicing 會(huì)為切割留下符合目標(biāo)設(shè)備分辨率的圖片,可以縮小用戶最終下載的包的大小。

對于Pods庫的資源,同樣也可以用 .xcassets 管理。

三、實(shí)際驗(yàn)證

官方推薦 resource_bundles 的理由是 “可以解決同名沖突” 和 “Xcode 為 bundle 提供了一些優(yōu)化”。

1、使用resources

使用 resources 之后只會(huì)簡單的將資源文件 copy 到目標(biāo)工程,最后和目標(biāo)工程的圖片文件以及其他使用 resources 的 Pod 的圖片文件, 統(tǒng)一打包為了一個(gè)Assets.car。

讀取圖片的方式

UIImage *image = [UIImage imageNamed:@"arrow_down" inBundle:[NSBundle bundleForClass:[self class]] compatibleWithTraitCollection:nil];

2、使用 resource_bundles

在 pod install 后,工程目錄如下

生成bundle

bundle的包內(nèi)容為

bundle包內(nèi)容

此時(shí)獲取圖片的方式不同

resources 和 resource_bundles 對 .xcassets 都可以很好的支持。

3、同名文件沖突的問題

使用?resources?之后只會(huì)簡單的將資源文件 copy 到目標(biāo)工程(Example 工程),最后和目標(biāo)工程的圖片文件以及其他同樣使用?resources?的 Pod 的圖片文件,統(tǒng)一一起打包為了一個(gè)?Assets.car。

使用?resource_bundles?之后會(huì)為為指定的資源打一個(gè)?.bundle,.bundle包含一個(gè)?Assets.car,獲取圖片的時(shí)候要嚴(yán)格指定?.bundle?的位置,很好的隔離了各個(gè)庫或者一個(gè)庫下的資源包。

顯然,使用?resources,如果出現(xiàn)同名的圖片,顯然是會(huì)出現(xiàn)沖突的,同樣使用?some-image?名稱的兩個(gè)圖片資源,不一定能正確調(diào)用到。

一般來說使用 resource_bundles 更好。

demo:https://github.com/yuetianlu/PrivatePodsExample.git


參考文章:

http://www.cocoachina.com/articles/27605

http://www.itdecent.cn/p/4188b6447d56

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容