1224 0

En NeXTSTEP, OPENSTEP, GNUstep y sus descendientes lineales macOS e iOS, un Bundle o paquete es un directorio de archivos con una estructura y extensión de archivo definidas, lo que permite agrupar los archivos relacionados como un elemento conceptualmente único que puede usarse de diferentes formas.

Ejemplos de paquetes que contienen código ejecutable incluyen aplicaciones, frameworks y plugins. Este tipo de paquete suele contener un archivo que representa código ejecutable y archivos que representan recursos como plumas, plantillas, imágenes, sonidos y otros medios. En algunos otros sistemas, como Microsoft Windows, estos recursos suelen incluirse directamente en el propio archivo ejecutable en el momento de la compilación. En Macintosh más antiguos, se utiliza una técnica similar, donde se pueden añadir metadatos adicionales a la bifurcación de recursos de un archivo. Similares en concepto son los directorios de aplicaciones utilizados en el SO RISC y en el escritorio ROX.

Algunos ejemplos de paquetes que no contienen código ejecutable incluyen paquetes de documentos1 y bibliotecas multimedia2.

Se accede a los paquetes programáticamente con la clase NSBundle en los marcos de trabajo de Cocoa, NeXTSTEP y GNUstep Foundation, y con CFBundle en Core Foundation. El identificador de tipo uniforme (UTI) para un paquete de Apple es com.apple.bundle.

En el Mac

Los paquetes de aplicaciones son jerarquías de directorios, y el directorio de nivel superior tiene un nombre que termina con una extensión. app. En un paquete de aplicaciones, el primer directorio del paquete situado debajo del directorio de nivel superior suele denominarse Contents. Dentro de Contents suele haber otro directorio3, que contiene el código ejecutable de la aplicación y que se muestra con un icono característico. Por ejemplo, cuando estás creando un script de Terminal y quieres invocar una aplicación, tienes que hacer referencia a este ejecutable y no a la ruta general de la aplicación, ya que sería interpretada como una carpeta por el script y no ocurriría nada.

Dentro de la carpeta Contenidos suele haber también un directorio llamado Resources, que contiene los recursos de la aplicación, incluyendo imágenes de carga, iconos de la app u otros recursos gráficos, plantillas o el icono personalizado de la aplicación.

Entre otras cosas, la carpeta Resources contiene versiones localizadas de los archivos nib de la aplicación. Las aplicaciones incluso cuando son presentadas como paquetes con extensión .bundle como elementos que se ejecutan por el sistema, también incluyen una carpeta llamada _CodeSignature. Esta carpeta, que incluye un solo archivo llamado CodeResources, está destinada a firmar el código del ejecutable a un desarrollador específico y gestiona la seguridad de la aplicación, de forma que si el código de la misma es modificado por una aplicación o el usuario, la aplicación deja de funcionar correctamente4 porque el sistema entiende que la aplicación podría haber sido manipulada por ejemplo por un malware.

Otros subdirectorios comunes incluyen plugins, Frameworks y Frameworks compartidos. El directorio Frameworks contiene los Frameworks de trabajo utilizados por la aplicación y se utilizan incluso si existe otra versión del marco del Frameworks en el sistema. El directorio de Frameworks compartidos contiene Frameworks de trabajo que pueden ser utilizados tanto por la aplicación que los contiene como por otras aplicaciones; sólo se utilizan si no existe una versión más nueva en otra parte del sistema. Los plugins contienen código extensible usado por la aplicación.

De forma predeterminada, el Finder muestra paquetes de aplicaciones, que también se pueden denominar paquetes, como archivos opacos sin estructura subyacente; el contenido del paquete se puede mostrar con la opción de menú contextual “Mostrar contenido del paquete”.

Idiomas y los .lproj

Un archivo. lproj, normalmente dentro de un paquete para macOS en una aplicación, es un paquete que contiene archivos de localización para el software macOS. Típicamente contiene los archivos. nib para un idioma dado junto con los archivos de cadena e imágenes si es necesario5. Estos archivos localizados son utilizados por los instaladores para personalizar los paquetes de instalación. También se incluyen en un paquete de aplicaciones, generalmente para todos los idiomas disponibles de forma que si se cambia el lenguaje del sistema, la aplicación acompaña a ese cambio mostrando la aplicación en el idioma seleccionado. En el caso de que el idioma no esté disponible, se usará el inglés por defecto.

Frameworks como paquetes en macOS

Los frameworks en macOS también se almacenan como paquetes; el directorio de nivel superior de un paquete de frameworks de trabajo tiene un nombre que es el nombre del framework de trabajo seguido por la extensión framework. En el directorio de nivel superior hay un directorio Versions, con subdirectorios para una o más versiones del framework, cada subdirectorio contiene el código de biblioteca dinámica para el framework, en un archivo cuyo nombre es el mismo que el nombre del framework, posiblemente con una carpeta Headers que contiene ficheros de cabecera para el framework, y otras subcarpetas como Resources. El directorio Versions también contiene un enlace simbólico al directorio para la versión actual del framework. En el directorio de nivel superior hay enlaces simbólicos al contenido de Versions/Current. El Finder muestra paquetes de framework como directorios en lugar de como archivos opacos.

Paquetes que se pueden cargar

Los paquetes cargables son bundles que contienen código que se pueden cargar en tiempo de ejecución. Los paquetes cargables generalmente tienen la extensión. bundle, y se utilizan más a menudo como plug-ins. En MacOS, hay una forma de cargar paquetes incluso en aplicaciones que no son compatibles con ellos, lo que permite hacer hacks de terceros para aplicaciones populares, como Safari y Apple Mail y que son utilizados como plugins para ampliar las capacidades de la aplicación.

De forma predeterminada, el Finder muestra bundles cargables, como archivos opacos sin estructura subyacente; el contenido del paquete se puede mostrar con la opción de menú contextual “Mostrar contenido del paquete”.

Documentos como paquetes

Hay diferentes tipos de documentos utilizados por macOS y sus aplicaciones  que pueden estar organizados como paquetes, aunque muestran una extensión propia del documento. Realmente no es un archivo único, sino que se trata de un grupo de archivos con una extensión propia, pero que se puede desmontar como paquete para mirar su interior. El método que utiliza Apple para gestionar estos paquetes como archivos es comprimirlos en un archivo zip y usar en lugar de esa extensión, la extensión propia del documento. Así, para abrir el documento, realmente la aplicación lo que hace es descomprimir el archivo dando por sentado que es un zip y entonces el usuario puede trabajar con el documento. Sim, por ejemplo, cambias la extensión .key de Keynote a una presentación por .zip puedes descomprimir el documento y acceder en la carpeta Contents a los recursos usados en el archivo de Keynote, recuperando así imágenes, vídeos u otros elementos añadidos a la presentación. Lo mismo ocurre con el testo de archivos de iWork, archivos de iBooks Author y otras aplicaciones que generan archivos que utilizan recursos externos añadidos por el usuario: realmente no son documentos como archivos binarios, como ocurriría con una simple imagen JPEG, sino que incluyen mucha más información que está dividida en muchos más archivos más pequeños.

En iOS

Invisibles para el usuario, en iOS los paquetes o bundles también están presentes, ya sea en forma de aplicaciones o de paquetes utilizados por el sistema. La estructura del paquete de aplicaciones iOS está más orientada a las necesidades de un dispositivo móvil. Utiliza una estructura relativamente plana con pocos directorios extraños en un esfuerzo por ahorrar espacio en disco y simplificar el acceso a los archivos. Un paquete de aplicación iOS típico contiene el ejecutable de la aplicación y cualquier recurso utilizado por la aplicación6 en el directorio de paquete de nivel superior. Los únicos archivos que se requieren para estar en subdirectorios son aquellos que necesitan ser localizados; sin embargo, se puede crear subdirectorios adicionales en las propias aplicaciones para organizar recursos y otros archivos relevantes. Es importante tener en cuenta que aunque las aplicaciones Mac pueden incluir recursos adicionales como frameworks privados, plug-ins, plantillas de documentos y otros recursos de datos personalizados que son parte integral de la aplicación, en el caso de iOS se puede incluir recursos de datos personalizados en los paquetes de aplicaciones, pero no se puede incluir frameworks o plug-ins personalizados.7

Notas

  1. documentos de iWork
  2. iPhoto/Fotos Library
  3. llamado MacOS, o usando el nombre de la aplicación en GNUstep
  4. O deja de funcionar totalmente
  5. por ejemplo, ReadMe o archivos de licencia de tecnologías que han sido utilizadas en la aplicación
  6. por ejemplo, el icono de la aplicación, otras imágenes y contenido localizado
  7. Parte de los textos, Wikipedia, ampliados con documentación de Apple y notas personales del autor
In this article


Join the Conversation