Today Widget — це розширення iOS, яке відображає інтерактивну інформацію прямо в Центрі сповіщень або на екрані «Сьогодні». Користувач бачить актуальні дані — погоду, курс валют, календар — без відкриття основного додатка. За даними Apple WWDC (2025), використання WidgetKit зросло на 40% після впровадження інтерактивних віджетів в iOS 17. Today Widget вирішує завдання швидкого доступу до інформації: погляд на екран — і користувач отримує потрібні дані без навігації по додатку.
Головне
Today Widget (також відомий як віджет Центру сповіщень) — це елемент інтерфейсу iOS, який відображає стислу інформацію з додатка без його запуску. Користувач бачить віджет, провівши пальцем вліво на Lock Screen або на головному екрані. Віджет може показувати динамічні дані — курс валют, останні новини, статус завдань, стан пристрою.
Історично Today Widget з'явився в iOS 8 як розширення Центру сповіщень, реалізоване через фреймворк Центр сповіщень. З iOS 14 Apple представила WidgetKit — повністю перероблену архітектуру, яка дозволяє розміщувати віджети прямо на робочому столі. Today Widget у сучасному розумінні — це WidgetKit-віджет, розміщений у секції «Сьогодні» (секція віджетів зліва від першого екрана).
Основна мета — скоротити час доступу до інформації. Замість відкриття додатка, навігації по меню та очікування завантаження користувач одразу бачить потрібні дані. За даними Apple (2024), додатки з віджетами показують на 27% вищу залученість користувачів. Додаткові сценарії: швидкі дії (позначити завдання виконаним), моніторинг (пульс, активність) та статус (заряд батареї, сповіщення).
Розробнику Today Widget доступні два підходи: сучасний WidgetKit (iOS 14+) та legacy-розширення NCWidgetProviding (iOS 8–13). Вибір залежить від мінімальної підтримуваної версії iOS. WidgetKit рекомендується для нових проєктів, NCWidgetProviding — для підтримки старих пристроїв.
| Характеристика | WidgetKit | NCWidgetProviding |
|---|---|---|
| Мінімальна iOS | iOS 14 | iOS 8 |
| Розміщення | Робочий стіл + «Сьогодні» | Тільки «Сьогодні» |
| Розміри | Small, Medium, Large | Один фіксований |
| Інтерактивність | iOS 17+ кнопки та перемикачі | Тільки відкриття додатка |
| Оновлення | Timeline Provider | widgetPerformUpdate |
| Мова | SwiftUI | UIKit |
Якщо ваш додаток підтримує iOS 14 і новіше — використовуйте WidgetKit. Він надає багаті можливості: кілька розмірів, конфігурацію через intent, редизайн з iOS 17 та глибокі посилання. SwiftUI-декларативність робить код віджета компактним і читабельним. Timeline Provider автоматично керує розкладом оновлень з урахуванням енергоспоживання.
Тільки якщо потрібна підтримка iOS 9–13. NCWidgetProviding простіший у реалізації — це звичайний UIViewController з протоколом. Однак він обмежений: єдиний розмір, UIKit-only, відсутність конфігурації. Apple рекомендує переходити на WidgetKit навіть для старих проєктів, використовуючи availability check: WidgetKit на iOS 14+, NCWidgetProviding як fallback.
У сучасній iOS виділяють три типи віджетів за функціональним призначенням. Кожен тип вирішує своє завдання та потребує різного підходу до проєктування даних та інтерфейсу. Класифікація допомагає вибрати правильну архітектуру для вашого додатка.
Відображають статичну або періодично оновлювану інформацію: погода, дата, курс валют, статус сервера. Дані оновлюються за розкладом через Timeline Provider. Користувач не взаємодіє з віджетом — тільки читає. Інформаційні віджети — найпростіші в реалізації, не потребують обробки touch-подій і працюють у фоновому режимі без додаткових дозволів.
З iOS 17 WidgetKit підтримує кнопки, перемикачі та повзунки у віджетах. Користувач може виконати дію — позначити завдання, поставити музику на паузу, увімкнути світло — без відкриття додатка. Інтерактивні віджети використовують App Intents для передачі дії в основний додаток. Обмеження: тільки на робочому столі, не в секції «Сьогодні» до iOS 18.
Користувач налаштовує дані, що відображаються, через системний інтерфейс — вибирає місто для погоди, обліковий запис для фінансів, категорію для новин. Реалізується через Intents Extension та конфігурацію в WidgetBundle. Конфігуровані віджети підвищують персоналізацію та релевантність інформації для кожного користувача.
Розглянемо процес створення Today Widget на SwiftUI з використанням WidgetKit. Віджет відображатиме поточний курс валюти з автоматичним оновленням. WidgetKit вимагає три компоненти: структуру віджета, Provider з конфігурацією та View для відображення.
import WidgetKit
import SwiftUI
@main
struct CurrencyWidget: Widget {
let kind: String = "CurrencyWidget"
var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: Provider()) { entry in
CurrencyWidgetEntryView(entry: entry)
}
.configurationDisplayName("Currency Rate")
.description("Current USD/RUB exchange rate")
.supportedFamilies([.systemSmall, .systemMedium])
}
}
Provider відповідає за підготовку даних для відображення. Метод getTimeline створює розклад оновлень: наступне оновлення через 15 хвилин. TimelineProvider гарантує, що віджет показує актуальні дані без постійного опитування сервера.
struct Provider: TimelineProvider {
func getSnapshot(in context: Context,
completion: @escaping (CurrencyEntry) -> Void) {
let entry = CurrencyEntry(date: Date(), rate: 92.5)
completion(entry)
}
func getTimeline(in context: Context,
completion: @escaping (Timeline<CurrencyEntry>) -> Void) {
let rate = CurrencyService().fetchRate()
let entry = CurrencyEntry(date: Date(), rate: rate)
let nextUpdate = Calendar.current.date(
byAdding: .minute, value: 15, to: Date()
) ?? Date()
let timeline = Timeline(entries: [entry], policy: .after(nextUpdate))
completion(timeline)
}
}
Timeline Provider — центральний механізм WidgetKit для керування даними Today Widget. Замість періодичного оновлення за таймером (як у старому NCWidgetProviding), WidgetKit використовує концепцію timeline — послідовності записів з мітками часу. Система відображає поточний запис до його завершення, потім перемикається на наступний або запитує новий.
Timeline підтримує три політики: .after(date) — наступне оновлення у вказану дату; .never — віджет не оновлюється до явного виклику WidgetCenter.reloadAllTimelines; .atEnd — оновлення після відображення останнього запису. Для Today Widget з курсом валют оптимальна політика .after з інтервалом 15–30 хвилин. Енергоефективність — ключова перевага WidgetKit: система групує оновлення всіх віджетів в одному вікні.
Якщо дані змінилися до завершення timeline (наприклад, користувач оновив курс у додатку), викличте WidgetCenter.shared.reloadTimelines(ofKind: «CurrencyWidget»). Це запитає новий timeline у Provider та оновить відображення. WidgetCenter також дозволяє перезавантажити всі віджети додатка однією командою — зручно після синхронізації даних.
Apple висуває суворі вимоги до дизайну Today Widget: контент має бути читабельним на відстані, без зайвих елементів і з чіткою ієрархією. Порушення рекомендацій HIG (Human Interface Guidelines) — причина відмови при публікації в App Store. Три принципи: glanceability, consistency та hierarchy.
Користувач витрачає на віджет менше секунди. Не додавайте більше 3–4 елементів даних. Шрифт — мінімум 11pt для міток, 17pt для значень. Використовуйте жирне накреслення (Semibold) для ключових чисел. Уникайте прокручування — Today Widget не скролиться.
WidgetKit підтримує три розміри: Small (170×170pt), Medium (364×170pt), Large (364×382pt). Для Today Widget у секції «Сьогодні» Medium — найчастіший вибір. Адаптивний дизайн через EnvironmentValues: змінюйте щільність інформації залежно від розміру. Small — одне число, Medium — число + графік, Large — таблиця.
Віджет має коректно відображатися у світлій та темній темі без додаткових дій розробника — WidgetKit автоматично підхоплює системні кольори. Dynamic Type для віджетів обмежений: розмір шрифту фіксований, але має бути читабельним. UIColor.label та UIColor.systemBackground — базові кольори для тексту та фону в обох темах.
Часті запитання
Сьогодні це один і той же WidgetKit-віджет. Різниця тільки в розташуванні: на робочому столі та в секції «Сьогодні» (зліва від першого екрана). До iOS 14 Today Widget був окремим розширенням NCWidgetProviding, яке працювало тільки в Центрі сповіщень. Зараз це єдиний WidgetKit.
WidgetKit не оновлює віджети за таймером. Розробник задає розклад через Timeline Provider: записи з мітками часу. Система гарантує оновлення у вказаний час з урахуванням енергозбереження — може затримати на кілька хвилин. Мінімальний інтервал — 15 хвилин, але Apple рекомендує не частіше 1 разу на годину.
Так, починаючи з iOS 17 WidgetKit підтримує кнопки, перемикачі та повзунки через App Intents. Інтерактивні елементи працюють на робочому столі iPhone та iPad. У секції «Сьогодні» підтримка з'явилася в iOS 18. Для iOS 16 та старше — тільки відкриття додатка при натисканні на віджет.
Обмежень немає. Додаток може зареєструвати будь-яку кількість віджетів через WidgetBundle — кожен зі своїм типом, розміром та конфігурацією. Користувач додає їх окремо. Рекомендується не більше 3–5 віджетів, щоб не перевантажувати вибір користувача.
WidgetKit повністю підтримується в iOS Simulator. Запустіть схему WidgetKit target в Xcode — віджет з'явиться на робочому столі симулятора. Для перевірки Timeline Provider використовуйте WidgetKit Debug Profile: Xcode → Product → Profile → WidgetKit Debug. Реальну поведінку перевіряйте на фізичному пристрої.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.