Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека разработчика Mac

Разработчик

Руководство по программированию расширения приложения

PDF
На этой странице

Поймите, как работает расширение приложения

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

Жизненный цикл расширения приложения

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

Например, предположите, что пользователь выбирает некоторый текст в приложении узла OS X, активирует кнопку Share и выбирает расширение приложения из списка совместного использования, чтобы помочь им отправить текст на социальный веб-сайт совместного использования. Приложение узла реагирует на выбор пользователя путем выпуска к расширению запроса, содержащего выделенный текст. Обобщенная версия этой ситуации изображается на шаге 1 рисунка 2-1.

Изобразите 2-1The основной жизненный цикл расширения приложения image: ../Art/app_extensions_lifecycle_2x.png

На шаге 2 рисунка 2-1 система инстанцирует расширения приложения, идентифицированного в запросе приложения узла, и устанавливает канал передачи между ними. Расширение выводит на экран свое представление в контексте приложения узла и затем использует элементы, которые это получило в запросе приложения узла для выполнения его задачи (в этом примере, расширение получает выделенный текст).

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

Вскоре после того, как расширение приложения выполняет свою задачу (или запускает фоновый сеанс для выполнения его), система завершает расширение, как показано на шаге 4.

Как связывается расширение приложения

Расширение приложения связывается прежде всего с его приложением узла и делает так в условиях, напоминающих об обработке транзакций: существует запрос от узла и ответ от расширения. Рисунок 2-2 показывает упрощенное представление отношения между рабочим расширением, приложение узла, запустившее его, и содержание приложения.

Полагайте, что 2-2An расширение приложения связывается непосредственно только с приложением узла image: ../Art/simple_communication.png

Нет никакой прямой связи между расширением приложения и его содержанием приложения; обычно, в то время как содержавшее расширение работает, содержание приложения даже не работает. Расширение приложения, содержащее приложение и приложение узла, не связывается вообще.

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

Пунктирная линия на рисунке 2-2 представляет ограниченное взаимодействие, доступное между расширением приложения и его содержанием приложения. Сегодня виджет (и никакой другой тип расширения приложения) может попросить, чтобы система открыла свое содержание приложения путем вызова openURL:completionHandler: метод NSExtensionContext класс. Как обозначено стрелками Чтения-записи на рисунке 2-3, любое расширение приложения и его содержание приложения могут получить доступ к совместно использованным данным в конфиденциально определенном совместно используемом контейнере. Полный словарь коммуникации между расширением, его приложением узла и его содержанием приложения показан в простой форме на рисунке 2-3.

Полагайте, что 2-3An расширение приложения может связаться косвенно с его содержанием приложения image: ../Art/detailed_communication.png

Некоторый APIs недоступен к расширениям приложения

Из-за его фокусируемой роли в системе расширение приложения не имеет права участвовать в определенных действиях. Расширение приложения не может:

  • Доступ a sharedApplication объект, и так не может использовать ни один из методов на том объекте

  • Используйте любой API, отмеченный в заголовочных файлах с NS_EXTENSION_UNAVAILABLE макрос, или подобный макрос недоступности или любой API в недоступной платформе

    Например, в iOS 8.0, платформа HealthKit и платформа EventKit UI недоступны к расширениям приложения.

  • Получите доступ к камере или микрофону на устройстве на iOS

  • Выполните продолжительные фоновые задачи

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

    (Расширение приложения может инициировать загрузки или загрузки с помощью NSURLSession объект, с результатами тех операций сообщил содержанию приложения.)

  • Получите использование данных AirDrop

    (Расширение приложения может отправить использованию данных AirDrop таким же образом, приложение делает: путем использования UIActivityViewController класс.)