BundleNeXTSTEPmacOSiOSGNUstep等操作系統中使用的資源組織形式。它通過一種固定了文件名和文件結構的目錄形式,將相關資源組合在一起,使這些資源可以像一個獨立文件一樣來訪問和操作。一個Bundle通常包含一個可執行代碼文件和一些資源文件,例如NIB文件,圖像,聲音,本地化字符串,配置文件(通常是屬性列表文件)和其它媒體等。

Bundle
副檔名
.app, .framework, .kext, .plugin, .docset, .xpc, .qlgenerator, .component, .saver, .mdimporter, etc.
統一類型標識com.apple.bundle
作為容器執行檔元資料、其他的捆綁、任何其他在執行程式時需要的檔案。

在其他操作系統中,例如Windows,這類資源通常在編譯時就被直接包含在了可執行文件中,或者需要與可執行文件一樣保存到專門的文件夾中,增加了文件意外更改或丟失的風險,而Bundle使用文件夾來簡化組織資源,使用戶可以像使用普通文件一樣使用Bundle,避免了這種複雜性。

Mac OS 9中,該特性被稱為「包」(package),而Mac OS XNeXTSTEP中引入了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文件等等。

其它常見的子目錄包括PluginsFrameworksShared FrameworksFrameworks包括了該程序使用的框架,程序運行時會首先查找此處的框架而不是優先使用系統提供的,可以在一定程度上避免類似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的下載未完成的文件等。GarageBandKeynotePagesNumbersiMovieXcode等程序的部分版本中,項目文件亦存儲為Bundle。在iWork '09版中,其文件為一壓縮的Bundle,可以將其解壓後查看內部結構[2];另外,Microsoft Office 2007引入的新文件格式也採用了類似的技術。

蘋果安裝器包(.pkg)是包含pax英語pax (command)歸檔文件的Bundle,參見Installer (Mac OS X)

參考文獻

參見

外部連結