О загружаемых пакетах

Загружаемые пакеты являются пакетами исполняемого кода и связанных ресурсов, которые могут быть загружены во время выполнения. Эта гибкость позволяет Вам разрабатывать очень модульные, настраиваемые, и расширяемые приложения. После чтения этого документа Вы поймете, как структурированы загружаемые пакеты и когда необходимо использовать их.

Введение в загружаемые пакеты

OS X использует структуру каталогов, вызвал пакет по всей системе для упаковки исполняемого кода и связал ресурсы. Каталог пакета, в сущности, «связывает» ряд ресурсов в дискретном пакете. Ресурсы включают такие вещи как Интерфейсные файлы пера Разработчика, изображения, звуки и локализованные символьные строки. Поскольку код и связанные ресурсы находятся в одном месте в файловой системе, установке, удалении, и другие формы управления программным обеспечением проще.

Пакеты прибывают в несколько вариантов: приложения, платформы и загружаемые пакеты. Этот документ имеет дело в частности с загружаемыми пакетами, содержащими код, который может быть загружен во время выполнения, освободив Вас от многих ограничений статической компиляции. Проектирование Вашего приложения вокруг загружаемых пакетов предоставляет Вам много преимуществ:

Разгрузка ограничивается приложениями, не использующими среду выполнения Какао. Во время этой записи время выполнения Objective C не поддерживает разгрузку символов Objective C, таким образом, не может быть разгружено Какао пакеты, когда-то загруженные.

OS X определяет расширение .bundle идентифицировать загружаемые пакеты. Можно также определить собственное расширение (и связанный значок) для определенного типа пакета.

Расширения ядра являются типом загружаемого пакета, который системные подпрограммы пакета распознают и обрабатывают соответственно (несмотря на то, что их внутренняя структура отличается от других загружаемых пакетов). Эти пакеты имеют расширение .kext. Менеджер по Ядру, требующий расширений ядра как типа документа, динамично загружает их в среду ядра. Этот документ не имеет дело с расширениями ядра далее. Для узнавания больше см. Дарвинскую Документацию.

Для получения дополнительной информации о пакетах, см. Руководство по программированию Пакета. Для получения дальнейшей информации о том, как OS X загружает и выполняет код, посмотрите OS X ABI Мужественная Ссылка Формата файла.

Когда использовать загружаемые пакеты

Существенно, загружаемые пакеты позволяют Вам загрузить код и связать символы во время выполнения. На практике они могут помочь Вам удовлетворить три связанных потребностей:

Ленивое соединение и загрузка

Большие, сложные приложения выполняют множество задач. Обычно, пользователь не должен выполнять все доступные задачи в данном сеансе использования. Это означает, что блоки кода приложения, иногда значительных частей, загружаются в память, но никогда не используются.

Можно избежать ненужной загрузки кода путем разделения приложения в загружаемые пакеты, состоящие из логически связанного кода. Также включая функции средства доступа или методы для этих частей кода, можно беспрепятственно сослаться на объекты, непосредственно не проверяя, был ли код загружен или не — эти проверки имеют место неявно в методах доступа.

Ленивая загрузка может принять иерархическую форму с частями крупного приложения на верхнем уровне и более определенных функциях ниже. Определенные функции обычно принимают форму плагинов, как описано в Расширяемости Приложения.

Модульный принцип кода

Существует несколько способов построить Ваше приложение из модулей в логически отдельные компоненты кода. Основной способ построить Ваш код из модулей состоит в том, чтобы разделить его на многократные исходные файлы — все нетривиальные приложения создаются этот путь. Следующий уровень сложности является платформой, содержащей исполняемый код, заголовки, и возможно другие ресурсы в пакете каталога. С небольшой дополнительной работой можно также использовать загружаемые пакеты в качестве модуля модульного принципа.

Несмотря на то, что не каждая ситуация требует модуляризацию через загружаемые пакеты, Вы получаете много выгоды путем включения дополнительной работы. Когда кодовая база разделяется на многократные пакеты, каждый пакет может быть разработан и протестирован независимо от других до еще большей степени, чем платформы. Поскольку пакет содержит динамично загруженный исполняемый код, другие части приложения могут быть агностиком функциональных адресов, объектных адресов, и даже какой класс ссылочный объект принадлежит, пока это знает достаточно о классе для использования его. Различные версии различных компонентов кода могут быть протестированы, не перекомпилировав приложение — можно объединить различные компоненты только путем перетаскивания значков в Средстве поиска.

Расширяемость приложения

Большая часть использования загружаемых пакетов является результатом потребности в расширяемости приложения. Можно определить сменную архитектуру, если Вы хотите, чтобы Ваше приложение было расширяемо, или внутренне в Вашей организации или сторонними разработчиками. Сменная архитектура определяет интерфейс, через который должным образом созданный загружаемый пакет, названный плагином, может добавить функциональность. Примерами плагинов являются модули экранной заставки, предпочтительные области, палитры Interface Builder, графические фильтры Adobe Photoshop и музыка iTunes visualizers.

Вещи иметь в виду

Используя загружаемые пакеты не прибывает «бесплатно», несмотря на то, что и Какао и Базовая Основа предоставляют богатую поддержку API в этом отношении. При попытке решить, использовать ли загружаемые пакеты, иметь в виду следующие затраты:

Однако, если Ваши потребности приложения задержанная загрузка, более динамический модульный принцип, чем платформы может обеспечить, или расширяемость, используйте загружаемые пакеты.

Анатомия загружаемого пакета

Каталог пакета содержит иерархию ресурсов и исполняемого кода, каждого в его надлежащем месте. Типичная иерархия каталогов пакета похожа на Перечисление 1.

Перечисление 1  расположение каталога типичного загружаемого пакета

- MyLoadableBundle
    Contents/
        Info.plist
        MacOS/
            MyLoadableBundle
        Resources/
            Lizard.jpg
            MyLoadableBundle.icns
            English.lproj/
                MyLoadableBundle.nib
                InfoPlist.strings
            Japanese.lproj/
                MyLoadableBundle.nib
                InfoPlist.strings

Каждый каталог пакета содержит один элемент, Contents каталог. Contents содержит два настоящие файлов в каждом пакете, Info.plist и PkgInfo, а также MacOS каталог, содержащий исполняемый код, и Resources каталог, содержащий все ресурсы некода. Более сложные пакеты могут содержать дополнительные каталоги такой как Frameworks, PlugIns, SharedFrameworks, и SharedSupport— все функции поддерживаются законченными пакетами приложений.

Info.plist файл или информационный список свойств, является списком свойств XML, содержащим пары ключ/значение информации о пакете. Системные подпрограммы позволяют исполнимой программе пакета читать эти атрибуты во время выполнения. Вы свободны хранить любые определенные с помощью приложения данные в информационном списке свойств также. XCode обеспечивает пользовательский интерфейс для редактирования информационных списков свойств и включает все требуемые ключи по умолчанию.

Информационные ключи списка свойств могут быть локализованы путем добавления соответствующих записей в InfoPlist.strings файлы, содержавшиеся в каталогах языка (такой как Japanese.lproj) в Resources каталог.

Ключи списка свойств наиболее релевантной информации для загружаемых пакетов:

Для полного описания всего стандарта Info.plist ключи, посмотрите Ключевую Ссылку Списка свойств.

MacOS каталог содержит Мужественный исполняемый код для загружаемого пакета. Имя исполнимой программы в этом каталоге обычно является тем же как каталогом пакета без его расширения и совпадает со значением для CFBundleExecutable введите информационный список свойств. Определенные типы пакетов могут испытать недостаток в исполняемом коде. Загружаемым пакетам, приложениям, и большинству других типов пакетов, однако, нужен он по их характеру.

Resources каталог содержит все ресурсы, связанные с пакетом, такие как звуки, изображения, Интерфейсные файлы пера Разработчика и локализованные строки. Локализованные ресурсы содержатся в языке.lproj каталоги. Можно создать подкаталоги в Resources организовывать типы ресурсов, если Вам нравится.

Для более подробной информации об информационных списках свойств посмотрите информационные Списки свойств.