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

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

Разработчик

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

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

Сегодня

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

Сегодня виджет может появиться на экране блокировки устройства на iOS, если пользователь включил это. Они делают так в области «Allow Access When Locked» путем движения в Настройки> Touch ID & Passcode> Представление Уведомлений.

Поймите сегодня виджеты

На обеих платформах Сегодня должен виджет:

  • Гарантируйте, что содержание всегда выглядит актуальным

  • Соответственно реагируйте на взаимодействие с пользователем

  • Выполните хорошо (в частности виджеты iOS должны использовать память мудро, или система может завершить их),

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

Пользователи конфигурируют Сегодня виджеты по-другому в зависимости от платформы, которую они используют.

iOS. Поскольку Сегодня виджеты не позволяют запись клавиатуры, пользователи должны быть в состоянии использовать содержание приложения для конфигурирования содержания и поведения виджета. В виджете Акций, например, пользователи могут переключиться между различными представлениями значения символа, но они должны открыть приложение Акций для управления списком символов.

 OS X. Содержание приложения не могло бы выполнить функции, таким образом, Сегодня виджет, возможно, должен дать пользователям способы сконфигурировать его, в то время как это работает. Например, виджет Акций в OS X позволяет пользователям найти и добавить символы рынка, которые они хотят отследить. API Центра Уведомления в OS X включает методы, которые можно использовать, чтобы позволить пользователям сконфигурировать виджеты.

После того, как пользователи устанавливают приложение, содержащее Сегодня виджет, они могут добавить виджет к представлению Today. Когда пользователи выбирают Edit в представлении Today, Центр Уведомления показывает представление, позволяющее пользователям добавить, переупорядочить и удалить виджеты.

Используйте XCode, сегодня обрабатывают по шаблону

Шаблон Xcode Today обеспечивает заголовок по умолчанию и файлы реализации для основного класса (названный TodayViewController), Info.plist файл и интерфейсный файл (т.е. раскадровка или xib файл).

По умолчанию шаблон Today предоставляет следующий Info.plist ключи и значения (показанный здесь для цели OS X):

  • <key>NSExtension</key>
  • <dict>
  • <key>NSExtensionPointIdentifier</key>
  • <string>com.apple.widget-extension</string>
  • <key>NSExtensionPrincipalClass</key>
  • <string>TodayViewController</string>
  • </dict>

При использовании пользовательского подкласса контроллера представления используйте пользовательское имя класса для замены TodayViewController значение для NSExtensionPrincipalClass ключ.

iOS. Если Вы не хотите использовать файл раскадровки, предоставленный шаблоном, удалите NSExtensionMainStoryboard ключ и добавляет NSExtensionPrincipalClass ключ, с помощью имени контроллера представления для значения.

Большая часть работы, которую Вы выполняете для создания Сегодня виджет, включает разработку UI и реализацию подкласса контроллера представления, выполняющего пользовательскую функциональность.

Разработайте UI

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

Сегодня создаваемое использование виджета шаблона Xcode Today включает Автоматические Ограничения макета для стандартных граничных вставок. Для получения значений вставки для вычислений реализуйте widgetMarginInsetsForProposedMarginInsets: метод. (Основной контроллер представления шаблона соответствует NCWidgetProviding протокол, обеспечивающий этот метод.) Убедиться нарисовать все Ваше содержание виджета в этих стандартных граничных вставках. Для узнавания больше о разработке появления виджета посмотрите Сегодня Виджеты в Инструкциях по Интерфейсу пользователя iOS.

Если виджет имеет дополнительное содержание для отображения, можно полагаться на Автоматические Ограничения макета для регулирования высоты виджета как надлежащей. Если Вы не используете Автоматическое Расположение, можно использовать UIViewController свойство preferredContentSize запрашивать высоту на виджет. Например:

  • - (void)receivedAdditionalContent {
  • self.preferredContentSize = [self sizeNeededToShowAdditionalContent];
  • }

iOS. Если Вы хотите анимировать дисплей своего содержания для совпадения с изменять размеры анимацией, реализацией viewWillTransitionToSize:withTransitionCoordinator:, использование animateAlongsideTransition:completion: добавить Ваши анимации к coordinator параметр.

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

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

Обновление содержания

Сегодня точка расширения обеспечивает API для управления состоянием виджета и обработки обновлений к ее содержанию (можно читать об этом API в Ссылке Платформы Центра Уведомления). Несмотря на то, что существует несколько специфичных для платформы различий в Сегодня API, функциональность, поддерживаемая на обеих платформах, является главным образом тем же.

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

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

  • NCUpdateResultNewData— Новое содержание потребовало, чтобы Вы перерисовали представление

  • NCUpdateResultNoData— Виджет не требует обновления

  • NCUpdateResultFailed— Ошибка произошла во время процесса обновления

Указание, когда должен появиться виджет

Если Ваш виджет должен быть видим в представлении Today только при определенных обстоятельствах — такой как тогда, когда это имеет новое или примечательное содержание — используют setHasContent:forWidgetWithBundleIdentifier: метод от NCWidgetController класс. Этот метод позволяет Вам объявить состояние содержания виджета, поочередно запрашивающего систему показывать или скрывать виджет.

Можно вызвать setHasContent:forWidgetWithBundleIdentifier: метод от Вашего виджета или от его содержания приложения. Действительно, в то время как виджет не работает, содержание приложения может вызвать этот метод даже. Например, можно использовать уведомление нажатия содержанию приложения для инициирования вызова к этому методу. В следующий раз, когда пользователь открывает представление Today, Ваш виджет видим.

Чтобы объявить, что Ваш виджет не имеет никакого содержания и может поэтому быть скрыт, вызовите setHasContent:forWidgetWithBundleIdentifier: метод с a flag значение параметра NOfalse. Центр уведомления не запустит Ваш виджет снова, пока содержание приложения не вызовет эту передачу метода YEStrue в flag параметр, чтобы указать, что виджет имеет содержание для отображения.

Открытие содержания приложения

В некоторых случаях это может быть целесообразным для Сегодня виджет, чтобы запросить его содержание приложения открыться. Например, когда пользователи щелкают по событию, Календарный виджет в OS X открывает Calendar. (Обратите внимание на то, что в iOS, пользователю, вероятно, придется разблокировать устройство, прежде чем сможет открыться содержание приложения.), Чтобы гарантировать, что Ваше содержание приложения открывается в пути, который целесообразен в контексте текущей задачи пользователя, необходимо определить пользовательскую схему URL, которую могут использовать и приложение и его виджеты.

Виджет непосредственно не говорит его содержанию приложения открываться; вместо этого, это использует openURL:completionHandler: метод NSExtensionContext сказать системе открывать свое содержание приложения. Когда виджет использует этот метод для открытия URL, система проверяет запрос прежде, чем выполнить его.

Поддержка редактирований ( только OS X)

Для поддержки режима редактирования в виджете OS X соответствуйте NCWidgetProviding протокол. Когда Вы устанавливаете widgetAllowsEditing свойство к YEStrue, кнопка Info автоматически выведена на экран в области заголовка Вашего виджета. (Когда пользователи нажимают кнопку Info, она автоматически переключается на кнопку Done.), Когда Вы используете NCWidgetProviding когда представление входит в режим редактирования, протокол для поддержки редактирования, Редактирования, Сделанного, и Кнопки отмены, автоматически предоставлен.

Для наблюдения изменений между редактированием и нередактированием режимов в виджете используйте widgetDidBeginEditing и widgetDidEndEditing методы NCWidgetProviding протокол.

Если Вы также хотите представить модальный поисковый UI, в то время как пользователи редактируют Ваш виджет, используйте NCWidgetProvidingPresentationStyles категория на NSViewController представить Ваш поисковый контроллер представления. Когда пользователи указывают, что они сделаны, ища, используйте dismissViewControllerAnimated:completion: метод для отклонения поискового контроллера представления. (Обратите внимание на то, что можно также использовать presentViewControllerInWidget: метод для представления непоискового модального представления, для которого нужна Кнопка отмены в области заголовка.)

Тестирование сегодня виджет

iOS. Можно протестировать виджет iOS в Средстве моделирования iOS или на устройстве.

 OS X. Для тестирования виджета в OS X является самым простым использовать Средство моделирования Виджета XCode, потому что Центр Уведомления отклоняет, как только Вы переключаетесь на другое приложение или щелчок вне его границ. Можно указать Средство моделирования Виджета в схеме цели виджета.

Для приобретения знаний об отладке расширений приложения в целом посмотрите Отладку, Профиль и Тест Расширение Приложения.