iOS - Bundle 资源文件包生成和常见资源文件使用
1、Bundle 文件
Bundle 文件,就是资源文件包。我们将许多图片、XIB、文本文件组织在一起,打包成一个 Bundle 文件。方便在其他项目中引用包内的资源。
Bundle 文件是静态的,也就是说,我们包含到包中的资源文件作为一个资源包是不参加项目编译的。也就意味着,bundle 包中不能包含可执行的文件。它仅仅是作为资源,被解析成为特定的二进制数据。
2、制作 Bundle 文件
1、新建 Bundle 项目
创建名为 yooweiSourcesBundle(最后要生成的 Bundle 文件名称)的工程,注意 Bundle 默认是 macOS 系统的,Xcode 高版本中需要在macOS => Framework & Library 选项下找到。具体创建路径如下:
打开Xcode, 选择File ----> New ---> Project,选择macOS ----> Framework & Library ---> Bundle。


按照引导一步一步来,最后选择存放的位置,那么一个一个bundle就创建好了。
2、修改 Bundle 配置信息
(1)因为 Bundle 默认是 macOS 系统的,所以需要修改他的信息,修改成 iOS 系统。


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

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


该资源包的 pch 文件和 strings 文件是可以删除(老版本Xcode会有,高版本没有)。
4、添加文件
将资源文件或文件夹拖动到工程中的 SourcesBundle 文件夹下面。

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

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

选中 .bundle 文件右键 显示包内容,我们可以看到之前拖拽到工程中的资源文件都在其中。
3、使用 Bundle 文件
打开Xcode, 选择File ----> New ---> Project,选择iOS ----> Application ---> single View App 创建一个yooweiLiveDemo 用来测试bundle里面文件的使用。将生成的真机(Debug-iphoneos)Bundle 资源文件拖拽到需要使用的工程中。

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

-(void)useXIB{
// 设置文件路径
// NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"yooweiSourcesBundle" ofType:@"bundle"];
// NSBundle *resourceBundle = [NSBundle bundleWithPath:bundlePath];
NSBundle *resourceBundle=[NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"yooweiSourcesBundle" withExtension:@"bundle"]];
// 加载 nib 文件
UINib *nib = [UINib nibWithNibName:@"WYLiveCell" 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 中的图片资源文件

-(void)useImage{
// 1 指定绝对路径的形式
UIImage *imageOne = [UIImage imageNamed:@"yooweiSourcesBundle.bundle/loading_yoowei.png"];
UIImageView *one=[[UIImageView alloc]initWithFrame:CGRectMake(10, 10, 30, 30)];
one.image=imageOne;
[self.view addSubview:one];
// 拼接路径的形式
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"yooweiSourcesBundle" ofType:@"bundle"];
NSString *imgPathTwo= [bundlePath stringByAppendingPathComponent:@"loading_yoowei"];
UIImage *imageTwo = [UIImage imageWithContentsOfFile:imgPathTwo];
UIImageView *two=[[UIImageView alloc]initWithFrame:CGRectMake(50, 50, 30, 30)];
two.image=imageTwo;
[self.view addSubview:two];
// 宏定义的形式
#define MYBUNDLE_NAME @"yooweiSourcesBundle.bundle"
#define MYBUNDLE_PATH [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:MYBUNDLE_NAME]
#define MYBUNDLE [NSBundle bundleWithPath:MYBUNDLE_PATH]
NSString *imgPathThree= [MYBUNDLE_PATH stringByAppendingPathComponent:@"loading_yoowei"];
UIImage *imageThree = [UIImage imageWithContentsOfFile:imgPathThree];
UIImageView *three=[[UIImageView alloc]initWithFrame:CGRectMake(90, 90, 30, 30)];
three.image=imageThree;
[self.view addSubview:three];
}
3、加载其他资源文件

-(void)uesOther{
// 再比如获取静态库里面bundle里面的资源文件证书
NSString *pathStr = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"yooweiSourcesBundle.bundle"];
NSBundle *pathBundle = [NSBundle bundleWithPath:pathStr];
//获取Bundle里的资源路径
NSString *cacerPath = [pathBundle pathForResource:@"ca" ofType:@"cer"];
NSData *cerDate=[NSData dataWithContentsOfFile:cacerPath];
NSLog(@"%@",cerDate);
}
效果如下:

iOS - Bundle 资源文件包生成和常见资源文件使用的更多相关文章
- RF根据单个/多个output文件重新生成log和report文件
场景1:根据单个output文件重新生成log和report文件命令: rebot -d 日志和报告文件保存路径 output.xml文件 场景2:合并两个不同路径下的output文件并生成新的lo ...
- ios 添加工程依赖只能生成Generic Xcode Archive 文件原因
问题说明:工程引用了外部类库, 默认生成的archive是 Generic Xcode Archive 格式的 无法发布和生成ipa文件. 解决处理: 1.将Build Settings->De ...
- Makefile 自动搜索 c 和 cpp 文件, 并生成 .a 静态库文件
最近 又弄linux 下的 .a 静态库编译, 于是想 做个 一劳永逸的Makefile, 经过一番折腾, 最后成功了 只需要 改两个 参数 就可以执行了(MYLIB 和 VPATH), 代码 如下: ...
- Android项目中gen文件下R文件无法生成的解决的方法
帮一个网友解决R文件无法生成的问题,搜集了些材料特整理例如以下,刚開始学习的人參考他人代码时极易出现此种问题,一般都是xml文件出错,无法被正确解析. gen文件夹无法更新,或者gen文件夹下的R.J ...
- iOS 应用配置及证书生成教程
简介 首先你需要有一个苹果的开发者帐号,一台苹果电脑.点击查看苹果开发者账号注册流程 本教程需完成应用信息配置,包括如下两个基本配置: AppID Bundle ID 同时,生成 如下三个证书文件及对 ...
- C#路径,文件,目录,I/O常见操作
C#路径,文件,目录,I/O常见操作 文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供 ...
- 前端(以Vue为例)webpack打包后dist文件包如何部署到django后台中
由于现在前端使用的三大框架配合webpack可以实现快速打包,为部署到服务端提供了非常大的便利,那么在前端打包后,应该做些什么可以部署到django的后台中呢? 1.打包后文件包dist 进入到 di ...
- tesseract中文语言文件包 下载
tesseract中文语言文件包 下载 tesseract中文语言文件包 下载 tesseract中文语言文件包 下载 下载地址是:https://github.com/tesseract-ocr/l ...
- C#/VB.NET 在PDF中添加文件包(Portfolio)
PDF文件包(Portfolio)允许用户将多种不同类型的文件如Word.Excel.PDF.PowerPoint和图片等集合到一个PDF文件中,用户可以打开.更改PDF文件包中的单个文件.添加文件包 ...
随机推荐
- Python:基础知识(一)
输入 input():接收命令行下输入 1)在py2下:如果你输的是一串文字,要用引号''或者""引起来,如果是数字则不用. 2)在py3下:相当于py2的raw_input(), ...
- Parameter server(参数服务器)
特殊点在于参数服务器是节点存储参数的地方. 用于配置参数, 全局共享参数. 参数服务器使用互联网传输, 在节点管理器中运行, 实现整个通信过程. 1.命令行维护 load&&dump文 ...
- python-文件基本操作(一) (转载)
转载自: https://www.cnblogs.com/nizhihong/p/6528439.html 一.打开文件的方法: 注意:file()和open()基本相同,且最后要用close()关闭 ...
- java集合(类似python的列表)
一:学习方法 我们在学习一个类的时候,如果他是期其他类的实现类,我们在学习的时候,先学习他的共同的继承类,学习他们共有的方法,在学习他实现类的特殊方法.由共性--->特殊. 二:集合 1.集合和 ...
- [LuoguP1462]通往奥格瑞玛的道路($SPFA+$二分)
#\(\mathcal{\color{red}{Description}}\) \(Link\) 有一个图,求其在\(1-N\)的最短路小于一个给定值下,点权最大值的最小值. #\(\mathcal{ ...
- Linux内存调试工具初探-MEMWATCH(转)
C 语言作为 Linux 系统上标准的编程语言给予了我们对动态内存分配很大的控制权.这种自由可能会导致严重的内存管理问题,可能导致程序崩溃或随时间的推移导致性能降级. 内存泄漏(即 malloc() ...
- 使用XWAF框架(2)——上传文件
XWAF提供了上传文件的HttpFileUploader工具类,具备强大的多文件上传.文件类型过滤.文件大小限制.存储目录设置.文件名称更改等功能,简化了Web应用开发的编程工作. 它能同时解析表单参 ...
- Linux --- vim 安装、支持python3的配置、插件自动补全YCM的安装配置及全过程错误总结
1.git(用来下载vim和相关插件) sudo apt-get install git 2,cmake(用来编译clang-llvm) sudo apt-get install build-esse ...
- rails使用Kindeditor网页编辑器
在gemfile中加入(后面版本别丢) gem 'rails_kindeditor', '~> 0.5.0' $ bundle 创建配置文件,并且引入js rails g rails_kinde ...
- Linux下onvif客户端获取ipc摄像头 GetStreamUri:rtsp地址(h264、h265)
GetStreamUri:rtsp地址 鉴权:但是在使用这个接口之前是需要鉴权的.ONVIF协议规定,部分接口需要鉴权,部分接口不需要鉴权,在调用需要鉴权的接口时不使用鉴权,会导致接口调用失败.实现鉴 ...