En NeXTSTEP , OPENSTEP y sus descendientes lineales macOS , iOS , iPadOS , tvOS , watchOS y visionOS , y en GNUstep , un paquete es un directorio de archivos con una estructura y una extensión de archivo definidas, lo que permite que los archivos relacionados se agrupen como un elemento conceptualmente único.
Ejemplos de paquetes que contienen código ejecutable incluyen aplicaciones , marcos y complementos . Este tipo de paquete generalmente contiene un archivo que representa código ejecutable y archivos que representan recursos como nibs , plantillas, imágenes, sonidos y otros medios. En algunos otros sistemas, como Microsoft Windows , estos recursos generalmente se incluyen directamente en el archivo ejecutable en el momento de la compilación. En Macintosh más antiguos, se utiliza una técnica similar, donde se pueden agregar metadatos adicionales al recurso fork de un archivo . Similares en concepto son los directorios de aplicación utilizados en RISC OS y en ROX Desktop .
Algunos ejemplos de paquetes que no contienen código ejecutable incluyen paquetes de documentos ( documentos de iWork ) y bibliotecas multimedia ( biblioteca de iPhoto ).
Se accede a los paquetes mediante programación con la NSBundle
clase en los marcos de trabajo de Cocoa , NeXTSTEP y Foundation de GNUstep , y con CFBundle
en Core Foundation . Los paquetes suelen incluir un archivo Info. plist para metadatos. [1] El Identificador de tipo uniforme (UTI) para un paquete de Apple es . [2]com.apple.bundle
Los paquetes de aplicaciones son jerarquías de directorios, donde el directorio de nivel superior tiene un nombre que termina con una .app
extensión.
En un paquete de aplicaciones de macOS, el primer directorio del paquete debajo del directorio de nivel superior suele llamarse Contents
. Dentro Contents
suele haber otro directorio, llamado MacOS
, que contiene el código ejecutable de la aplicación. La Contents
carpeta contiene un archivo llamado Info.plist
, que contiene información de la aplicación, como el nombre del proveedor del software, el nombre de los archivos que contienen el ejecutable y el icono de la aplicación, la versión de la aplicación, los permisos solicitados, etc. Dentro de la Contents
carpeta suele haber también un directorio llamado Resources
, que contiene los recursos de la aplicación. [3]
Entre otras cosas, la carpeta contiene versiones localizadas de los archivos nibResources
de la aplicación .
Otros subdirectorios comunes son Plugins
, Frameworks
, _CodeSignature
y Shared Frameworks
. El Frameworks
directorio contiene los marcos de trabajo que utiliza la aplicación y se utilizan incluso si existe otra versión del marco de trabajo en el sistema. El Shared Frameworks
directorio contiene marcos de trabajo que pueden ser utilizados tanto por la aplicación que los contiene como por otras aplicaciones; se utilizan solo si no existe una versión más reciente en otra parte del sistema. Plugins
contiene código extensible utilizado por la aplicación. La _CodeSignature
carpeta contiene información utilizada por el sistema para validar que el paquete se origina de una parte confiable y no ha sido alterado.
De forma predeterminada, el Finder muestra los paquetes de aplicaciones, también denominados paquetes , como archivos opacos sin estructura subyacente; el contenido del paquete se puede mostrar con el elemento del menú contextual "Mostrar contenido del paquete" .
GNUstep utiliza por defecto el nombre de la aplicación para nombrar la carpeta que contiene el código de la aplicación. Una alternativa es nombrarlos por la arquitectura de la computadora y el sistema operativo para el que está destinado el código para formar un binario grueso , de modo que la aplicación pueda abrirse en muchas plataformas. [4] [5]
Los frameworks de macOS también se almacenan como paquetes; [6] el directorio de nivel superior de un paquete de framework tiene un nombre que es el nombre del framework seguido de la extensión .framework
. En el directorio de nivel superior hay un Versions
directorio, con subdirectorios para una o más versiones del framework, cada subdirectorio contiene el código de la biblioteca dinámica para el framework, en un archivo cuyo nombre es el mismo que el nombre del framework, posiblemente con una Headers
carpeta que contiene archivos de encabezado para el framework, y otras subcarpetas como Resources
. El Versions
directorio también contiene un enlace simbólico Current
al directorio de la versión actual del framework. En el directorio de nivel superior hay enlaces simbólicos al contenido de Versions/Current
. [7]
El Finder muestra los paquetes de frameworks como directorios en lugar de archivos opacos.
Aunque GNUstep utiliza frameworks, normalmente no se almacenan como paquetes, ya que la semántica completa de la carga de frameworks se considera demasiado ajena a otras plataformas. [8]
Los paquetes cargables son paquetes que contienen código que se puede cargar en tiempo de ejecución. [9] Los paquetes cargables suelen tener la extensión .bundle
y se utilizan con mayor frecuencia como complementos . En macOS, hay una forma de cargar paquetes incluso en aplicaciones que no los admiten, lo que permite hacks de terceros para aplicaciones populares, como Safari [10] y Apple Mail . [11] [12] Una característica heredada de NeXTSTEP, GNUstep -[NSBundle principalClass]
también tiene la interfaz.
De forma predeterminada, el Finder muestra los paquetes cargables, también denominados paquetes , como archivos opacos sin estructura subyacente; el contenido del paquete se puede mostrar con el elemento del menú contextual "Mostrar contenido del paquete" .
Hay muchas aplicaciones de macOS que utilizan su propio formato de paquete personalizado (por ejemplo, CandyBar .iContainer
, Aperture .aplibrary
, VMware Fusion .vmwarevm
, etc.).
Un archivo .lproj es un paquete que contiene archivos de localización para software OpenStep, macOS o GNUstep. Normalmente, contiene los .nib
archivos para un idioma determinado junto con .strings
archivos e imágenes, si es necesario (por ejemplo, archivos ReadMe o de licencia). Los creadores de instaladores utilizan estos archivos localizados para personalizar los paquetes de instalación. También se incluyen en un paquete de aplicaciones.