iOS - Bundle 资源文件包

1、Bundle 文件

Bundle 文件,简单理解,就是资源文件包。我们将许多图片、XIB、文本文件组织在一起,打包成一个 Bundle 文件。方便在其他项目中引用包内的资源。

Bundle 文件是静态的,也就是说,我们包含到包中的资源文件作为一个资源包是不参加项目编译的。也就意味着,bundle 包中不能包含可执行的文件。它仅仅是作为资源,被解析成为特定的 2 进制数据。

2、制作 Bundle 文件

1、新建 Bundle 项目

创建名为 SourcesBundle(最后要生成的 Bundle 文件名称)的工程,注意 Bundle 默认是 macOS 系统的,Xcode 高版本中需要在 macOS => Framework & Library 选项下找到。

2、修改 Bundle 配置信息

因为 Bundle 默认是 macOS 系统的,所有需要修改他的信息,修改成 iOS 系统。

设置 Build Setting 中的 COMBINE_HIDPI_IMAGES 为 NO,否则 Bundle 中的图片就是 tiff 格式了。

3、可选配置

作为资源包,仅仅需要编译就好,无需安装相关的配置,设置 Skip Install 为 YES。同样要删除安装路径 Installation Directory 的值。

4、添加文件

将资源文件或文件夹拖动到工程中的 SourcesBundle 文件夹下面。

5、编译生成 Bundle 文件

我们分别选择 Generic iOS Device 和任意一个模拟器各编译一次,编译完后,我们会看到工程中 Products 文件夹下的 SourcesBundle.bundle 由红色变成了黑色。

然后 show in finder,看看生成的文件。我们看到它为真机和模拟器都生成了 .bundle 资源文件。

选中 .bundle 文件右键 显示包内容,我们可以看到之前拖拽到工程中的资源文件都在其中。

3、使用 Bundle 文件

将生成的真机(Debug-iphoneos)Bundle 资源文件拖拽到需要使用的工程中。

1、加载 Bundle 中的 xib 资源文件

// 设置文件路径
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"SourcesBundle" ofType:@"bundle"];
NSBundle *resourceBundle = [NSBundle bundleWithPath:bundlePath];

// 加载 nib 文件
UINib *nib = [UINib nibWithNibName:@"BundleDemo" bundle:resourceBundle];
NSArray *viewObjs = [nib instantiateWithOwner:nil options:nil];

// 获取 xib 文件
UIView *view = viewObjs.lastObject;

view.frame = CGRectMake(20, 50, self.view.bounds.size.width - 40, self.view.bounds.size.width - 40);
[self.view addSubview:view];

2、加载 Bundle 中的图片资源文件

指定绝对路径的形式

UIImage *image = [UIImage imageNamed:@"SourcesBundle.bundle/demo2.jpg"];

拼接路径的形式

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"SourcesBundle" ofType:@"bundle"];
NSString *imgPath= [bundlePath stringByAppendingPathComponent:@"demo4"];

UIImage *image = [UIImage imageWithContentsOfFile:imgPath];

宏定义的形式

#define MYBUNDLE_NAME   @"SourcesBundle.bundle"
#define MYBUNDLE_PATH   [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:MYBUNDLE_NAME]
#define MYBUNDLE        [NSBundle bundleWithPath:MYBUNDLE_PATH]

NSString *imgPath= [MYBUNDLE_PATH stringByAppendingPathComponent:@"demo4"];
UIImage *image = [UIImage imageWithContentsOfFile:imgPath];

推荐阅读更多精彩内容

  • Bundle文件 Bundle 文件,简单理解,就是资源文件包。我们将许多图片、XIB、文本文件组织在一起,打包成...
    番茄炒西红柿啊阅读 1,914评论 0 0
  • 框架捆绑 框架是封装动态共享库和支持该库所需的资源文件的分层目录。框架比典型的动态共享库提供了一些优势,因为它们为...
    nicedayCoco阅读 1,030评论 0 2
  • 介绍 捆绑是macOS和iOS中用于封装代码和资源的基础技术。软件包通过为所需资源提供已知位置来简化开发人员体验,...
    nicedayCoco阅读 756评论 0 1
  • 引言 在开发中.framework静态库还是比较常见的,比如:SDK,公司间的代码合作等。我们可以把一些不愿意让别...
    庞仕山阅读 1,687评论 0 2
  • 儿子上大学去后,慢慢习惯于早睡,晚上六点半出去锻炼到八点半回家,再追两集电视剧之类的,十点半钟开始洗漱,十一...
    自然田野阅读 219评论 0 0
  • 本文将向大家介绍岁寒输入法Android版的使用方法。如果对教程有任何不明白的地方或者有任何想法建议,请在下面的评...
    临岁之寒阅读 50,026评论 4 9
  • 我们追求的目标可大致分两大类:1. 证明我行的“表现”目标;2. 追求成长的“进步”目标。从而造就了两种不同的人格...
    独兜曲阅读 288评论 0 2
  • 陈从周先生在《园林清议》中说,园林有景观,动观之分。静观就是园中有可以让游者长时间驻足且不感到烦腻的地方;动观...
    嗨_暄清阅读 721评论 1 4