第二章-OSX概览 Bundle

Bundle和框架是两个Mac OS X中经常出现的抽象。大部分用户空间的功能被实现为框架,而框架是一种特殊的bundle。

一个bundle是一系列相关的资源的集合,内部有文件夹的结构。在bundle中可以有可执行文件,动态链接库,插件,头文件,图片,音频,文档和其他bundle。因此bundle非常适合打包,部署,维护和使用一个软件。Mac OS X最常见到的bundle之一是应用bundle。一个应用bundle本质上是一个文件夹,以.app结尾。大部分Mac OS X应用都不只是一个简单的可执行文件。例如一个应用有图标,可能在使用时播放音频,使用动态链接库模块化开发。应用可能还会有插件功能,允许其他开发者拓展应用的功能。Bundle非常适合这种应用,因为它可以把应用结构清晰地规划。例如iTunes.app就包含最主要的iTunes可执行文件,一个可以被载入的插件bundle,一些图标,媒体文件,一个辅助应用,本地化文档还有很多其他东西。所有的东西都被方便地打包金iTunes.app文件夹,而不是散落在系统各处。对于这样的bundle,安装和卸载也非常方便,只需要将.app拖入Application文件夹或直接删除就可以完成安装和卸载。

Finder会把一些类型的bundle看作一个文件而不是一个文件夹。例如双击应用bundle就会启动应用而不是进入文件夹。用户可以右击bundle并从上下文菜单中进入bundle内部。有一些Mach-O类型文件会在bundle中出现。Bundle可以使用CFBundle和 NSBundle API 访问。

很多插件都是以bundle的形式出现在Mac OS X中。总的来说,一个插件是一个在宿主环境中匀性的一段外部代码。宿主环境通常是一个应用,但也可以是操作系统或者另一个插件。这个宿主环境需要有可拓展性,也就是说它需要暴露一些API供插件调用。因此使用宿主环境的API,插件可以在不修改宿主环境的代码的情况下增加功能。

要注意的是表中的拓展名只是约定,只要使用bundle的程序知道这个bundle会包含什么,bundle的拓展名可以是任何拓展名。

This entry was posted in OSX Internals笔记. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *