1. 什么是Bundle文件
- Bundle 文件,簡單理解,就是資源文件包。我們將許多圖片、XIB、文本文件組織在一起,打包成一個(gè) Bundle 文件。方便在其他項(xiàng)目中引用包內(nèi)的資源。
- Bundle 文件是靜態(tài)的,也就是說,我們包含到包中的資源文件作為一個(gè)資源包是不參加項(xiàng)目編譯的。也就意味著,bundle 包中不能包含可執(zhí)行的文件。它僅僅是作為資源,被解析成為特定的 2 進(jìn)制數(shù)據(jù)。
2. 如何制作靜態(tài)的Bundle文件
- 新建Bundle項(xiàng)目(本文教程使用Xcode8.3.3)
Bundle 默認(rèn)是 macOS 系統(tǒng)的,所以創(chuàng)建的時(shí)候要在 macOS => Framework & Library 選項(xiàng)下。

圖1.png
Product Name “Loading” 就是最后要生成的 Bundle 文件名稱

圖2.png

圖3.png
項(xiàng)目創(chuàng)建完 我們發(fā)現(xiàn)Loading.bundle 是紅色的 并且設(shè)備只能是Mac, 接下來就是修改 Bundle 配置信息,使其能用于iOS
- 修改 Bundle 配置信息
- 修改成iOS系統(tǒng), 選擇iOS SDK 為
Latest iOS(iOS 10.3)

圖4.png
- Bundle 中的圖片默認(rèn)是 tiff 格式了 需要修改Bulide Settings 中的
COMBINE_HIDPI_IMAGES為NO

圖5.png
- 添加需要打包的文件(本例中是圖片 也可以是XIB文件等)
將圖片拖到Loading文件夾中

圖5.png
- 編譯生成 Bundle 文件
我們分別選擇 Generic iOS Device 和任意一個(gè)模擬器各編譯一次,編譯完后,我們會(huì)看到工程中 Products 文件夾下的 SourcesBundle.bundle 由紅色變成了黑色。

圖6.png

圖7.png
然后點(diǎn)擊SourcesBundle.bundle 右鍵選擇show in finder 然后選擇顯示包內(nèi)容就可以看到文件資源

圖8.png

圖9.png

圖10.png
3. 如何使用 (以加載本地gif為例)
- 先將生成的真機(jī)(Debug-iphoneos)Bundle 資源文件拖拽到需要使用的工程中
- 獲取bundle中的圖片資源
NSFileManager *manager = [NSFileManager defaultManager];
NSString *path = [[NSBundle mainBundle] pathForResource:@"Loading" ofType:@"bundle"];
NSArray *array = [manager contentsOfDirectoryAtPath:path error:nil];
NSMutableArray *imageArr = [NSMutableArray arrayWithCapacity:0];
for (NSString *name in array) {
/// 拼接路徑
UIImage *image = [UIImage imageNamed:[path stringByAppendingPathComponent:name]];
if (image) {
[imageArr addObject:image];
}
}
/// 設(shè)置圖片幀數(shù)組
self.myImageView.animationImages = imageArr;
/// 設(shè)置動(dòng)畫時(shí)長
self.myImageView.animationDuration = 5;
/// 動(dòng)畫是否重復(fù)(0代表無線循環(huán))
self.myImageView.animationRepeatCount = 0;
/// 開啟動(dòng)畫
[self.myImageView startAnimating];