Bundle

Bundle扩展名|

.app, .framework, .kext, .plugin, .docset, .xpc, .qlgenerator, .component, .saver, .mdimporter, etc.

|

统一类型标识| com.apple.bundle
作为容器| 執行檔、元資料、其他的捆绑、任何其他在執行程式時需要的檔案。

Bundle是NeXTSTEP、macOS、iOS、GNUstep等操作系统中使用的资源组织形式。它通过一种固定了文件名和文件结构的目录形式，将相关资源组合在一起，使这些资源可以像一个独立文件一样来访问和操作。一个Bundle通常包含一个可执行代码文件和一些资源文件，例如NIB文件，图像，声音，本地化字符串，配置文件（通常是属性列表文件）和其它媒体等。

在其他操作系统中，例如Windows，这类资源通常在编译时就被直接包含在了可执行文件中，或者需要与可执行文件一样保存到专门的文件夹中，增加了文件意外更改或丢失的风险，而Bundle使用文件夹来简化组织资源，使用户可以像使用普通文件一样使用Bundle，避免了这种复杂性。

在Mac OS 9中，该特性被称为“包”（package），而Mac OS X从NeXTSTEP中引入了Bundle的概念，用于取代该技术。在NeXTSTEP以及后续的Mac OS X等操作系统中，应用程序、应用框架和插件通常以Bundle的形式将其内部文件组织在一起。在NeXT的Foundation工具包和Cocoa的Foundation框架中，可以使用`NSBundle`类操作Bundle；在Core Foundation（英语：Core Foundation）中，则使用`CFBundle`系列函数进行操作。

Bundle的统一类型标识符是`com.apple.bundle`，而包的则是`com.apple.package`。

## Mac OS X中的应用程序Bundle

[编辑]

应用程序Bundle通常为软件包，以单一文件的形式出现在用户面前。这个“文件”实际上是一个以`.app`为扩展名的文件夹。辅助点按这个包，然后选择“显示包内容”，即可以文件夹的形式打开该Bundle并查看、修改其内容。对于应用程序，Bundle中的唯一一个一级子目录通常是`Contents`。在`Contents`中，通常有另外一些目录，包括可执行文件目录（在Mac中为`MacOS`，GNUStep中则为应用程序的名字），资源目录（`Resources`）等。资源目录中通常包含了程序所需的本地化资源，包括字符串文件（`.strings`文件），nib文件等等。

其它常见的子目录包括`Plugins`，`Frameworks`和`Shared Frameworks`。`Frameworks`包括了该程序使用的框架，程序运行时会首先查找此处的框架而不是优先使用系统提供的，可以在一定程度上避免类似DLL地狱的情况发生。`Shared Frameworks`目录包含了可以由本程序和其它程序使用的框架，同时，与`Frameworks`不同，只会在无法在系统中找到更新的版本时使用。`Plugins`目录则包含了程序使用的插件。

## Mac OS X中的Frameworks

[编辑]

Mac OS X中的Frameworks（框架）也以Bundle的形式储存。框架中的动态库代码储存在与框架同名的文件中，放置于顶层目录中；顶层目录中也可能包含`Headers`，储存了该框架提供的头文件。

## Mac OS X中的可载入Bundle

[编辑]

可载入的Bundle即包含可以在运行时载入的代码的Bundle[1]，其扩展名通常为`.bundle`，常常被用作插件。

## Bundle的其它形式

[编辑]

其它Bundle包括包含图形的，以`.rtfd`为扩展名的RTF文件，Safari的下载未完成的文件等。GarageBand，Keynote，Pages，Numbers，iMovie和Xcode等程序的部分版本中，项目文件亦存储为Bundle。在iWork '09版中，其文件为一压缩的Bundle，可以将其解压后查看内部结构[2]；另外，Microsoft Office 2007引入的新文件格式也采用了类似的技术。

苹果安装器包（`.pkg`）是包含`pax（英语：pax (command)）`归档文件的Bundle，参见Installer (Mac OS X)。

## 参考文献

[编辑]

1. ^ Code Loading Programming Topics for Cocoa: About Loadable Bundles 互联网档案馆的存檔，存档日期2008-09-05.
2. ^ Open iWork' 09 flat files as folders.  [2010-10-15]. （原始内容存档于2009-02-27）.

## 参见

[编辑]

* 应用程序目录（英语：Application directory） — RISC OS中与Bundle类似的应用程序形式
* klik — 一个使用类似原理的Linux程序

## 外部链接

[编辑]

* Bundle Programming Guide （页面存档备份，存于互联网档案馆） at Apple Developer Connection
* NSBundle documentation （页面存档备份，存于互联网档案馆） from the GNUstep project
* Platypus （页面存档备份，存于互联网档案馆） — a tool to create application bundles around scripts
* Tech News （页面存档备份，存于互联网档案馆） — new technology news information with reviews