WidgetKit — यह क्या है, विजेट फ्रेमवर्क और SwiftUI

लेखक: IT Sectr प्रकाशित: 2026-06-16 पढ़ने का समय: 9 मिनट

WidgetKit एक Apple फ्रेमवर्क है जिसे iOS 14 में पेश किया गया था, जो डेवलपर्स को iPhone और iPad की होम स्क्रीन, Mac डेस्कटॉप और Apple Watch फेस पर डायनामिक विजेट रखने की अनुमति देता है। विजेट ऐप खोले बिना मुख्य जानकारी प्रदर्शित करते हैं — मौसम का पूर्वानुमान, मुद्रा दर, कैलेंडर, कदम। Apple Developer Documentation, 2026 के अनुसार, WidgetKit Apple पारिस्थितिकी तंत्र में प्रतिदिन 2 बिलियन तक विजेट अपडेट प्रोसेस करता है, जो इसे सिस्टम स्क्रीन पर जानकारी प्रदर्शित करने के लिए सबसे अधिक उपयोग किए जाने वाले फ्रेमवर्क में से एक बनाता है।

मुख्य बातें

  • WidgetKit iOS 14+, iPadOS 14+, macOS 11+ और watchOS 10+ पर SwiftUI के माध्यम से रेंडरिंग के साथ विजेट बनाने के लिए एक फ्रेमवर्क है।
  • TimelineProvider एक प्रोटोकॉल है जो यह निर्धारित करता है कि विजेट TimelineEntry के आधार पर कब और कितनी बार अपनी सामग्री अपडेट करता है।
  • WidgetFamily — तीन आकार (small, medium, large), जिनमें से प्रत्येक को डेवलपर अलग से कॉन्फ़िगर कर सकता है।
  • WidgetConfiguration विजेट का प्रवेश बिंदु है, जो कॉन्फ़िगरेशन प्रकार (Static, Intent, AppEntity) और आकार परिवारों को परिभाषित करता है।
  • सीमाएं — विजेट एनिमेटेड नहीं हैं, वीडियो, कीबोर्ड या अपने भीतर स्क्रॉलिंग का समर्थन नहीं करते हैं।

WidgetKit क्या है और यह कैसे काम करता है?

WidgetKit Apple उपकरणों की सिस्टम स्क्रीन पर सामग्री प्रदर्शित करने वाले विजेट बनाने के लिए एक Apple फ्रेमवर्क है। विजेट आपके ऐप का एक लघु प्रतिनिधित्व है जिसे उपयोगकर्ता जिगल मोड में होम स्क्रीन पर रखता है। WidgetKit से पहले मौजूद watchOS कॉम्प्लिकेशन के विपरीत, नए फ्रेमवर्क ने एकल SwiftUI API के माध्यम से सभी Apple प्लेटफार्मों के लिए विजेट निर्माण को एकीकृत किया।

WidgetKit का संचालन सिद्धांत TimelineProvider पर आधारित है — एक ऑब्जेक्ट जो TimelineEntry की एक क्रमबद्ध सरणी बनाता है, जहां प्रत्येक प्रविष्टि में एक Snapshot (एक निश्चित समय पर विजेट की विशिष्ट स्थिति) होती है। सिस्टम प्रविष्टियों को क्रमिक रूप से प्रदर्शित करता है, टाइमलाइन पर अगली प्रविष्टि पर जाने पर विजेट अपडेट करता है। प्रविष्टियों के बीच, WidgetKit ऐप कोड को कॉल नहीं करता है — CPU समय केवल नया Timeline बनाते समय खर्च होता है।

WWDC 2024 सत्र “WidgetKit: What’s new” के अनुसार, औसत iOS उपयोगकर्ता की होम स्क्रीन पर 8–12 विजेट होते हैं, और सबसे लोकप्रिय श्रेणियां मौसम, समय, कैलेंडर, फिटनेस और वित्त हैं। WidgetKit सामान्य उपयोग में प्रति दिन 1% से कम बैटरी चार्ज की खपत करता है, इसका श्रेण वास्तविक समय अपडेट के बजाय शेड्यूल किए गए अपडेट को जाता है।

WidgetKit को पुराने Today Extensions से क्या अलग करता है

iOS 14 से पहले, विजेट केवल Today View के रूप में मौजूद थे — एक पैनल जो पहली स्क्रीन से बाईं ओर स्वाइप करके एक्सेस किया जाता था। Today Extensions में गंभीर सीमाएं थीं: वे केवल “Today” स्क्रीन पर उपलब्ध थे, सामग्री अपडेट करने के लिए ऐप खोलने की आवश्यकता थी, और आकार समर्थन सीमित था। WidgetKit ने Today Extensions को पूरी तरह से बदल दिया, होम स्क्रीन, लॉक स्क्रीन (iOS 16+) और Mac डेस्कटॉप पर विजेट प्रदान किए।

  • होम स्क्रीन पर विजेट, न कि केवल Today View में
  • TimelineProvider के माध्यम से स्वायत्त अपडेट, ऐप खोले बिना
  • एक के बजाय तीन पूर्वनिर्धारित आकार
  • Smart Rotate और Smart Stack — सिस्टम द्वारा स्वचालित विजेट रोटेशन
  • सभी Apple प्लेटफार्मों के लिए एकीकृत SwiftUI API

WidgetKit आर्किटेक्चर: TimelineProvider और Entry

WidgetKit आर्किटेक्चर तीन मुख्य प्रोटोकॉल पर बनाया गया है: TimelineProvider, TimelineEntry, और Widget। TimelineEntry एक डेटा मॉडल है जो किसी विशिष्ट समय पर विजेट की स्थिति का प्रतिनिधित्व करता है। TimelineProvider ऐसी प्रविष्टियों की एक सरणी (Timeline) बनाता है, प्रत्येक के लिए सक्रियण तिथि निर्दिष्ट करता है। Widget प्रवेश बिंदु है जो प्रदाता को SwiftUI व्यू से जोड़ता है।

Timeline विधि getTimeline को सिस्टम द्वारा पहली बार विजेट जोड़े जाने पर और फिर समय-समय पर — आमतौर पर प्रदाता प्रकार के आधार पर हर 1–6 घंटे में कॉल किया जाता है। एक Timeline में घंटों या दिनों आगे की प्रविष्टियां हो सकती हैं, जिससे विजेट अपडेट के बीच ऐप कोड को कॉल किए बिना काम कर सकता है। यदि तत्काल विजेट अपडेट की आवश्यकता है (जैसे, मुद्रा दर बदल गई), तो ऐप जबरन WidgetCenter.shared.reloadAllTimelines() कॉल कर सकता है।

मूल 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 तीन विजेट आकारों का समर्थन करता है, प्रत्येक निश्चित अनुपात के साथ। Small (iPhone पर 170×170 pt) कॉम्पैक्ट जानकारी प्रदर्शित करता है — एक मान, आइकन या छोटा टेक्स्ट। Medium (364×170 pt) small से दोगुना चौड़ा है और मानों के जोड़े या मिनी-चार्ट प्रदर्शित करने के लिए उपयुक्त है। Large (364×382 pt) लंबवत रूप से लगभग आधी स्क्रीन लेता है और तालिकाओं, सूचियों या विस्तृत डेटा को प्रदर्शित करने की अनुमति देता है।

डेवलपर को कम से कम दो आकारों का समर्थन करना चाहिए — Apple small + medium की अनुशंसा करता है। Large विजेट केवल तभी आवश्यक है जब ऐप में उस मात्रा को भरने के लिए पर्याप्त सामग्री हो। प्रत्येक आकार को अपना स्वयं का SwiftUI View मिलता है, जिसे WidgetKit सिस्टम स्क्रीन पर रेंडर करता है। महत्वपूर्ण बात यह है कि WidgetKit कस्टम आकारों का समर्थन नहीं करता है — केवल तीन निश्चित आकार, जो इंटरफ़ेस एकरूपता सुनिश्चित करते हैं।

WidgetConfiguration के माध्यम से आकार कॉन्फ़िगरेशन

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])
    }
}

विजेट कॉन्फ़िगरेशन प्रकार: Static और Intent

WidgetKit दो कॉन्फ़िगरेशन प्रकार प्रदान करता है — StaticConfiguration और IntentConfiguration। StaticConfiguration उन विजेट्स के लिए उपयुक्त है जो सभी उपयोगकर्ताओं के लिए समान सामग्री प्रदर्शित करते हैं: मुद्रा दरें, मौसम, कैलेंडर। IntentConfiguration उपयोगकर्ता को Siri इंटेंट सिस्टम के माध्यम से विजेट जोड़ते समय इसे कस्टमाइज़ करने की अनुमति देता है — उदाहरण के लिए, मौसम के लिए कोई विशिष्ट शहर या स्टॉक मूल्य के लिए कोई विशिष्ट टिकर चुनना।

IntentConfiguration INWidgetIntent का उपयोग करता है — SiriKit से INIntent का एक उपवर्ग। जब उपयोगकर्ता विजेट जोड़ता है और पैरामीटर चुनता है (जैसे, शहर), तो सिस्टम इस इंटेंट को सहेजता है और प्रत्येक अपडेट पर इसे TimelineProvider को भेजता है। प्रदाता getTimeline विधि में इंटेंट प्राप्त करता है और सामग्री बनाने के लिए इसके पैरामीटर का उपयोग करता है। IntentConfiguration व्यक्तिगत विजेट्स के लिए पसंदीदा तरीका है क्योंकि यह Siri और Shortcuts के साथ एकीकृत होता है।

पैरामीटर चयन के साथ 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 में विजेट बनाना: चरण-दर-चरण उदाहरण

विजेट बनाना Xcode में Widget Extension Target जोड़ने से शुरू होता है: File → New → Target → Widget Extension। Xcode स्वचालित रूप से TimelineEntry, TimelineProvider और WidgetConfiguration के साथ एक संरचना उत्पन्न करता है। डेवलपर को केवल डेटा प्रदर्शित करने के लिए SwiftUI View लागू करना और सही अपडेट शेड्यूल के लिए प्रदाता को कॉन्फ़िगर करना होता है।

नीचे वर्तमान Bitcoin मूल्य प्रदर्शित करने वाले एक सरल विजेट का पूर्ण उदाहरण है: Provider URLSession के माध्यम से दर लोड करता है और प्रति घंटा अपडेट के साथ एक Timeline बनाता है। WidgetSwiftUIView दर को बड़े फ़ॉन्ट में और अंतिम अपडेट समय को छोटे फ़ॉन्ट में प्रदर्शित करता है।

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+ लॉक स्क्रीन विजेट

iOS 16 के साथ, WidgetKit ने लॉक स्क्रीन — iPhone लॉक स्क्रीन के लिए समर्थन बढ़ाया। लॉक स्क्रीन विजेट दो प्रकार के होते हैं: inline (घड़ी के नीचे टेक्स्ट की एक पंक्ति) और rectangular (एक आयताकार क्षेत्र)। होम स्क्रीन विजेट के विपरीत, लॉक स्क्रीन विजेट अधिक बार अपडेट होते हैं — सिस्टम ट्रिगर फोन अनलॉक किए बिना वर्तमान जानकारी प्रदर्शित करने के लिए हर 15–30 मिनट में अपडेट की अनुमति देता है।

लॉक स्क्रीन विजेट को accessoryFamilies के साथ WidgetConfiguration के माध्यम से अलग कॉन्फ़िगरेशन की आवश्यकता होती है: accessoryCircular, accessoryRectangular, accessoryInline। इन परिवारों में सख्त आकार और सामग्री सीमाएं हैं — वे चित्र, एनीमेशन या कस्टम फ़ॉन्ट का समर्थन नहीं करते हैं। Apple लॉक स्क्रीन विजेट के लिए केवल टेक्स्ट जानकारी और SF Symbols सिस्टम आइकन का उपयोग करने की अनुशंसा करता है।

  • accessoryCircular — घड़ी के नीचे क्षेत्र के लिए कॉम्पैक्ट गोलाकार विजेट
  • accessoryRectangular — घड़ी के ऊपर क्षेत्र के लिए आयताकार विजेट
  • accessoryInline — समय के नीचे एक-पंक्ति टेक्स्ट, न्यूनतम आकार
  • सीमाएं: केवल टेक्स्ट, SF Symbols, ग्रेडिएंट; कोई चित्र या वीडियो नहीं

WidgetKit सर्वोत्तम अभ्यास और सीमाएं

विजेट विकसित करते समय, WidgetKit की सीमाओं पर विचार करना महत्वपूर्ण है। विजेट केवल-पढ़ने के लिए व्यू हैं: वे टच इवेंट को हैंडल नहीं करते हैं (उस टैप को छोड़कर जो ऐप खोलता है)। विजेट एनीमेशन, वीडियो, कीबोर्ड इनपुट, स्क्रॉलिंग या इंटरैक्टिव तत्वों का समर्थन नहीं करते हैं। प्रत्येक विजेट एक निश्चित समय पर डेटा का एक स्थिर स्नैपशॉट है, और इंटरैक्टिविटी जोड़ने का प्रयास App Store से ऐप अस्वीकृति का कारण बनेगा।

सर्वोत्तम अभ्यासों में जबरन अपडेट के लिए Widget Center का उपयोग करना, त्वरित प्रतिक्रिया के लिए TimelineProvider स्तर पर डेटा कैशिंग करना, और प्रारंभिक स्थिति के लिए placeholder का उपयोग करना शामिल है। कई आकारों का समर्थन करना भी महत्वपूर्ण है — उपयोगकर्ता उम्मीद करते हैं कि विजेट small और medium दोनों वेरिएंट में उपलब्ध हो। गलत या पुराना डेटा प्रदर्शित करने से सख्ती से बचें — उपयोगकर्ता विजेट से गलत जानकारी लंबे समय तक याद रखते हैं।

WidgetKit सीमाएं तालिका

क्या अनुमति नहीं हैक्यों
एनीमेशन और वीडियोविजेट स्थिर स्नैपशॉट हैं; एनीमेशन बैटरी खत्म करता है
इंटरैक्टिविटीWidgetKit ऐप लिंक को छोड़कर UI तत्वों का समर्थन नहीं करता है
स्क्रॉलिंगस्क्रॉलिंग के बिना निश्चित आकार
कीबोर्डविजेट में टेक्स्ट इनपुट संभव नहीं है
लाइव डेटाडेटा Timeline शेड्यूल पर अपडेट होता है, रियल टाइम में नहीं
कस्टम आकारकेवल small, medium, large, accessory* निश्चित आकार

अक्सर पूछे जाने वाले प्रश्न

क्या iOS और macOS के लिए एक विजेट बनाया जा सकता है?

हां, WidgetKit क्रॉस-प्लेटफॉर्म है। एक ही Widget Extension को एकल SwiftUI कोडबेस के साथ iOS, iPadOS और macOS टार्गेट में शामिल किया जा सकता है। अंतर केवल समर्थित Families में दिखाई देते हैं — Mac में accessoryRectangular नहीं है।

WidgetKit कितनी बार विजेट अपडेट करता है?

Timeline शेड्यूल के अनुसार। डेवलपर निर्धारित करता है कि अगला अपडेट कब होगा — एक मिनट में या एक दिन में। सिस्टम बार-बार उपयोग किए जाने वाले विजेट के लिए अपडेट को तेज भी कर सकता है।

क्या विजेट में बटन जोड़ा जा सकता है?

नहीं, WidgetKit UIButton या किसी भी इंटरैक्टिव तत्व का समर्थन नहीं करता है। एकमात्र क्रिया विजेट पर टैप है, जो डीप लिंक के माध्यम से ऐप खोलता है।

ऐप से विजेट को जबरन कैसे अपडेट करें?

WidgetCenter.shared.reloadAllTimelines() या किसी विशिष्ट विजेट के लिए reloadTimelines(ofKind:) का उपयोग करें। ऐप से कॉल तुरंत प्रदाता से नया Timeline का अनुरोध करता है।

क्या विजेट बैटरी जीवन को प्रभावित करते हैं?

न्यूनतम — सामान्य उपयोग में प्रति दिन 1% से कम चार्ज। WidgetKit बैकग्राउंड अपडेट को सीमित करता है और ऐप को सक्रिय नहीं रखता है। मुख्य खर्च पहली बार जोड़ने पर Timeline बनाना है।

सारांश

  • WidgetKit iOS 14+, iPadOS 14+, macOS 11+ और watchOS 10+ पर विजेट के लिए एक Apple फ्रेमवर्क है, जो सामग्री प्रदर्शन के लिए SwiftUI का उपयोग करता है।
  • TimelineProvider TimelineEntry की एक सरणी के माध्यम से अपडेट शेड्यूल का प्रबंधन करता है, प्रत्येक एक विशिष्ट क्षण में विजेट की स्थिति का प्रतिनिधित्व करता है।
  • Widget Family में तीन आकार शामिल हैं — small, medium, large — और iOS 16+ लॉक स्क्रीन के लिए accessory परिवार।
  • StaticConfiguration उपयोगकर्ताओं के बीच समान सामग्री के लिए उपयुक्त है, IntentConfiguration सेटिंग्स के साथ व्यक्तिगत विजेट के लिए।
  • विजेट स्थिर हैं — कोई एनीमेशन, इंटरैक्टिविटी, स्क्रॉलिंग या वीडियो नहीं; केवल केवल-पढ़ने के लिए डेटा प्रदर्शन।
  • लॉक स्क्रीन विजेट (iOS 16+) सामग्री सीमाओं के साथ accessoryCircular, accessoryRectangular और accessoryInline के रूप में आते हैं।
  • जबरन अपडेट WidgetCenter.shared.reloadAllTimelines() के माध्यम से तुरंत नया Timeline का अनुरोध करने की अनुमति देता है।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें