Bundle (macOS)

Last updated
Bundle
Filename extension
.app, .framework, .kext, .plugin, .docset, .xpc, .qlgenerator, .component, .saver, .mdimporter, etc.
Uniform Type Identifier (UTI) com.apple.bundle
Container for executable binary, metadata, other bundles, any other file needed to run the application.

In NeXTSTEP, OPENSTEP, and their lineal descendants macOS, iOS, iPadOS, tvOS, watchOS, and visionOS, and in GNUstep, a bundle is a file directory with a defined structure and file extension, allowing related files to be grouped together as a conceptually single item.

Contents

Examples of bundles that contain executable code include applications, frameworks, and plugins. This kind of bundle usually contains one file representing executable code, and files that represent resources such as nibs, templates, images, sounds, and other media. On some other systems, such as Microsoft Windows, these resources are usually included directly in the executable file itself at compile time. On older Macintoshes, a similar technique is used, where additional metadata can be added to a file's resource fork. Similar in concept are the application directories used in RISC OS and on the ROX Desktop.

Examples of bundles that do not contain executable code include document packages (iWork documents) and media libraries (iPhoto Library).

Bundles are programmatically accessed with the NSBundle class in Cocoa, NeXTSTEP and GNUstep's Foundation frameworks, and with CFBundle in Core Foundation. Bundles often include an Info.plist file for metadata. [1] The Uniform Type Identifier (UTI) for an Apple bundle is com.apple.bundle. [2]

Application bundles

Application bundle
Filename extension
.app
Uniform Type Identifier (UTI) com.apple.application-bundle
Type of format application software
Container for executable binary
Extended fromBundle

Application bundles are directory hierarchies, with the top-level directory having a name that ends with a .app extension.

In a macOS application bundle, the first directory in the bundle underneath the top-level directory is usually named Contents. Within Contents there is usually another directory, called MacOS, which contains the application's executable code. The Contents folder contains a file named Info.plist, which contains application information, such as the software vendor's name, name of the files that contain the applications executable and icon, the version of the application, permissions requested, etc. Within the Contents folder there is usually also a directory called Resources, which contains the resources of the application. [3]

Among other things, the Resources folder contains localized versions of the application's nib files.

Other common subdirectories include Plugins, Frameworks, _CodeSignature and Shared Frameworks. The Frameworks directory contains frameworks used by the application, and are used even if another version of the framework exists on the system. The Shared Frameworks directory contains frameworks that can be used both by the application that contains them, and other applications; they are used only if a newer version does not exist elsewhere on the system. Plugins contains extensible code used by the application. The _CodeSignature folder contains information used by the system to validate that the package to establish that the package originates from a trusted party, and has not been tampered with.

By default, the Finder displays application bundles, which can also be referred to as packages, as opaque files with no underlying structure; the contents of the bundle can be shown with the "Show Package Contents" context menu item.

GNUstep by default uses the name of the application to name the folder that contains application code. An alternative is to name them by the computer architecture and OS the code is intended for to form a fat binary, so the application can be opened on many platforms. [4] [5]

macOS framework bundles

Framework bundle
Filename extension
.framework
Uniform Type Identifier (UTI) com.apple.framework
Extended frombundle

macOS frameworks are also stored as bundles; [6] the top-level directory of a framework bundle has a name that is the name of the framework followed by the extension .framework. In the top-level directory is a Versions directory, with subdirectories for one or more versions of the framework, each subdirectory containing the dynamic library code for the framework, in a file whose name is the same as the name of the framework, possibly with a Headers folder containing header files for the framework, and other subfolders such as Resources. The Versions directory also contains a symbolic link Current to the directory for the current version of the framework. In the top-level directory are symbolic links to the contents of Versions/Current. [7]

The Finder displays framework bundles as directories rather than as opaque files.

Although GNUstep uses frameworks, they are not usually stored as bundles. This is because the full semantics of framework loading are considered too alien to other platforms. [8]

Loadable bundles

Loadable bundles are bundles which contain code that can be loaded at runtime. [9] Loadable bundles usually have the extension .bundle, and are most often used as plug-ins. On macOS, there is a way to load bundles even into applications that do not support them, allowing for third party hacks for popular applications, such as Safari [10] and Apple Mail. [11] [12] A feature inherited from NeXTSTEP, GNUstep has the -[NSBundle principalClass] interface too.

By default, the Finder displays loadable bundles, which can also be referred to as packages, as opaque files with no underlying structure; the contents of the bundle can be shown with the "Show Package Contents" context menu item.

Other bundle formats

There are many macOS applications which utilize their own custom bundle format (e.g. CandyBar .iContainer, Aperture .aplibrary, VMware Fusion .vmwarevm, etc.).

.lproj

An .lproj file is a bundle that contains localization files for OpenStep, macOS, or GNUstep software. It typically contains the .nib files for a given language along with .strings files and images if needed (for example, ReadMe or license files). These localized files are used by installer makers to customize install packages. They are also included in an application bundle.

See also

Related Research Articles

<span class="mw-page-title-main">NeXTSTEP</span> Operating system from NeXT Computer

NeXTSTEP is a discontinued object-oriented, multitasking operating system based on the Mach kernel and the UNIX-derived BSD. It was developed by NeXT Computer, founded by Steve Jobs, in the late 1980s and early 1990s and was initially used for its range of proprietary workstation computers such as the NeXTcube. It was later ported to several other computer architectures.

<span class="mw-page-title-main">OpenStep</span> Defunct object-oriented application programming interface specification

OpenStep is an object-oriented application programming interface (API) specification developed by NeXT. It provides a framework for building graphical user interfaces (GUIs) and developing software applications. OpenStep was designed to be platform-independent, allowing developers to write code that could run on multiple operating systems, including NeXTSTEP, Windows NT, and various Unix-based systems. It has influenced the development of other GUI frameworks, such as Cocoa for macOS, and GNUstep.

Cocoa is Apple's native object-oriented application programming interface (API) for its desktop operating system macOS.

<span class="mw-page-title-main">GNUstep</span> Open source widget toolkit and application development tools

GNUstep is a free software implementation of the Cocoa Objective-C frameworks, widget toolkit, and application development tools for Unix-like operating systems and Microsoft Windows. It is part of the GNU Project.

A resource fork is a fork of a file on Apple's classic Mac OS operating system that is used to store structured data. It is one of the two forks of a file, along with the data fork, which stores data that the operating system treats as unstructured. Resource fork capability has been carried over to the modern macOS for compatibility.

<span class="mw-page-title-main">WebObjects</span> Java web application server and framework originally developed by NeXT Software

WebObjects is a discontinued Java web application server and a server-based web application framework originally developed by NeXT Software, Inc.

In computing, a loadable kernel module (LKM) is an object file that contains code to extend the running kernel, or so-called base kernel, of an operating system. LKMs are typically used to add support for new hardware and/or filesystems, or for adding system calls. When the functionality provided by an LKM is no longer required, it can be unloaded in order to free memory and other resources.

<span class="mw-page-title-main">Configuration file</span> Software file used to configure the initial settings for a computer program

In computing, configuration files are files used to configure the parameters and initial settings for some computer programs or applications, server processes and operating system settings.

A fat binary is a computer executable program or library which has been expanded with code native to multiple instruction sets which can consequently be run on multiple processor types. This results in a file larger than a normal one-architecture binary file, thus the name.

Installation of a computer program, is the act of making the program ready for execution. Installation refers to the particular configuration of software or hardware with a view to making it usable with the computer. A soft or digital copy of the piece of software (program) is needed to install it. There are different processes of installing a piece of software (program). Because the process varies for each program and each computer, programs often come with an installer, a specialised program responsible for doing whatever is needed for the installation. Installation may be part of a larger software deployment process.

VisualWorks is a cross-platform implementation of the Smalltalk language. It is implemented as a development system based on images, which are dynamic collections of software objects, each contained in a system image.

On the classic Mac OS, extensions were small pieces of code that extended the system's functionality. They were run initially at start-up time, and operated by a variety of mechanisms, including trap patching and other code modifying techniques. Initially an Apple developer hack, extensions became the standard way to provide a modular operating system. Large amounts of important system services such as the TCP/IP network stacks and USB and FireWire support were optional components implemented as extensions. The phrase "system extension" later came to encompass faceless background applications as well.

Project Builder was an integrated development environment (IDE) originally developed by NeXT for version 3 of the NeXTSTEP operating system by separating out the code editing parts of Interface Builder into its own application.

<span class="mw-page-title-main">Interface Builder</span> Developer Application for MacOS

Interface Builder is a software development application for Apple's macOS operating system. It is part of Xcode, the Apple Developer developer's toolset. Interface Builder allows Cocoa and Carbon developers to create interfaces for applications using a graphical user interface. The resulting interface is stored as a .nib file, short for NeXT Interface Builder, or more recently, as an XML-based .xib file.

In the macOS, iOS, NeXTSTEP, and GNUstep programming frameworks, property list files are files that store serialized objects. Property list files use the filename extension .plist, and thus are often referred to as p-list files.

Rich Text Format Directory, also known as RTFD, or Rich Text Format with Attachments, is a primary document format of TextEdit, an application native to NeXTSTEP and macOS which has also been ported to other versions of Unix. The file format is based on the Rich Text Format, but can also include "attachments" such as images and animations.

An application directory is a grouping of software code, help files and resources that together comprise a complete software package but are presented to the user as a single object.

Dynamic loading is a mechanism by which a computer program can, at run time, load a library into memory, retrieve the addresses of functions and variables contained in the library, execute those functions or access those variables, and unload the library from memory. It is one of the three mechanisms by which a computer program can use some other software within the program; the others are static linking and dynamic linking. Unlike static linking and dynamic linking, dynamic loading allows a computer program to start up in the absence of these libraries, to discover available libraries, and to potentially gain additional functionality.

webarchive is a Web archive file format available on macOS and Windows for saving and reviewing complete web pages using the Safari web browser. The webarchive format differs from a standalone HTML file because it also saves linked files such as images, CSS, and JavaScript. The webarchive format is a concatenation of source files with filenames saved in the binary plist format using NSKeyedArchiver. Support for webarchive documents was added in Safari 4 Beta on Windows and is included in subsequent versions. Safari in iOS 13 has support for web archive files. Previously there was a third party iOS app called Web Archive Viewer that provided this functionality.

In the Apple macOS operating system, a package is a file system directory that is normally displayed to the user by the Finder as if it were a single file. Such a directory may be the top-level of a directory tree of objects stored as files, or it may be other archives of files or objects for various purposes, such as installer packages, or backup archives.

References

  1. "Information Property List - Bundle Resources". Apple Developer Documentation.
  2. "System-Declared Uniform Type Identifiers". Uniform Type Identifiers Reference. Apple Inc. Retrieved 2012-06-10.
  3. "Bundle Structures". Bundle Programming Guide. Apple Inc. 2017-03-27. Application Bundles.
  4. "PackagingDrafts/GNUstep". Fedora Project Wiki.
  5. "gnustep/tools-make: README.Packaging". GitHub. 5 December 2021.
  6. "Framework". developer.apple.com. Retrieved 2020-10-06.
  7. "Bundle Structures". Bundle Programming Guide. Apple Inc. 2017-03-27. Anatomy of a Framework Bundle.
  8. "User FAQ". GNUstep.
  9. Code Loading Programming Topics for Cocoa: About Loadable Bundles
  10. "Pimp My Safari: plugins". Archived from the original on 2007-10-31.
  11. "Apple Mail plug-ins and tools". Archived from the original on 2009-03-08. Retrieved 2007-11-04.
  12. "Hawk Wings Plug-ins for Apple Mail". Archived from the original on 2007-08-31.