Открыть сервис

Today Extension

Today Extension (также известный как «Today» или «Виджет сегодня») — это компонент операционной системы Apple iOS, представленный в 2014 году с выходом iOS 8. Он представляет собой динамическую область на экране «Сегодня» в Центре уведомлений, предназначенную для отображения краткой, актуальной информации от установленных приложений без необходимости их запуска. Today Extension является одной из разновидностей расширений (extensions) iOS, позволяющих приложениям предоставлять свои данные в стандартном интерфейсе системы.

История

Предпосылки появления

До выхода iOS 8 Центр уведомлений в iOS выполнял в основном функцию агрегатора уведомлений от приложений и системных событий. Сторонние разработчики не имели возможности размещать в нём собственные виджеты. В iOS 7 Apple впервые добавила вкладку «Сегодня», которая отображала сводку погоды, календарь, напоминания и информацию о пробках, но эти данные были исключительно системными.

Выход iOS 8 (2014)

На конференции WWDC 2014 Apple анонсировала iOS 8, ключевым нововведением которой стала система расширений (Extensions). Одним из типов расширений стал Today Extension, позволяющий разработчикам создавать виджеты для экрана «Сегодня». Это стало ответом на растущую популярность виджетов в Android и на запрос пользователей на более гибкую настройку интерфейса. Первоначально виджеты были доступны только в Центре уведомлений, который открывался свайпом вниз от верхнего края экрана.

Развитие в iOS 10 (2016)

В iOS 10 Apple значительно переработала Центр уведомлений. Экран «Сегодня» был выделен в отдельную вкладку, доступную как с экрана блокировки, так и с главного экрана. Виджеты получили возможность обновлять содержимое в фоновом режиме с помощью механизма Background App Refresh. Также была добавлена поддержка виджетов для сторонних приложений на экране блокировки (через 3D Touch или долгое нажатие).

iOS 14 и виджеты на главном экране (2020)

С выходом iOS 14 Apple представила новую систему виджетов, которые можно размещать непосредственно на главном экране. Однако Today Extension не был упразднён — он продолжил существовать в Центре уведомлений как отдельная сущность. Виджеты на главном экране (WidgetKit) и Today Extension имеют схожую архитектуру, но различаются по возможностям: виджеты на главном экране могут быть разных размеров (маленький, средний, большой) и поддерживают интерактивность только в iOS 17, тогда как Today Extension традиционно поддерживает кликабельность.

Современное состояние (iOS 17 и новее)

Начиная с iOS 17, Apple продолжает поддерживать Today Extension, но акцент смещается в сторону WidgetKit. Тем не менее, многие приложения по-прежнему используют Today Extension для отображения информации в Центре уведомлений, особенно для тех функций, которые не требуют постоянного присутствия на главном экране (например, быстрые заметки, статус задач, курсы валют).

Архитектура и устройство

Компоненты

Today Extension реализуется как отдельный таргет (target) в проекте Xcode. Он включает:

  • Storyboard или XIB-файл — интерфейс виджета, который может содержать метки, кнопки, изображения и другие элементы UIKit.
  • Класс TodayViewController — наследник UIViewController, который управляет логикой отображения и обновления данных.
  • Права доступа (App Groups) — для обмена данными между основным приложением и расширением используется механизм App Groups, позволяющий хранить общие файлы, UserDefaults или Core Data.

Жизненный цикл

  1. Загрузка — система вызывает метод viewDidLoad при первом появлении виджета.
  2. Обновление — метод widgetPerformUpdate(completionHandler:) вызывается системой для обновления контента. Разработчик должен выполнить асинхронную загрузку данных и вызвать completion handler с одним из статусов: .noData, .newData или .failed.
  3. Отображение — виджет отображается в компактном режиме (обычно высота до 200–300 точек) с возможностью разворачивания.
  4. Выгрузка — при скрытии экрана «Сегодня» виджет может быть выгружен из памяти.

Ограничения

  • Размер — виджет имеет фиксированную ширину (равную ширине экрана) и ограниченную высоту (до 200–300 точек в свёрнутом состоянии, до 500–600 в развёрнутом).
  • Производительность — виджет должен загружаться быстро (не более 1–2 секунд), иначе система может отобразить заглушку или удалить виджет.
  • Фоновое обновление — частота обновления ограничена: система сама решает, когда вызывать widgetPerformUpdate, исходя из активности пользователя и политики энергосбережения.
  • Отсутствие анимации — до iOS 17 виджеты не поддерживали анимацию; в iOS 17 появилась ограниченная поддержка анимации через TimelineProvider.

Классификация

По типу данных

  • Информационные виджеты — отображают статическую или динамическую информацию (погода, курс валют, календарь, заметки).
  • Управляющие виджеты — позволяют выполнять действия без открытия приложения (включение/выключение режима, запуск таймера, добавление задачи).
  • Гибридные виджеты — сочетают информацию и элементы управления (например, виджет плеера с кнопками воспроизведения).

По способу обновления

  • Pull-виджеты — обновляются только при вызове системой widgetPerformUpdate.
  • Push-виджеты — используют механизм фонового обновления (Background App Refresh) для получения данных от сервера.
  • Real-time виджеты — обновляются в реальном времени через WebSocket или Push-уведомления (требуют дополнительной настройки).

Применение

Примеры популярных виджетов

  • Погода — отображение текущей температуры, влажности, прогноза на день.
  • Календарьсписок ближайших событий и напоминаний.
  • Заметки — быстрый доступ к последним заметкам или списку дел.
  • Курсы валют — актуальные курсы валют от банков или бирж.
  • Трекеры задач — отображение текущих задач из приложений вроде Todoist или Things.
  • Медиаплееры — управление воспроизведением музыки или подкастов (например, Spotify, Apple Music).
  • Системные утилиты — виджеты для отображения заряда батареи, уровня сигнала, использования памяти.

Отраслевые применения

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

Критика и ограничения

Недостатки

  • Ограниченная функциональность — по сравнению с виджетами на главном экране (WidgetKit), Today Extension имеет меньше возможностей по настройке размера, анимации и интерактивности.
  • Зависимость от основного приложения — для работы расширения необходимо, чтобы основное приложение было установлено и хотя бы раз запущено.
  • Проблемы с производительностью — медленные виджеты могут негативно влиять на общую отзывчивость Центра уведомлений.
  • Отсутствие поддержки на iPad — на iPad виджеты Today Extension работают, но не имеют отдельного режима для Split View или Slide Over.

Конкуренция с WidgetKit

С выходом iOS 14 Apple начала активно продвигать WidgetKit, который позволяет размещать виджеты на главном экране. Это привело к снижению популярности Today Extension, так как виджеты на главном экране более заметны и удобны. Однако Today Extension остаётся востребованным для сценариев, где виджет должен быть доступен только при открытии Центра уведомлений (например, для конфиденциальных данных, которые не должны отображаться на главном экране).

Интересные факты

  • Первые сторонние виджеты — после выхода iOS 8 одним из первых популярных виджетов стал виджет для приложения Evernote, позволяющий быстро создавать заметки.
  • Ограничение на количество — пользователь может добавить до 10 виджетов на экран «Сегодня», но это ограничение не жёсткое и зависит от версии iOS.
  • Безопасность — Today Extension работает в изолированном контейнере (sandbox) и не имеет доступа к данным других приложений без явного разрешения через App Groups.
  • Интеграция с Siri — в iOS 10 виджеты могли отображать результаты поиска Siri, но эта функция была удалена в более поздних версиях.

Источники

  • Apple Inc. «App Extension Programming Guide» (2014–2023).
  • Apple Inc. «WidgetKit Documentation» (2020–2023).
  • WWDC 2014: «What’s New in iOS 8» — сессия 201.
  • WWDC 2016: «What’s New in iOS 10» — сессия 201.
  • WWDC 2020: «Widgets Code-Along» — сессия 10034.
  • Статья «Today Extension vs WidgetKit: что выбрать?» — журнал «Хакер», 2021.
  • Документация Apple Developer: «Today» (developer.apple.com).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →