1、简介
- 在 iOS 中提到的 NSBundle 是文件系统中的一个特殊位置,它存放的是应用可执行文件及相关资源文件。
- 这个位置的所有文件在系统运行时只具有可读或者可执行的权限,不能进行修改。
- 应用程序 bundle 中主要有以下几种类型的文件:
- Info.plist:用来配置应用的基本参数信息。包括版本号,指向的可执行文件名、包名等。
- 可执行文件:每个应用程序必须要有一个可执行文件。
- 资源文件:是可执行文件以外的数据文件,常用的如图像、图标、音频文件、视图文件、配置文件等。
- 应用程序 bundle 的配置信息都存在 Info.plist 文件中。它里面各项都以 key-value 的形式进行描述,包括了应用程序唯一标识名、版本号、可执行文件名等信息。
2、bundle 配置信息主要参数:
key |
友好显示名 |
value |
CFBundleDisplayName |
Bundle display name |
程序的应用名,安装后显示在桌面上的那个名称,可以进行本地化设置 |
CFBundleExecutable |
Executable file |
应用可执行程序的名称 |
CFBundleIdentifier |
Bundle identifier |
应用程序的唯一标识 |
CFBundleVersion |
Bundle version |
应用编译版本号 |
CFBundleShortVersionString |
Bundle version string, short |
应用 release 发布版版本号 |
- 当创建一个应用时,系统存储了应用相关联的所有数据(其中包括图片、本地化字符串、图标等),将这些内容放入一个称为应用包(application bundle)的包中。
- 在应用中添加一个资源时很方便的:仅需将文件拖到 Xcode 的左边窗格中。当出现对话框时,通常选择复制资源文件到你的项目目录中,这样你的项目都是自包含的。
- command-line tool 是没有 bundle 的,所以用 NSBundle 的时候一直是 null,如果要使用 bundle 获取项目中的资源,必须要使用 application。
3、Bundle 常见问题
-
3.1 项目里面的某个 .m 文件无法使用
- 检查 TARGETS => Build Phases => Compile Sources 里是否包含此 .m 文件。

-
3.2 项目里面的某个资源文件(比如 plist、音频等)无法使用
- 检查 TARGETS => Build Phases => Copy Bundle Resources 里是否包含此资源文件。

4、获取 NSBundle 资源
复制
NSBundle *mainBundle = [NSBundle mainBundle];
NSString *bundlePath = [NSBundle mainBundle].bundlePath;
NSString *resourcePath = [NSBundle mainBundle].resourcePath;
NSURL *bundleUrl = [NSBundle mainBundle].bundleURL;
NSURL *resourceURL = [NSBundle mainBundle].resourceURL;
NSString *filePath1 = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"txt"];
NSString *filePath2 = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"txt" inDirectory:@"testFolder"];
NSURL *fileUrl1 = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"txt"];
NSURL *fileUrl2 = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"txt" subdirectory:@"testFolder"];
NSString *indentifier = [NSBundle mainBundle].bundleIdentifier;
NSDictionary *info = [NSBundle mainBundle].infoDictionary;
NSString *bundleID = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)