網上關於.framework
的制作與各種基於.bundle
的圖片資源使用已有許多,這里不再贅述。只是翻了一些博文/問答發現里面提到.framework
不能使用.xcassets
管理圖片,或者給出的方法並沒有什么用,因此就寫(guan)寫(shui)怎么在.framework
中使用.xcassets
管理文件
.xcassets
在打包后會變成Assets.car
,然而imageNamed:
由於默認位置無法找到framework的圖片資源,所以返回為nil
具體步驟
- 確認
.xcassets
已經被打包進framework,並且.framework
已經出現Assets.car
文件 - 在
PROJECT TARGETS
->General
->Embedded Binaries
中加入需要使用圖片資源的framework - 圖片獲取如下,從
ImgFramework.framework
獲取對應imgName
的圖片。
NSString *path = [[NSBundle mainBundle] pathForResource:@"ImgFramework" ofType:@"framework" inDirectory:@"Frameworks"];
NSBundle *bundle = [NSBundle bundleWithPath:path];
UIImage *img = [UIImage imageNamed:imgName inBundle:bundle compatibleWithTraitCollection:nil];
后記
Embedded Binaries
會直接把framework放到app包中,直接增大應用大小,若要用.xcassets
管理靜態庫的圖片資源最好直接分離一個framework專門放圖
由於framework本身在默認設置下就已經占了27KB的空間,對於過小圖片資源沒有必要使用.xcassets
在圖片比較多的情況下,比起直接引用圖片,使用.xcassets
可以明顯減少空間占用
- 原xcassets大小
- 使用xcassets的framework大小