WidgetKit — bu nima, vidjet freymvorki va SwiftUI

Muallif: IT Sectr Nashr etilgan: 2026-06-16 O'qish vaqti: 9 daq

WidgetKit — Apple freymvorki, iOS 14 da taqdim etilgan bo'lib, dasturchilarga iPhone va iPad-ning asosiy ekranida, Mac ish stolida va Apple Watch siferblatida dinamik vidjetlarni joylashtirish imkonini beradi. Vidjetlar ilovani ochmasdan muhim ma'lumotlarni ko'rsatadi — ob-havo prognozi, valyuta kursi, taqvim, qadamlar. Apple Developer Documentation, 2026 ma'lumotlariga ko'ra, WidgetKit Apple ekotizimida kuniga 2 milliardgacha vidjet yangilanishlarini qayta ishlaydi va bu uni tizim ekranlarida ma'lumot ko'rsatish uchun eng ko'p ishlatiladigan freymvorklardan biriga aylantiradi.

Asosiy

  • WidgetKit — iOS 14+, iPadOS 14+, macOS 11+ va watchOS 10+ da SwiftUI orqali vidjetlar yaratish uchun freymvork.
  • TimelineProvider — TimelineEntry asosida vidjet qachon va qanchalik tez-tez o'z mazmunini yangilashini belgilaydigan protokol.
  • WidgetFamily — uchta o'lcham (small, medium, large), har birini dasturchi alohida sozlashi mumkin.
  • WidgetConfiguration — vidjetga kirish nuqtasi, konfiguratsiya turini (Static, Intent, AppEntity) va o'lcham oilalarini belgilaydi.
  • Cheklovlar — vidjetlar animatsiyalanmaydi, video, klaviatura va ichki aylantirishni qo'llab-quvvatlamaydi.

WidgetKit nima va u qanday ishlaydi?

WidgetKit — Apple qurilmalarining tizim ekranlarida mazmun ko'rsatadigan vidjetlar yaratish uchun Apple freymvorki. Vidjet — foydalanuvchi „silkish“ rejimida (jiggle mode) asosiy ekranda joylashtiradigan ilovangizning miniatyura ko'rinishidir. WidgetKit dan oldin mavjud bo'lgan watchOS komplikatsiyalaridan farqli o'laroq, yangi freymvork SwiftUI orqali yagona API yordamida barcha Apple platformalari uchun vidjet yaratishni birlashtirdi.

WidgetKit ning ishlash printsipi TimelineProvider ga asoslanadi — har bir yozuv ma'lum bir vaqtda vidjetning aniq holatini (Snapshot) o'z ichiga olgan tartiblangan TimelineEntry massivini yaratadigan ob'ekt. Tizim yozuvlarni ketma-ket ko'rsatadi va vaqt chizig'idagi keyingi yozuvga o'tishda vidjetni yangilaydi. Yozuvlar orasida WidgetKit ilova kodini chaqirmaydi — protsessor vaqti faqat yangi Timeline yaratilganda sarflanadi.

WWDC 2024 Session „WidgetKit: What's new” ma'lumotlariga ko'ra, o'rtacha iOS foydalanuvchisi asosiy ekranda 8–12 ta vidjetga ega va eng mashhur kategoriyalar ob-havo, vaqt, taqvim, fitness va moliyadir. WidgetKit yangilanishlar jadval bo'yicha amalga oshirilgani va real vaqtda emasligi sababli odatdagi foydalanishda kuniga batareyaning 1% dan kamini iste'mol qiladi.

WidgetKit ni eski Today Extension dan nima farqlaydi

iOS 14 dan oldin vidjetlar faqat Today View ko'rinishida mavjud edi — birinchi ekrandan chapga surish orqali kirish mumkin bo'lgan panel. Today Extension jiddiy cheklovlarga ega edi: ular faqat „Bugun“ ekranida mavjud edi, mazmunni yangilash uchun ilovani ochishni talab qilardi va o'lchamlarni cheklangan qo'llab-quvvatlardi. WidgetKit Today Extension ni to'liq almashtirib, asosiy ekranda, blok ekranida (iOS 16+) va Mac ish stolida vidjetlarni taqdim etdi.

  • Faqat Today View da emas, balki asosiy ekranda vidjetlar
  • Ilovani ochmasdan TimelineProvider orqali mustaqil yangilanish
  • Bitta o'rniga uchta oldindan belgilangan o'lcham
  • Smart Rotate va Smart Stack — tizim tomonidan vidjetlarning avtomatik aylanishi
  • Barcha Apple platformalari uchun SwiftUI da yagona API

WidgetKit arxitekturasi: TimelineProvider va Entry

WidgetKit arxitekturasi uchta asosiy protokolga asoslanadi: TimelineProvider, TimelineEntry va Widget. TimelineEntry — ma'lum bir vaqtda vidjet holatini ifodalovchi ma'lumot modeli. TimelineProvider har biri uchun faollashtirish sanasini ko'rsatgan holda bunday yozuvlar massivini (Timeline) yaratadi. Widget — provayderni SwiftUI ko'rinishi bilan bog'laydigan kirish nuqtasi.

getTimeline metodi tizim tomonidan vidjet birinchi marta qo'shilganda va keyin davriy ravishda — odatda provayder turiga qarab har 1–6 soatda chaqiriladi. Timeline soatlar yoki kunlar oldin uchun yozuvlarni o'z ichiga olishi mumkin, bu esa vidjetga yangilanishlar orasida ilova kodini chaqirmasdan ishlash imkonini beradi. Agar vidjetni zudlik bilan yangilash kerak bo'lsa (masalan, valyuta kursi o'zgardi), ilova WidgetCenter.shared.reloadAllTimelines() ni chaqirishi mumkin.

Asosiy TimelineProvider

swift
struct SimpleEntry: TimelineEntry {
    let date: Date
    let value: Double
}

struct Provider: TimelineProvider {
    typealias Entry = SimpleEntry
    
    func placeholder(in context: Context) -> Entry {
        Entry(date: Date(), value: 0)
    }
    
    func getSnapshot(
        in context: Context,
        completion: @escaping (Entry) -> Void
    ) {
        Entry(date: Date(), value: 42.5)
    }
    
    func getTimeline(
        in context: Context,
        completion: @escaping (Timeline<Entry>, Error?) -> Void
    ) {
        let entry = Entry(date: Date(), value: fetchLatestValue())
        let nextUpdate = Calendar.current
            .date(byAdding: .hour, value: 1, to: Date())!
        let timeline = Timeline(entries: [entry], policy: .after(nextUpdate))
        completion(timeline, nil)
    }
}

Widget Family: small, medium, large

WidgetKit har biri qat'iy nisbatlarga ega bo'lgan uchta vidjet o'lchamini qo'llab-quvvatlaydi. Small (iPhone da 170×170 pt) ixcham ma'lumotni ko'rsatadi — bitta qiymat, belgi yoki qisqa matn. Medium (364×170 pt) small dan ikki barobar kengroq va bir nechta qiymat yoki mini-grafikni ko'rsatish uchun mos keladi. Large (364×382 pt) vertikal bo'yicha ekranning deyarli yarmini egallaydi va jadvallar, ro'yxatlar yoki kengaytirilgan ma'lumotlarni ko'rsatish imkonini beradi.

Dasturchi kamida ikkita o'lchamni qo'llab-quvvatlashi kerak — Apple small + medium ni tavsiya qiladi. Large vidjet faqat ilova bunday hajmni to'ldirish uchun yetarli mazmunga ega bo'lsa talab qilinadi. Har bir o'lcham o'zining SwiftUI ko'rinishini oladi, WidgetKit uni tizim ekranida renderlaydi. WidgetKit maxsus o'lchamlarni qo'llab-quvvatlamasligi muhim — faqat uchta qat'iy o'lcham, bu interfeysning bir xilligini kafolatlaydi.

WidgetConfiguration orqali o'lchamlarni sozlash

swift
struct WeatherWidget: Widget {
    let kind: String = "WeatherWidget"
    
    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider()) { entry in
            WeatherWidgetView(entry: entry)
        }
        .configurationDisplayName("Weather")
        .description("Current temperature and forecast")
        .supportedFamilies([.systemSmall, .systemMedium])
    }
}

Vidjet konfiguratsiya turlari: Static va Intent

WidgetKit ikki turdagi konfiguratsiyani taklif qiladi — StaticConfiguration va IntentConfiguration. StaticConfiguration barcha foydalanuvchilar uchun bir xil mazmunni ko'rsatadigan vidjetlar uchun mos keladi: valyuta kurslari, ob-havo, taqvim. IntentConfiguration foydalanuvchiga Siri intent tizimi orqali vidjet qo'shishda uni sozlash imkonini beradi „ masalan, ob-havo uchun ma'lum shaharni yoki aksiya kursi uchun ma'lum tickerni tanlash.

IntentConfiguration INWidgetIntent dan foydalanadi — SiriKit dan INIntent ning pastki sinfi. Foydalanuvchi vidjet qo'shib parametrlarni tanlaganda (masalan, shahar), tizim bu intentni saqlaydi va har bir yangilanishda TimelineProvider ga uzatadi. Provayder intentni getTimeline metodida oladi va mazmun yaratish uchun uning parametrlaridan foydalanadi. IntentConfiguration shaxsiylashtirilgan vidjetlar uchun afzal qilingan usuldir, chunki u Siri va Shortcuts bilan integratsiyalanadi.

Parametr tanlash bilan IntentConfiguration

swift
struct WeatherWidgetEntryView: View {
    var entry: WeatherEntry
    
    var body: some View {
        VStack(alignment: .leading) {
            Text(entry.cityName)
                .font(.caption)
                .foregroundColor(.secondary)
            Text("\(entry.temperature)°C")
                .font(.largeTitle)
        }
    }
}

struct WeatherWidget: Widget {
    var body: some WidgetConfiguration {
        IntentConfiguration(
            kind: "WeatherWidget",
            intent: WeatherConfigIntent.self,
            provider: WeatherTimelineProvider()
        ) { entry in
            WeatherWidgetEntryView(entry: entry)
        }
    }
}

SwiftUI da vidjet yaratish: bosqichma-bosqich misol

Vidjet yaratish Xcode da Widget Extension Target qo'shish bilan boshlanadi: File → New → Target → Widget Extension. Xcode avtomatik ravishda TimelineEntry, TimelineProvider va WidgetConfiguration bilan strukturani yaratadi. Dasturchiga faqat ma'lumotlarni ko'rsatish uchun SwiftUI ko'rinishini amalga oshirish va to'g'ri yangilanish jadvali uchun provayderni sozlash qoladi.

Quyida — bitcoinning joriy kursini ko'rsatish uchun oddiy vidjetning to'liq misoli: Provider URLSession orqali kursni yuklaydi va har soat yangilanadigan Timeline yaratadi. WidgetSwiftUIView kursni katta shrift bilan va oxirgi yangilanish vaqtini kichik shrift bilan ko'rsatadi.

swift
struct BTCPriceEntry: TimelineEntry {
    let date: Date
    let price: Double
    let change24h: Double
}

struct BTCWidgetEntryView: View {
    var entry: BTCPriceEntry
    
    var body: some View {
        VStack {
            Text("BTC/USD").font(.caption)
            Text("$\(entry.price, specifier: "%.0f")")
                .font(.title2).fontWeight(.bold)
            Text(entry.change24h > 0 ? "+" : "")
        }
    }
}

iOS 16+ blok ekran vidjetlari

iOS 16 dan boshlab, WidgetKit Lock Screen — iPhone blok ekranini qo'llab-quvvatlaydi. Lock Screen vidjetlari ikki xil bo'ladi: inline (soat ostida bir qator matn) va rectangular (to'rtburchak maydon). Home Screen vidjetlaridan farqli o'laroq, Lock Screen vidjetlari tez-tez yangilanadi — tizim tetigi telefonni qulfdan chiqarmasdan dolzarb ma'lumotni ko'rsatish uchun ularni har 15–30 daqiqada yangilash imkonini beradi.

Lock Screen vidjetlari WidgetConfiguration orqali accessoryFamilies bilan alohida sozlashni talab qiladi: accessoryCircular, accessoryRectangular, accessoryInline. Bu oilalar o'lcham va mazmun bo'yicha qat'iy cheklovlarga ega — ular tasvirlar, animatsiya va maxsus shriftlarni qo'llab-quvvatlamaydi. Apple Lock Screen vidjetlari uchun faqat matnli ma'lumot va tizim SF Symbols belgilaridan foydalanishni tavsiya qiladi.

  • accessoryCircular — soat ostidagi joy uchun ixcham dumaloq vidjet
  • accessoryRectangular — soat ustidagi maydon uchun to'rtburchak vidjet
  • accessoryInline — vaqt ostida bir qatorli matn, minimal o'lcham
  • Cheklovlar: faqat matn, SF Symbols, gradientlar; tasvir va video yo'q

WidgetKit uchun best practices va cheklovlar

Vidjetlarni ishlab chiqishda WidgetKit cheklovlarini hisobga olish muhim. Vidjetlar faqat o'qish uchun ko'rinishlardir: ular teginish hodisalarini qayta ishlamaydi (ilovani ochadigan teginishdan tashqari). Vidjetlar animatsiya, video, klaviatura kiritish, aylantirish yoki interaktiv elementlarni qo'llab-quvvatlamaydi. Har bir vidjet ma'lum bir vaqtda ma'lumotlarning statik suratidir va interaktivlik qo'shish urinishi App Store da ilovaning rad etilishiga olib keladi.

Eng yaxshi amaliyotlar Widget Center dan majburiy yangilash uchun foydalanish, tezkor javob uchun TimelineProvider darajasida ma'lumotlarni keshlash va boshlang'ich holat uchun placeholder dan foydalanishni o'z ichiga oladi. Shuningdek, bir nechta o'lchamlarni qo'llab-quvvatlash muhim — foydalanuvchi vidjetning ham small, ham medium variantida mavjud bo'lishini kutadi. Noto'g'ri yoki eskirgan ma'lumotlarni ko'rsatishdan qat'iy saqlaning — foydalanuvchi vidjetdan noto'g'ri ma'lumotni uzoq vaqt eslab qoladi.

WidgetKit cheklovlari jadvalda

Nima mumkin emasNima uchun
Animatsiya va videoVidjetlar statik suratlar; animatsiya batareyani zaryadsizlantiradi
InteraktivlikWidgetKit ilova havolasidan tashqari UI elementlarini qo'llab-quvvatlamaydi
AylantirishAylantirishsiz sobit o'lcham
KlaviaturaVidjetda matn kiritish mumkin emas
Jonli ma'lumotlarMa'lumotlar Timeline jadvali bo'yicha yangilanadi, real vaqtda emas
Maxsus o'lchamlarFaqat small, medium, large, accessory* sobit

Tez-tez so'raladigan savollar

iOS va macOS uchun bitta vidjet yaratish mumkinmi?

Ha, WidgetKit platformalararo. Xuddi shu Widget Extension yagona SwiftUI kodi bilan iOS, iPadOS va macOS nishonlariga kiritilishi mumkin. Farqlar faqat qo'llab-quvvatlanadigan Family larda namoyon bo'ladi — Mac da accessoryRectangular mavjud emas.

WidgetKit vidjetlarni qanchalik tez-tez yangilaydi?

Timeline jadvali bo'yicha. Dasturchi keyingi yangilanish qachon bo'lishini belgilaydi — bir daqiqa yoki bir kundan keyin. Tizim tez-tez ishlatiladigan vidjetlar uchun yangilanishlarni tezlashtirishi mumkin.

Vidjetga tugma qo'shish mumkinmi?

Yo'q, WidgetKit UIButton yoki har qanday interaktiv elementlarni qo'llab-quvvatlamaydi. Yagona harakat — ilovani deep link orqali ochadigan vidjetga tegishdir.

Ilovadan vidjetni majburiy qanday yangilash mumkin?

WidgetCenter.shared.reloadAllTimelines() yoki ma'lum vidjet uchun reloadTimelines(ofKind:) dan foydalaning. Ilovadan chaqirish darhol provayderdan yangi Timeline ni so'raydi.

Vidjetlar batareya muddatiga ta'sir qiladimi?

Minimal — odatdagi foydalanishda kuniga 1% dan kam zaryad. WidgetKit fon yangilanishlarini cheklaydi va ilovani faol ushlab turmaydi. Asosiy xarajat — birinchi qo'shishda Timeline yaratish.

Xulosa

  • WidgetKit — iOS 14+, iPadOS 14+, macOS 11+ va watchOS 10+ da SwiftUI yordamida vidjetlar yaratish uchun Apple freymvorki.
  • TimelineProvider har biri ma'lum bir vaqtda vidjet holatini ifodalovchi TimelineEntry massivi orqali yangilanish jadvalini boshqaradi.
  • Widget Family uchta o'lchamni o'z ichiga oladi — small, medium, large — va iOS 16+ blok ekrani uchun accessory oilalari.
  • StaticConfiguration barcha foydalanuvchilar uchun bir xil mazmun uchun mos keladi, IntentConfiguration — sozlamalari bilan shaxsiylashtirilgan vidjetlar uchun.
  • Vidjetlar statik — animatsiya, interaktivlik, aylantirish va video yo'q; faqat o'qish uchun ma'lumot ko'rsatish.
  • Lock Screen vidjetlari (iOS 16+) mazmun cheklovlari bilan accessoryCircular, accessoryRectangular va accessoryInline.
  • Majburiy yangilash WidgetCenter.shared.reloadAllTimelines() orqali darhol yangi Timeline so'rash imkonini beradi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing