Today Widget: що це, види та створення віджета сповіщень

Автор: IT Sectr Опубліковано: 2026-06-15 Час читання: 10 хв

Today Widget — це розширення iOS, яке відображає інтерактивну інформацію прямо в Центрі сповіщень або на екрані «Сьогодні». Користувач бачить актуальні дані — погоду, курс валют, календар — без відкриття основного додатка. За даними Apple WWDC (2025), використання WidgetKit зросло на 40% після впровадження інтерактивних віджетів в iOS 17. Today Widget вирішує завдання швидкого доступу до інформації: погляд на екран — і користувач отримує потрібні дані без навігації по додатку.

Головне

  • Today Widget — розширення iOS для відображення інформації в Центрі сповіщень.
  • WidgetKit — сучасний фреймворк для створення віджетів (iOS 14+).
  • NCWidgetProviding — протокол для Notification Center extension (iOS 8–13).
  • Auto Layout — адаптація віджета під різні розміри екрана.
  • Timeline Provider — механізм оновлення даних у WidgetKit.

Що таке Today Widget

Today Widget (також відомий як віджет Центру сповіщень) — це елемент інтерфейсу iOS, який відображає стислу інформацію з додатка без його запуску. Користувач бачить віджет, провівши пальцем вліво на Lock Screen або на головному екрані. Віджет може показувати динамічні дані — курс валют, останні новини, статус завдань, стан пристрою.

Історично Today Widget з'явився в iOS 8 як розширення Центру сповіщень, реалізоване через фреймворк Центр сповіщень. З iOS 14 Apple представила WidgetKit — повністю перероблену архітектуру, яка дозволяє розміщувати віджети прямо на робочому столі. Today Widget у сучасному розумінні — це WidgetKit-віджет, розміщений у секції «Сьогодні» (секція віджетів зліва від першого екрана).

Навіщо потрібен Today Widget

Основна мета — скоротити час доступу до інформації. Замість відкриття додатка, навігації по меню та очікування завантаження користувач одразу бачить потрібні дані. За даними Apple (2024), додатки з віджетами показують на 27% вищу залученість користувачів. Додаткові сценарії: швидкі дії (позначити завдання виконаним), моніторинг (пульс, активність) та статус (заряд батареї, сповіщення).

WidgetKit проти NCWidgetProviding

Розробнику Today Widget доступні два підходи: сучасний WidgetKit (iOS 14+) та legacy-розширення NCWidgetProviding (iOS 8–13). Вибір залежить від мінімальної підтримуваної версії iOS. WidgetKit рекомендується для нових проєктів, NCWidgetProviding — для підтримки старих пристроїв.

ХарактеристикаWidgetKitNCWidgetProviding
Мінімальна iOSiOS 14iOS 8
РозміщенняРобочий стіл + «Сьогодні»Тільки «Сьогодні»
РозміриSmall, Medium, LargeОдин фіксований
ІнтерактивністьiOS 17+ кнопки та перемикачіТільки відкриття додатка
ОновленняTimeline ProviderwidgetPerformUpdate
МоваSwiftUIUIKit

Коли використовувати WidgetKit

Якщо ваш додаток підтримує iOS 14 і новіше — використовуйте WidgetKit. Він надає багаті можливості: кілька розмірів, конфігурацію через intent, редизайн з iOS 17 та глибокі посилання. SwiftUI-декларативність робить код віджета компактним і читабельним. Timeline Provider автоматично керує розкладом оновлень з урахуванням енергоспоживання.

Коли використовувати NCWidgetProviding

Тільки якщо потрібна підтримка iOS 9–13. NCWidgetProviding простіший у реалізації — це звичайний UIViewController з протоколом. Однак він обмежений: єдиний розмір, UIKit-only, відсутність конфігурації. Apple рекомендує переходити на WidgetKit навіть для старих проєктів, використовуючи availability check: WidgetKit на iOS 14+, NCWidgetProviding як fallback.

Типи віджетів Today Widget

У сучасній iOS виділяють три типи віджетів за функціональним призначенням. Кожен тип вирішує своє завдання та потребує різного підходу до проєктування даних та інтерфейсу. Класифікація допомагає вибрати правильну архітектуру для вашого додатка.

Інформаційні віджети

Відображають статичну або періодично оновлювану інформацію: погода, дата, курс валют, статус сервера. Дані оновлюються за розкладом через Timeline Provider. Користувач не взаємодіє з віджетом — тільки читає. Інформаційні віджети — найпростіші в реалізації, не потребують обробки touch-подій і працюють у фоновому режимі без додаткових дозволів.

Інтерактивні віджети

З iOS 17 WidgetKit підтримує кнопки, перемикачі та повзунки у віджетах. Користувач може виконати дію — позначити завдання, поставити музику на паузу, увімкнути світло — без відкриття додатка. Інтерактивні віджети використовують App Intents для передачі дії в основний додаток. Обмеження: тільки на робочому столі, не в секції «Сьогодні» до iOS 18.

Конфігуровані віджети

Користувач налаштовує дані, що відображаються, через системний інтерфейс — вибирає місто для погоди, обліковий запис для фінансів, категорію для новин. Реалізується через Intents Extension та конфігурацію в WidgetBundle. Конфігуровані віджети підвищують персоналізацію та релевантність інформації для кожного користувача.

Створення віджета WidgetKit

Розглянемо процес створення Today Widget на SwiftUI з використанням WidgetKit. Віджет відображатиме поточний курс валюти з автоматичним оновленням. WidgetKit вимагає три компоненти: структуру віджета, Provider з конфігурацією та View для відображення.

swift
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 гарантує, що віджет показує актуальні дані без постійного опитування сервера.

swift
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 та оновлення даних

Timeline Provider — центральний механізм WidgetKit для керування даними Today Widget. Замість періодичного оновлення за таймером (як у старому NCWidgetProviding), WidgetKit використовує концепцію timeline — послідовності записів з мітками часу. Система відображає поточний запис до його завершення, потім перемикається на наступний або запитує новий.

Політики оновлення

Timeline підтримує три політики: .after(date) — наступне оновлення у вказану дату; .never — віджет не оновлюється до явного виклику WidgetCenter.reloadAllTimelines; .atEnd — оновлення після відображення останнього запису. Для Today Widget з курсом валют оптимальна політика .after з інтервалом 15–30 хвилин. Енергоефективність — ключова перевага WidgetKit: система групує оновлення всіх віджетів в одному вікні.

WidgetCenter: програмне оновлення

Якщо дані змінилися до завершення timeline (наприклад, користувач оновив курс у додатку), викличте WidgetCenter.shared.reloadTimelines(ofKind: «CurrencyWidget»). Це запитає новий timeline у Provider та оновить відображення. WidgetCenter також дозволяє перезавантажити всі віджети додатка однією командою — зручно після синхронізації даних.

Рекомендації з дизайну віджетів

Apple висуває суворі вимоги до дизайну Today Widget: контент має бути читабельним на відстані, без зайвих елементів і з чіткою ієрархією. Порушення рекомендацій HIG (Human Interface Guidelines) — причина відмови при публікації в App Store. Три принципи: glanceability, consistency та hierarchy.

Glanceability — читабельність з одного погляду

Користувач витрачає на віджет менше секунди. Не додавайте більше 3–4 елементів даних. Шрифт — мінімум 11pt для міток, 17pt для значень. Використовуйте жирне накреслення (Semibold) для ключових чисел. Уникайте прокручування — Today Widget не скролиться.

Адаптація під розміри

WidgetKit підтримує три розміри: Small (170×170pt), Medium (364×170pt), Large (364×382pt). Для Today Widget у секції «Сьогодні» Medium — найчастіший вибір. Адаптивний дизайн через EnvironmentValues: змінюйте щільність інформації залежно від розміру. Small — одне число, Medium — число + графік, Large — таблиця.

Підтримка темної теми та Dynamic Type

Віджет має коректно відображатися у світлій та темній темі без додаткових дій розробника — WidgetKit автоматично підхоплює системні кольори. Dynamic Type для віджетів обмежений: розмір шрифту фіксований, але має бути читабельним. UIColor.label та UIColor.systemBackground — базові кольори для тексту та фону в обох темах.

Часті запитання

Чим Today Widget відрізняється від звичайного віджета на робочому столі?

Сьогодні це один і той же WidgetKit-віджет. Різниця тільки в розташуванні: на робочому столі та в секції «Сьогодні» (зліва від першого екрана). До iOS 14 Today Widget був окремим розширенням NCWidgetProviding, яке працювало тільки в Центрі сповіщень. Зараз це єдиний WidgetKit.

Як часто оновлюється Today Widget?

WidgetKit не оновлює віджети за таймером. Розробник задає розклад через Timeline Provider: записи з мітками часу. Система гарантує оновлення у вказаний час з урахуванням енергозбереження — може затримати на кілька хвилин. Мінімальний інтервал — 15 хвилин, але Apple рекомендує не частіше 1 разу на годину.

Чи можна зробити Today Widget з інтерактивними кнопками?

Так, починаючи з iOS 17 WidgetKit підтримує кнопки, перемикачі та повзунки через App Intents. Інтерактивні елементи працюють на робочому столі iPhone та iPad. У секції «Сьогодні» підтримка з'явилася в iOS 18. Для iOS 16 та старше — тільки відкриття додатка при натисканні на віджет.

Скільки Today Widgets може бути в одному додатку?

Обмежень немає. Додаток може зареєструвати будь-яку кількість віджетів через WidgetBundle — кожен зі своїм типом, розміром та конфігурацією. Користувач додає їх окремо. Рекомендується не більше 3–5 віджетів, щоб не перевантажувати вибір користувача.

Як тестувати Today Widget на симуляторі?

WidgetKit повністю підтримується в iOS Simulator. Запустіть схему WidgetKit target в Xcode — віджет з'явиться на робочому столі симулятора. Для перевірки Timeline Provider використовуйте WidgetKit Debug Profile: Xcode → Product → Profile → WidgetKit Debug. Реальну поведінку перевіряйте на фізичному пристрої.

Підсумки

  • Today Widget — розширення iOS для відображення інформації без відкриття додатка.
  • WidgetKit (iOS 14+) — сучасний фреймворк, NCWidgetProviding — legacy для старих версій.
  • Три типи віджетів: інформаційні, інтерактивні (iOS 17+), конфігуровані через Intents.
  • Timeline Provider керує розкладом оновлень замість таймерів.
  • Дизайн має бути glanceable: мінімум елементів, великий шрифт, адаптація під розміри.
  • Інтерактивність через App Intents — кнопки та перемикачі без відкриття додатка.
  • WidgetCenter.shared.reloadTimelines — програмне оновлення при зміні даних.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також