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)

參考文獻

編輯

參見

編輯

外部連結

編輯