Today Widget: co to jest, rodzaje i tworzenie widżetu powiadomień

Autor: IT Sectr Opublikowano: 2026-06-15 Czas czytania: 10 min

Today Widget to rozszerzenie iOS, które wyświetla interaktywne informacje bezpośrednio w Centrum powiadomień lub na ekranie „Dzisiaj”. Użytkownik widzi aktualne dane — pogodę, kurs walut, kalendarz — bez otwierania głównej aplikacji. Według danych Apple WWDC (2025), użycie WidgetKit wzrosło o 40% po wprowadzeniu interaktywnych widżetów w iOS 17. Today Widget rozwiązuje problem szybkiego dostępu do informacji: wystarczy spojrzeć na ekran — a użytkownik otrzymuje potrzebne dane bez nawigacji po aplikacji.

Najważniejsze

  • Today Widget — rozszerzenie iOS do wyświetlania informacji w Centrum powiadomień.
  • WidgetKit — nowoczesny framework do tworzenia widżetów (iOS 14+).
  • NCWidgetProviding — protokół dla Notification Center extensions (iOS 8–13).
  • Auto Layout — adaptacja widżetu do różnych rozmiarów ekranu.
  • Timeline Provider — mechanizm aktualizacji danych w WidgetKit.

Co to jest Today Widget

Today Widget (znany również jako widżet Centrum powiadomień) to element interfejsu iOS, który wyświetla skondensowane informacje z aplikacji bez jej uruchamiania. Użytkownik widzi widżet, przesuwając ekran w lewo na ekranie blokady lub na ekranie głównym. Widżet może pokazywać dynamiczne dane — kurs walut, najnowsze wiadomości, status zadań, stan urządzenia.

Historycznie Today Widget pojawił się w iOS 8 jako rozszerzenie Centrum powiadomień, zaimplementowane przez framework Notification Center. W iOS 14 Apple wprowadziło WidgetKit — całkowicie przeprojektowaną architekturę, która pozwala umieszczać widżety bezpośrednio na pulpicie. Today Widget we współczesnym rozumieniu to widżet WidgetKit umieszczony w sekcji „Dzisiaj” (sekcja widżetów na lewo od pierwszego ekranu).

Po co jest Today Widget

Głównym celem jest skrócenie czasu dostępu do informacji. Zamiast otwierać aplikację, nawigować po menu i czekać na ładowanie, użytkownik od razu widzi potrzebne dane. Według Apple (2024), aplikacje z widżetami wykazują 27% wyższe zaangażowanie użytkowników. Dodatkowe scenariusze: szybkie akcje (oznaczenie zadania jako wykonane), monitorowanie (puls, aktywność) i status (poziom baterii, powiadomienia).

WidgetKit kontra NCWidgetProviding

Deweloper Today Widget ma do wyboru dwa podejścia: nowoczesny WidgetKit (iOS 14+) i starsze rozszerzenie NCWidgetProviding (iOS 8–13). Wybór zależy od minimalnej wspieranej wersji iOS. WidgetKit jest zalecany dla nowych projektów, NCWidgetProviding — dla wsparcia starszych urządzeń.

CechaWidgetKitNCWidgetProviding
Minimalne iOSiOS 14iOS 8
UmiejscowieniePulpit + „Dzisiaj”Tylko „Dzisiaj”
RozmiarySmall, Medium, LargeJeden stały
InteraktywnośćiOS 17+ przyciski i przełącznikiTylko otwieranie aplikacji
AktualizacjaTimeline ProviderwidgetPerformUpdate
JęzykSwiftUIUIKit

Kiedy używać WidgetKit

Jeśli Twoja aplikacja obsługuje iOS 14 i nowsze — używaj WidgetKit. Oferuje bogate możliwości: wiele rozmiarów, konfigurację przez intent, przeprojektowanie z iOS 17 i głębokie linki. Deklaratywność SwiftUI sprawia, że kod widżetu jest kompaktowy i czytelny. Timeline Provider automatycznie zarządza harmonogramem aktualizacji z uwzględnieniem zużycia energii.

Kiedy używać NCWidgetProviding

Tylko jeśli wymagane jest wsparcie iOS 9–13. NCWidgetProviding jest prostszy w implementacji — to zwykły UIViewController z protokołem. Jest jednak ograniczony: jeden rozmiar, tylko UIKit, brak konfiguracji. Apple zaleca przejście na WidgetKit nawet dla starych projektów, używając availability check: WidgetKit na iOS 14+, NCWidgetProviding jako fallback.

Rodzaje widżetów Today Widget

We współczesnym iOS wyróżnia się trzy typy widżetów według przeznaczenia funkcjonalnego. Każdy typ rozwiązuje swoje zadanie i wymaga innego podejścia do projektowania danych i interfejsu. Klasyfikacja pomaga wybrać odpowiednią architekturę dla Twojej aplikacji.

Widżety informacyjne

Wyświetlają statyczne lub okresowo aktualizowane informacje: pogodę, datę, kurs walut, status serwera. Dane są aktualizowane zgodnie z harmonogramem przez Timeline Provider. Użytkownik nie wchodzi w interakcję z widżetem — tylko czyta. Widżety informacyjne są najprostsze w implementacji, nie wymagają obsługi zdarzeń dotykowych i działają w tle bez dodatkowych uprawnień.

Widżety interaktywne

Od iOS 17 WidgetKit obsługuje przyciski, przełączniki i suwaki w widżetach. Użytkownik może wykonać akcję — oznaczyć zadanie, wstrzymać muzykę, włączyć światło — bez otwierania aplikacji. Interactive Widgets używają App Intents do przekazywania akcji do głównej aplikacji. Ograniczenie: tylko na pulpicie, nie w sekcji „Dzisiaj” do iOS 18.

Widżety konfigurowalne

Użytkownik dostosowuje wyświetlane dane przez interfejs systemowy — wybiera miasto dla pogody, konto dla finansów, kategorię dla wiadomości. Implementowane przez Intents Extension i konfigurację w WidgetBundle. Widżety konfigurowalne zwiększają personalizację i trafność informacji dla każdego użytkownika.

Tworzenie widżetu WidgetKit

Rozważmy proces tworzenia Today Widget w SwiftUI z użyciem WidgetKit. Widżet będzie wyświetlał aktualny kurs waluty z automatyczną aktualizacją. WidgetKit wymaga trzech komponentów: struktury widżetu, Providera z konfiguracją i widoku do wyświetlania.

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 odpowiada za przygotowanie danych do wyświetlenia. Metoda getTimeline tworzy harmonogram aktualizacji: następna aktualizacja za 15 minut. TimelineProvider gwarantuje, że widżet pokazuje aktualne dane bez ciągłego odpytywania serwera.

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 i aktualizacja danych

Timeline Provider to centralny mechanizm WidgetKit do zarządzania danymi Today Widget. Zamiast okresowej aktualizacji za pomocą timera (jak w starym NCWidgetProviding), WidgetKit używa koncepcji timeline — sekwencji wpisów z znacznikami czasu. System wyświetla bieżący wpis do jego wygaśnięcia, następnie przełącza się na następny lub żąda nowego.

Polityki aktualizacji

Timeline obsługuje trzy polityki: .after(date) — następna aktualizacja w określonej dacie; .never — widżet nie jest aktualizowany do jawnego wywołania WidgetCenter.reloadAllTimelines; .atEnd — aktualizacja po wyświetleniu ostatniego wpisu. Dla Today Widget z kursem walut optymalna jest polityka .after z interwałem 15–30 minut. Efektywność energetyczna — kluczowa zaleta WidgetKit: system grupuje aktualizacje wszystkich widżetów w jednym oknie.

WidgetCenter: programowa aktualizacja

Jeśli dane zmieniły się przed wygaśnięciem timeline (np. użytkownik zaktualizował kurs w aplikacji), wywołaj WidgetCenter.shared.reloadTimelines(ofKind: "CurrencyWidget"). Spowoduje to żądanie nowego timeline od Providera i zaktualizuje wyświetlanie. WidgetCenter pozwala również przeładować wszystkie widżety aplikacji jedną komendą — wygodne po synchronizacji danych.

Zalecenia projektowe dla widżetów

Apple stawia surowe wymagania dotyczące projektu Today Widget: treść musi być czytelna z dystansu, bez zbędnych elementów i z wyraźną hierarchią. Naruszenie zaleceń HIG (Human Interface Guidelines) to powód odrzucenia przy publikacji w App Store. Trzy zasady: glanceability, consistency i hierarchy.

Glanceability — czytelność na pierwszy rzut oka

Użytkownik spędza na widżecie mniej niż sekundę. Nie dodawaj więcej niż 3–4 elementów danych. Czcionka — minimum 11pt dla etykiet, 17pt dla wartości. Używaj pogrubienia (Semibold) dla kluczowych liczb. Unikaj przewijania — Today Widget nie przewija się.

Adaptacja do rozmiarów

WidgetKit obsługuje trzy rozmiary: Small (170×170pt), Medium (364×170pt), Large (364×382pt). Dla Today Widget w sekcji „Dzisiaj” Medium to najczęstszy wybór. Projekt adaptacyjny przez EnvironmentValues: zmieniaj gęstość informacji w zależności od rozmiaru. Small — jedna liczba, Medium — liczba + wykres, Large — tabela.

Obsługa ciemnego motywu i Dynamic Type

Widżet musi poprawnie wyświetlać się w jasnym i ciemnym motywie bez dodatkowych działań dewelopera — WidgetKit automatycznie przejmuje systemowe kolory. Dynamic Type dla widżetów jest ograniczony: rozmiar czcionki jest stały, ale musi być czytelny. UIColor.label i UIColor.systemBackground — podstawowe kolory dla tekstu i tła w obu motywach.

Często zadawane pytania

Czym Today Widget różni się od zwykłego widżetu na pulpicie?

Obecnie to ten sam widżet WidgetKit. Różnica polega tylko na lokalizacji: na pulpicie i w sekcji „Dzisiaj” (na lewo od pierwszego ekranu). Do iOS 14 Today Widget był osobnym rozszerzeniem NCWidgetProviding, które działało tylko w Centrum powiadomień. Teraz to jeden WidgetKit.

Jak często aktualizuje się Today Widget?

WidgetKit nie aktualizuje widżetów za pomocą timera. Deweloper ustawia harmonogram przez Timeline Provider: wpisy z znacznikami czasu. System gwarantuje aktualizację w określonym czasie z uwzględnieniem oszczędzania energii — może opóźnić o kilka minut. Minimalny interwał — 15 minut, ale Apple zaleca nie częściej niż 1 raz na godzinę.

Czy można zrobić Today Widget z interaktywnymi przyciskami?

Tak, począwszy od iOS 17 WidgetKit obsługuje przyciski, przełączniki i suwaki przez App Intents. Elementy interaktywne działają na pulpicie iPhone i iPad. W sekcji „Dzisiaj” wsparcie pojawiło się w iOS 18. Dla iOS 16 i starszych — tylko otwieranie aplikacji po kliknięciu na widżet.

Ile Today Widgets może być w jednej aplikacji?

Nie ma ograniczeń. Aplikacja może zarejestrować dowolną liczbę widżetów przez WidgetBundle — każdy z własnym typem, rozmiarem i konfiguracją. Użytkownik dodaje je osobno. Zaleca się nie więcej niż 3–5 widżetów, aby nie przeciążać wyboru użytkownika.

Jak testować Today Widget na symulatorze?

WidgetKit jest w pełni obsługiwany w iOS Simulator. Uruchom schemat targetu WidgetKit w Xcode — widżet pojawi się na pulpicie symulatora. Do sprawdzenia Timeline Provider użyj WidgetKit Debug Profile: Xcode → Product → Profile → WidgetKit Debug. Rzeczywiste zachowanie sprawdzaj na fizycznym urządzeniu.

Podsumowanie

  • Today Widget — rozszerzenie iOS do wyświetlania informacji bez otwierania aplikacji.
  • WidgetKit (iOS 14+) — nowoczesny framework, NCWidgetProviding — legacy dla starszych wersji.
  • Trzy typy widżetów: informacyjne, interaktywne (iOS 17+), konfigurowalne przez Intents.
  • Timeline Provider zarządza harmonogramem aktualizacji zamiast timerów.
  • Projekt powinien być glanceable: minimum elementów, duża czcionka, adaptacja do rozmiarów.
  • Interaktywność przez App Intents — przyciski i przełączniki bez otwierania aplikacji.
  • WidgetCenter.shared.reloadTimelines — programowa aktualizacja przy zmianie danych.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również