Введение

Тип пакета каталогов

В NeXTSTEP, OPENSTEP и их прямых наследниках macOS, iOS, iPadOS, tvOS и watchOS, а также в GNUstep, пакет представляет собой каталог файлов с определенной структурой и расширением, позволяющий группировать связанные файлы вместе как концептуально единый элемент. Примеры пакетов, содержащих исполняемый код, включают приложения, фреймворки и плагины. Этот тип пакета обычно содержит один файл, представляющий исполняемый код, и файлы, представляющие ресурсы, такие как nib-файлы, шаблоны, изображения, звуки и другие медиафайлы. В некоторых других системах, таких как Microsoft Windows, эти ресурсы обычно включаются непосредственно в исполняемый файл во время компиляции. На старых Macintosh использовалась аналогичная техника, при которой дополнительные метаданные могли быть добавлены в ресурсную ветвь файла. Похожие по концепции каталоги приложений используются в RISC OS и на рабочем столе ROX. Примеры пакетов, не содержащих исполняемый код, включают пакеты документов (документы iWork) и медиатеки (медиатека iPhoto). Пакеты программно доступны через класс NSBundle в Cocoa, фреймворках Foundation NeXTSTEP и GNUstep, а также через CFBundle в Core Foundation. Пакеты часто включают файл для хранения метаданных. Универсальный идентификатор типа (UTI) для пакета Apple — com.apple.bundle.

Комплекты приложений

Пакеты приложений представляют собой иерархию каталогов, при этом каталог верхнего уровня имеет имя, заканчивающееся расширением приложения. В пакете приложения macOS первый каталог под каталогом верхнего уровня обычно называется Contents (Содержание). Внутри Contents обычно находится еще один каталог, называемый MacOS, который содержит исполняемый код приложения. В папке Contents содержится файл Info.plist, содержащий информацию о приложении, такую как имя поставщика программного обеспечения, имена файлов, содержащих исполняемый файл и значок приложения, версию приложения, запрошенные разрешения и т.д. В папке Contents обычно также находится каталог Resources (Ресурсы), который содержит ресурсы приложения. В частности, папка Resources содержит локализованные версии файлов nib приложения. Другие распространенные подкаталоги включают Plugins (Плагины), Frameworks (Фреймворки), CodeSignature и Shared Frameworks (Общие фреймворки). Каталог Frameworks содержит фреймворки, используемые приложением, и они используются даже в том случае, если в системе существует другая версия фреймворка. Каталог Shared Frameworks содержит фреймворки, которые могут использоваться как приложением, которое их содержит, так и другими приложениями; они используются только в том случае, если более новая версия отсутствует в другом месте системы. Plugins содержит расширяемый код, используемый приложением. Папка CodeSignature содержит информацию, используемую системой для проверки подлинности пакета, чтобы убедиться, что он исходит от доверенного источника и не был подделан. По умолчанию Finder отображает пакеты приложений, которые также можно называть пакетами, как непрозрачные файлы без внутренней структуры; содержимое пакета можно отобразить с помощью пункта контекстного меню "Показать содержимое пакета". GNUstep по умолчанию использует имя приложения для именования папки, содержащей код приложения. Альтернативно, их можно именовать по архитектуре компьютера и операционной системе, для которых предназначен код, чтобы создать универсальный двоичный файл, позволяющий открывать приложение на многих платформах.

Фреймворковые пакеты macOS

Фреймворки macOS также хранятся в виде пакетов; корневой каталог пакета фреймворка имеет имя, совпадающее с именем фреймворка, с добавлением расширения "framework". В корневом каталоге находится каталог "Versions", содержащий подкаталоги для одной или нескольких версий фреймворка. Каждый подкаталог содержит код динамической библиотеки фреймворка в файле с тем же именем, что и у фреймворка, а также, возможно, папку "Headers" с файлами заголовков и другие подпапки, такие как "Resources". Каталог "Versions" также содержит символическую ссылку "Current", указывающую на каталог текущей версии фреймворка. В корневом каталоге имеются символические ссылки на содержимое "Versions/Current". Finder отображает пакеты фреймворков как каталоги, а не как непрозрачные файлы. Хотя GNUstep использует фреймворки, они обычно не хранятся в виде пакетов, поскольку полная семантика загрузки фреймворков считается слишком отличной от используемой на других платформах.

Загружаемые пакеты

Загружаемые пакеты — это пакеты, содержащие код, который можно загрузить во время выполнения. Загружаемые пакеты обычно имеют расширение «bundle» и чаще всего используются как плагины. В macOS существует способ загружать пакеты даже в приложения, которые их не поддерживают, что позволяет создавать сторонние модификации для популярных приложений, таких как Safari и Apple Mail. Эта функция, унаследованная от NeXTSTEP, также реализована в GNUstep. По умолчанию Finder отображает загружаемые пакеты, которые также можно называть пакетами, как непрозрачные файлы без видимой структуры; содержимое пакета можно просмотреть с помощью пункта контекстного меню «Показать содержимое пакета».

Другие пакеты

Существует множество приложений macOS, использующих собственный формат пакетов (например, CandyBar iContainer, Aperture aplibrary, VMware Fusion vmwarevm и другие).

- Продолжаю.

Файл lproj — это пакет, содержащий файлы локализации для программного обеспечения OpenStep, macOS или GNUstep. Обычно он содержит файлы nib для определенного языка, а также файлы строк и изображения, если это требуется (например, файлы ReadMe или лицензионные соглашения). Эти локализованные файлы используются создателями установщиков для настройки установочных пакетов. Они также включаются в состав пакета приложения.