Итоги сессии WWDC 2020 Swift

Примечание. Эта статья представляет собой краткое текстовое резюме сеанса WWDC20.

WidgetKit - это новый фреймворк Swift, представленный в WWDC20, который позволяет вам выводить самые важные данные из вашего приложения на домашний экран!

Дизайн

При разработке виджетов в iOS необходимо учитывать три вещи: удобство просмотра, актуальность и персонализацию.

  • Легкость взгляда - данные должны быть представлены содержательно.
  • Актуальность - iOS14 автоматически показывает соответствующие виджеты в зависимости от модели использования. У вас есть некоторый уровень контроля, помогающий iOS понять, как часто пользователи хотели бы видеть ваш виджет, особенно когда несколько виджетов находятся в одном интеллектуальном стеке.
  • Персонализация - размер отображаемых данных можно изменять и персонализировать в зависимости от предпочтений пользователя (например, виджет погоды может отображать погоду для географического местоположения пользователя или виджет календаря может отображать события на основе текущей даты и времени).

Представление

Виджеты размещаются на главном экране, поэтому они должны загружаться быстро. Следовательно, виджеты - это не мини-приложения, а просто представления, которые заранее предоставляются расширением приложения на определенное время. Это делается с помощью расширений WidgetKit (расширений фона Swift), возвращая набор представлений на временной шкале и отправляя их в виджет на главном экране, который представит соответствующее представление на основе текущего времени.

Временную шкалу можно обновить из основного приложения. Временная шкала - это комбинация представлений и дат, которые обозначают, в какое время должно быть показано конкретное представление. Как правило, из расширения необходимо возвращать контент за несколько дней, который затем сериализуется на диск, и одно из представлений отображается на основе текущего времени. Однако для виджетов, в которых должна быть возвращена актуальная информация, используются перезагрузки. Система активирует расширение и запрашивает временную шкалу для каждого виджета, размещенного на устройстве. ReloadPolicy может быть определено вашим приложением, чтобы система знала, когда запрашивать следующую временную шкалу. Параметры конфигурации включают atEnd существующей временной шкалы, after(date: Date) и never.

Содержимое виджета также может обновляться при получении фонового уведомления или когда пользователь вносит изменения в приложение. В случае фоновых уведомлений или изменений, вносимых пользователем в ваше приложение, вы можете использовать API WidgetKit на основе Swift через WidgetCenter, чтобы перезагрузить временную шкалу, тем самым разбудив расширение. Однако виджеты не предназначены для обновления каждую секунду, даже если вы настроите политику перезагрузки таким образом, iOS будет ограничивать обновления в зависимости от взаимодействия пользователя с виджетом.

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

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

Виджеты полностью построены на SwiftUI. Хотя SwiftUI поддерживается с iOS 13, виджеты поддерживаются с iOS 14.

Умные стопки, отображаемые на главном экране, представляют собой просто стопку виджетов. Виджет, который появляется сверху, определяется интеллектом устройства, но может управляться с помощью пожертвования ярлыков Siri и API WidgetKit (чтобы помочь системе решить, какой виджет будет релевантным).

Определение виджета

  • kind - одно расширение для поддержки нескольких типов виджетов путем определения их конфигурации.
  • конфигурация - Типы намерений
  • supportedFamilies - размер виджета
  • заполнитель - содержимое по умолчанию

вид: StaticConfiguration, IntentConfiguration

Поддерживаемые семейства: systemSmall, systemMedium, systemLarge.

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

Весь виджет можно связать с URL-ссылкой с помощью API widgetURL. В то время как systemSmall можно связать только с одной ссылкой, дополнительные ссылки могут быть добавлены к systemMedium и systemLarge с помощью нового API ссылок в SwiftUI.

Последние мысли

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

Готовы создать свой первый виджет? Я написал еще одну статью о создании вашего первого виджета с WidgetKit с нуля до рабочего прототипа, щелкните ссылку, чтобы проверить это!