Today Widget је iOS проширење које приказује интерактивне информације директно у Центру за обавештења или на екрану „Данас”. Корисник види актуелне податке — време, курс валута, календар — без отварања главне апликације. Према подацима Apple WWDC (2025), употреба WidgetKit-а је порасла за 40% након увођења интерактивних виџета у iOS 17. Today Widget решава проблем брзог приступа информацијама: поглед на екран — и корисник добија потребне податке без навигације кроз апликацију.
Главно
Today Widget (такође познат као виџет Центра за обавештења) — елемент iOS интерфејса који приказује сажете информације из апликације без њеног покретања. Корисник види виџет превлачењем екрана улево на закључаном екрану или на главном екрану. Виџет може приказивати динамичке податке — курс валута, најновије вести, статус задатака, стање уређаја.
Историјски, Today Widget се појавио у iOS 8 као проширење Центра за обавештења, имплементирано кроз оквир Notification Center. Са iOS 14 Apple је представио WidgetKit — потпуно редизајнирану архитектуру која омогућава постављање виџета директно на радну површину. Today Widget у савременом смислу — WidgetKit виџет постављен у секцији „Данас” (секција виџета лево од првог екрана).
Основни циљ је скраћење времена приступа информацијама. Уместо отварања апликације, навигације кроз мени и чекања учитавања, корисник одмах види потребне податке. Према Apple (2024), апликације са виџетима показују 27% већу ангажованост корисника. Додатни сценарији: брзе радње (означи задатак као завршен), праћење (пулс, активност) и статус (пуњење батерије, обавештења).
Програмер Today Widget-а има два приступа: савремени WidgetKit (iOS 14+) и застарело проширење 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, без конфигурације. Apple препоручује прелазак на WidgetKit чак и за старе пројекте, користећи availability check: WidgetKit на iOS 14+, NCWidgetProviding као fallback.
У савременом iOS-у разликују се три врсте виџета по функционалној намени. Свака врста решава свој задатак и захтева другачији приступ пројектовању података и интерфејса. Класификација помаже у избору праве архитектуре за вашу апликацију.
Приказују статичке или периодично ажуриране информације: време, датум, курс валута, статус сервера. Подаци се ажурирају према распореду кроз Timeline Provider. Корисник не интерагује са виџетом — само чита. Информациони виџети — најједноставнији за имплементацију, не захтевају обраду додирних догађаја и раде у позадини без додатних дозвола.
Од iOS 17 WidgetKit подржава дугмад, прекидаче и клизаче у виџетима. Корисник може извршити радњу — означити задатак, паузирати музику, упалити светло — без отварања апликације. Interactive Widgets користе 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. године. Саветоваћемо вас и предложити најбоље решење.