Создание расширения приложения
Когда Вы готовы разработать расширение приложения, начаться путем выбора точки расширения, поддерживающей пользовательскую задачу, Вы хотите упростить. Используйте соответствующий шаблон расширения приложения XCode и улучшите файлы по умолчанию с пользовательским кодом и пользовательским интерфейсом (UI). После того, как Вы оптимизируете и протестируете свое расширение приложения, Вы готовы распределить его в своем содержании приложения.
Начните разработку путем выбора правильной точки расширения
Поскольку каждая точка расширения предназначается для четко определенного пользовательского сценария, Ваше первое задание должно выбрать точку расширения, поддерживающую тип функциональности, которую Вы планируете поставить. Этим выбором является важный, потому что он определяет APIs, который доступен Вам и, в некоторых случаях, пути, которыми ведет себя APIs.
Точки расширения, поддерживаемые в iOS и OS X, вместе с их Info.plist
ключи идентификатора точки расширения, описаны в разделе NSExtensionPointIdentifier.
После выбора точки расширения, которая целесообразна для расширения приложения, добавьте новую цель к содержанию приложения. Самый простой способ добавить цель расширения приложения состоит в том, чтобы использовать шаблон Xcode, обеспечивающий цель, предварительно сконфигурированную для Вашей точки расширения.
Для добавления новой цели к проекту приложения XCode выберите File> New> Target. На боковой панели на левой стороне нового целевого диалогового окна выберите Application Extension for iOS или OS X. В области на правой стороне диалогового окна XCode выводит на экран шаблоны, которые можно выбрать. Например, рисунок 3-1 показывает шаблоны, которые можно использовать для создания расширения приложения для iOS.
После того, как Вы выбираете шаблон и заканчиваете добавлять цель к Вашему проекту, необходимо быть в состоянии создать и выполнить проект даже перед настройкой дополнительного кода. При создании расширения на основе шаблона Xcode Вы получаете дополнительный пакет, заканчивающийся в .appex
.
В большинстве случаев можно протестировать расширение приложения по умолчанию путем включения его в Установках системы или Настройках и затем доступа к нему через другое приложение. Например, можно протестировать расширение Доли OS X путем открытия веб-страницы в Safari, нажатия кнопки на панели инструментов Share и выбора расширения в появляющемся меню.
Исследуйте шаблон расширения приложения по умолчанию
Каждый шаблон расширения приложения включает файл списка свойств (т.е. Info.plist
файл), класс контроллера представления и пользовательский интерфейс по умолчанию, все из которых определяются точкой расширения. Класс контроллера представления по умолчанию (или основной класс) может содержать тупики для методов точки расширения, которые необходимо реализовать.
Цель расширения приложения Info.plist
файл идентифицирует точку расширения и может указать некоторые подробные данные о Вашем расширении. Как минимум файл включает NSExtension
ключ и словарь ключей и значений, которые указывает точка расширения. Например, значение требуемого NSExtensionPointIdentifier
ключ является обратным именем DNS точки расширения, такой как com.apple.widget-extension
. Вот некоторые из других ключей и значений, которые можно видеть в расширении NSExtension
словарь:
NSExtensionAttributes
Словарь специфичных для точки расширения атрибутов, такой как
PHSupportedMediaTypes
для фотографии, Редактируя расширение.NSExtensionPrincipalClass
Имя основного класса контроллера представления, создаваемого шаблоном, такой как
SharingViewController
. Когда приложение узла вызывает Ваше расширение, точка расширения инстанцирует этого класса.NSExtensionMainStoryboard
(только расширения iOS)Файл раскадровки по умолчанию для расширения, обычно называемого
MainInterface
.
В дополнение к настройкам списка свойств шаблон может установить некоторые возможности по умолчанию. Каждая точка расширения может определить возможности, которые целесообразны для типа задачи поддержки точки расширения. Например, расширение Провайдера Документа iOS включает com.apple.security.application-groups
право.
Все шаблоны для расширений приложения OS X включают Тестовую среду приложения и com.apple.security.files.user-selected.read-only
права по умолчанию. Вы, возможно, должны были бы определить дополнительные возможности своего расширения, если оно должно сделать, вещам нравится, используют сеть или получают доступ к фотографиям или контактной информации пользователя.
Реагируйте на запрос приложения узла
Как Вы узнали в, Понимают, Как Расширение Работает, расширение приложения открывается, когда пользователь выбирает расширение в приложении узла и проблемах приложения узла запрос. На высоком уровне Ваше расширение получает запрос, помогает пользователю выполнить задачу, и завершает или отменяет запрос, согласно действию пользователя. Например, расширение Доли получает запрос от приложения узла и отвечает путем отображения его представления. После того, как пользователи составляют содержание в представлении, они принимают решение отправить содержание или отменить сообщение, и расширение завершает или отменяет запрос соответственно.
Когда приложение узла отправляет запрос к расширению приложения, оно указывает дополнительный контекст. Для многих расширений самая важная часть контекста является набором элементов, пользователь хочет работать с тем, в то время как они находятся в расширении. Например, контекст для расширения Доли OS X мог бы включать выбор текста, который пользователь хочет отправить.
Как только узел проблемы приложения его запрос (обычно, путем вызова beginRequestWithExtensionContext:
метод), Ваше расширение приложения может использовать extensionContext
свойство на его основном контроллере представления для получения контекста. Дочерние контроллеры представления также имеют доступ к этому свойству посредством объединения в цепочку.
Затем, Вы используете NSExtensionContext
класс, чтобы исследовать контекст и получить элементы в нем. Часто, это работает хорошо для получения контекста и элементов в контроллере представления loadView
метод так, чтобы можно было вывести на экран информацию в представлении. Для получения контекста расширения, можно использовать код как следующее:
NSExtensionContext *myExtensionContext = self.extensionContext;
Особенно интересный объект контекста inputItems
свойство, которое может содержать элементы Ваше расширение приложения, должно использовать. inputItems
свойство содержит массив NSExtensionItem
объекты, каждый из которых содержит элемент расширение, могут продолжить работать. Для получения элементов от объекта контекста Вы могли бы использовать код как это:
NSArray *inputItems = myExtensionContext.inputItems;
Каждый NSExtensionItem
объект содержит много свойств, описывающих аспекты элемента, такие как его заголовок, текст содержания, присоединения и пользовательская информация.
Обратите внимание на то, что attachments
свойство содержит массив данных носителей, это связано с элементом. Например, в элементе связался с запросом совместного использования, attachments
свойство могло бы содержать представление веб-страницы, которую пользователь хочет совместно использовать.
После того, как пользователи работают с входными элементами (если выполнение так является частью использования расширения приложения), расширение приложения обычно дает пользователям выбор между завершением или отменой задачи. В зависимости от выбора пользователя Вы вызываете любого completeRequestReturningItems:completionHandler:
метод, дополнительно возвращаясь NSExtensionItem
объекты к приложению узла, или cancelRequestWithError:
метод, возвращая код ошибки.
В iOS Вашему расширению приложения, возможно, понадобилось бы немного больше времени для выполнения потенциально длинной задачи, такой как загрузка содержания к веб-сайту. Когда дело обстоит так, можно использовать NSURLSession
класс для инициирования передачи в фоновом режиме. Поскольку фоновая передача использует отдельный процесс, передача может продолжаться как низкоприоритетная задача, после того, как Ваше расширение завершает запрос приложения узла и завершается. Узнать больше об использовании NSURLSession
в Вашем расширении посмотрите Загрузки Выполнения и Загрузки.
Оптимизируйте эффективность и производительность
Расширения приложения должны чувствовать себя ловкими и легкими пользователям. Разработайте свое расширение приложения для запуска быстро, стремясь хорошо к менее чем одной секунде. Расширение, запускающееся слишком медленно, завершается системой.
Пределы памяти для расширений запущенного приложения значительно ниже, чем пределы памяти, наложенные на приоритетное приложение. На обеих платформах система может настойчиво завершить расширения, потому что пользователи хотят возвратиться к их основной цели в приложении узла. Некоторые расширения могут иметь более низкие пределы памяти, чем другие: Например, виджеты должны быть особенно эффективными, потому что у пользователей, вероятно, будет несколько виджетов, открытых одновременно.
Вашему расширению приложения не принадлежит основной цикл выполнения, таким образом, крайне важно, чтобы Вы соблюли установленные правила для правомерного поведения в основных циклах выполнения. Например, если Ваше расширение блокирует основной цикл выполнения, оно может создать плохой пользовательский опыт в другом расширении или приложении.
Следует иметь в виду, что GPU является совместно используемым ресурсом в системе. Расширения приложения не получают высший приоритет для совместно используемых ресурсов; например, Сегодня виджет, выполняющий интенсивную графикой игру, мог бы дать пользователям неудачный опыт. Система, вероятно, завершит такое расширение из-за давления памяти. Функциональность, делающая интенсивное использование системных ресурсов, является подходящей для приложения, не расширения приложения.
Разработайте оптимизированный UI
Большинство точек расширения требует, чтобы Вы предоставили, по крайней мере, некоторый пользовательский UI, который видят пользователи, когда они открывают Ваше расширение приложения. UI расширения должно быть простым, ограничено и фокусируемого на упрощении единственной задачи. Для улучшения производительности и опыта пользователя избегите включая посторонний UI, не поддерживающий основную задачу расширения.
Большинство шаблонов расширения приложения XCode обеспечивает заполнителя UI, который можно использовать для начала работы.
Пользователи идентифицируют Ваше расширение приложения его значком и его именем. Значок расширения должен совпасть со значком приложения своего содержания приложения. Используя содержание значка приложения помогает пользователю быть уверенным, что расширение фактически предоставлено приложением, которое они установили.
В iOS расширение пользовательского действия использует шаблонную версию образа своего содержания значка приложения, который необходимо обеспечить.
расширения Доли iOS автоматически используют содержание значка приложения. При обеспечении отдельного значка в цели расширения Доли XCode игнорирует ее. Для всех других типов расширения приложения необходимо обеспечить значок, соответствующий содержание значка приложения.
Для получения информации о том, как добавить значок к Вашему расширению приложения, посмотрите Создание Каталога Актива и Добавление Набора Изображения Набора или Запуска значка приложения. Для больше о требованиях значка для расширений приложения для iOS, см. “Расширения Приложения” в Инструкциях по Интерфейсу пользователя iOS
Для расширения приложения нужно короткое, распознаваемое имя, включающее имя содержания приложения, с помощью образца <Содержащий имя приложения> — <Имя расширения приложения>. Это упрощает для пользователей управлять расширениями по всей системе. Можно, дополнительно, использовать содержание имени приложения как есть для расширения в общем падеже, что содержание приложения обеспечивает точно одно расширение.
Выведенное на экран имя Вашего расширения приложения предоставлено дополнительной целью CFBundleDisplayName
значение, которое можно отредактировать в расширении Info.plist
файл. Если Вы не обеспечиваете значение для CFBundleDisplayName
ключ, Ваше расширение использует имя своего содержания приложения, как это появляется в CFBundleName
значение.
Удостоверьтесь, что Вы локализуете имя расширения приложения при обеспечении локализованного расширения приложения.
Для некоторых расширений приложения также нужны краткие описания. Например, виджет OS X выводит на экран описание, чтобы помочь пользователям выбрать виджеты, которые они хотят видеть в представлении Today. Для обеспечения этого текста отредактируйте значение widget.description
введите свой виджет InfoPlist.strings
файл.
Гарантируйте Свои Работы Расширения приложения для iOS над Всеми Устройствами
Необходимо гарантировать, что представленное расширение приложения универсально: это должно работать над iPhone, iPod touch и iPad. Это требование применяется независимо от того, какое семейство целевого устройства Вы выбираете для своего содержания приложения. Шаблоны расширения приложения в XCode сконфигурированы правильно для универсального семейства целевого устройства.
Чтобы объявить, что Ваше расширение приложения универсально, используйте установку сборки семейства целевого устройства в XCode, указывая значение «iPhone/iPad».
Гарантировать, что Ваше расширение приложения универсально
В навигаторе проекта XCode для Вашего проекта клавиатуры выберите файл проекта.
Если список проекта и целей в редакторе проекта скрыт, покажите его. Чтобы сделать это, нажмите кнопку слева от панели вкладок редактора проекта.
В целевой группе в проекте и целевом списке, выберите цель для своего расширения приложения.
Выберите вкладку Build Settings в редакторе проекта.
Гарантируйте, что кнопки Basic и Combined нажимаются, чтобы упростить для Вас определять местоположение настроек, в которых Вы нуждаетесь здесь.
В группе Развертывания в редакторе проекта просмотрите установку Targeted Device Family. Для обоих конфигурация Отладки и Выпуска значение должно быть «iPhone/iPad».
Если Вы находите различные значения, исправляете их, чтобы быть «iPhone/iPad».
Используйте Автоматическое Расположение и классы размера при разработке и создании расширения приложения. Протестируйте свое расширение приложения, чтобы гарантировать, что оно ведет себя, поскольку Вы ожидаете его к для всех размеров устройства и ориентаций. Сделайте это в Средстве моделирования iOS, как описано в Руководстве пользователя Средства моделирования iOS, и, если это возможно, также протестируйте на физических устройствах в обеих ориентациях.
Помните, что, даже если Ваше содержание приложения предназначается только для семейства устройства iPad, Ваше содержавшее расширение приложения может появиться в контексте приложения для iPhone, работающего в режиме эмуляции.
Отладка, профиль и тест Ваше расширение приложения
Используя XCode для отладки расширения приложения много походит на использование XCode для отладки любого другого процесса, но с одним важным различием: В Фазе выполнения Вашей дополнительной схемы Вы указываете приложение узла как исполнимую программу. После доступа к расширению через UI того указанного узла отладчик XCode присоединяет к расширению.
Схема в шаблоне расширения приложения XCode использует опцию Ask On Launch для исполнимой программы. При использовании этой опции каждый раз, когда Вы создаете и выполняете свой проект, Вам предлагают выбрать приложение узла. Если Вы хотите вместо этого указать определенный узел, чтобы использовать каждый раз, открыть редактора схемы и использовать вкладку Info для Фазы выполнения схемы расширения приложения.
Шаги для присоединения отладчика XCode к Вашему расширению приложения:
Включите схему расширения приложения путем выбора Product> Scheme>
MyExtensionName
или путем щелчка по всплывающему меню схемы на панели инструментов Xcode и выбореMyExtensionName
.Нажмите Build и Кнопку запуска, чтобы сказать XCode запускать Ваше указанное приложение узла.
Навигатор Отладки указывает, что это ожидает Вас для вызова расширения приложения.
Вызовите расширение приложения посредством приложения узла UI.
Отладчик XCode присоединяет к процессу расширения, устанавливает активные точки останова и позволяет расширению выполниться. В этой точке можно использовать те же функции отладки XCode, которые Вы используете для отладки других процессов.
В OS X необходимо выполнить пользовательский шаг включения расширения приложения, прежде чем можно будет получить доступ к нему из приложения узла для тестирования и отладки. Вы включаете большинство дополнительных типов при помощи области Extensions Установок системы. Можно также открыть область Extensions путем выбора More в Доле или Меню действий.
Для OS X Сегодня виджет, используйте Средство моделирования Виджета, чтобы протестировать и отладить его. (Нет никакого отдельного шага для Вас для выполнения в Установках системы для включения виджета.)
Для пользовательской клавиатуры в iOS используйте Настройки для включения расширения приложения (Настройки> Общий> Клавиатура> Клавиатуры).
XCode регистрирует созданное расширение приложения на время сеанса отладки на OS X. Это означает, что, если Вы хотите установить версию разработки своего расширения на OS X, необходимо использовать Средство поиска для копирования его от расположения сборки до расположения, такого как папка Applications.
Поскольку расширения приложения должны быть быстро реагирующими и эффективными, это - хорошая идея наблюдать приборы отладки в навигаторе отладки при выполнении расширения. Приборы отладки показывают, как Ваше расширение использует CPU, память и другие системные ресурсы, в то время как это работает. Если Вы видите доказательство проблем производительности, таких как необычный скачок в использовании CPU, можно использовать Инструменты, чтобы профилировать расширение и идентифицировать области для улучшения. Можно открыть Instruments, в то время как Вы находитесь в сеансе отладки путем щелчка по Profile in Instruments в любом отчете прибора отладки (для просматривания отчета прибора отладки, щелкните по прибору в области отладки). Для узнавания больше о приборах отладки посмотрите Отладку Приложение; чтобы изучить, как использовать Инструменты, см. Инструментальное Руководство пользователя.
Протестировать расширение приложения использование платформы тестирования XCode (т.е. APIs XCTest), тесты записи, осуществляющие дополнительный код с помощью содержания приложения в качестве серверной среды. Для узнавания больше о тестировании посмотрите Тестирование с XCode.
Распределите содержание приложения
Вы не можете представить расширение приложения App Store, если это не в содержании приложения, и Вы не можете передать расширение от одного приложения до другого.
Для поставки расширения приложения для iOS необходимо представить содержание приложения App Store.
Для поставки расширения приложения OS X рекомендуется представить содержание приложения App Store, но это не требуется.
Для передачи анализа приложения содержание приложения должно предоставить функциональность пользователям; это не может только содержать расширения приложения.