WidgetKit एक Apple फ्रेमवर्क है जिसे iOS 14 में पेश किया गया था, जो डेवलपर्स को iPhone और iPad की होम स्क्रीन, Mac डेस्कटॉप और Apple Watch फेस पर डायनामिक विजेट रखने की अनुमति देता है। विजेट ऐप खोले बिना मुख्य जानकारी प्रदर्शित करते हैं — मौसम का पूर्वानुमान, मुद्रा दर, कैलेंडर, कदम। Apple Developer Documentation, 2026 के अनुसार, WidgetKit Apple पारिस्थितिकी तंत्र में प्रतिदिन 2 बिलियन तक विजेट अपडेट प्रोसेस करता है, जो इसे सिस्टम स्क्रीन पर जानकारी प्रदर्शित करने के लिए सबसे अधिक उपयोग किए जाने वाले फ्रेमवर्क में से एक बनाता है।
मुख्य बातें
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% से कम बैटरी चार्ज की खपत करता है, इसका श्रेण वास्तविक समय अपडेट के बजाय शेड्यूल किए गए अपडेट को जाता है।
iOS 14 से पहले, विजेट केवल Today View के रूप में मौजूद थे — एक पैनल जो पहली स्क्रीन से बाईं ओर स्वाइप करके एक्सेस किया जाता था। Today Extensions में गंभीर सीमाएं थीं: वे केवल “Today” स्क्रीन पर उपलब्ध थे, सामग्री अपडेट करने के लिए ऐप खोलने की आवश्यकता थी, और आकार समर्थन सीमित था। WidgetKit ने Today Extensions को पूरी तरह से बदल दिया, होम स्क्रीन, लॉक स्क्रीन (iOS 16+) और Mac डेस्कटॉप पर विजेट प्रदान किए।
WidgetKit आर्किटेक्चर तीन मुख्य प्रोटोकॉल पर बनाया गया है: TimelineProvider, TimelineEntry, और Widget। TimelineEntry एक डेटा मॉडल है जो किसी विशिष्ट समय पर विजेट की स्थिति का प्रतिनिधित्व करता है। TimelineProvider ऐसी प्रविष्टियों की एक सरणी (Timeline) बनाता है, प्रत्येक के लिए सक्रियण तिथि निर्दिष्ट करता है। Widget प्रवेश बिंदु है जो प्रदाता को SwiftUI व्यू से जोड़ता है।
Timeline विधि getTimeline को सिस्टम द्वारा पहली बार विजेट जोड़े जाने पर और फिर समय-समय पर — आमतौर पर प्रदाता प्रकार के आधार पर हर 1–6 घंटे में कॉल किया जाता है। एक Timeline में घंटों या दिनों आगे की प्रविष्टियां हो सकती हैं, जिससे विजेट अपडेट के बीच ऐप कोड को कॉल किए बिना काम कर सकता है। यदि तत्काल विजेट अपडेट की आवश्यकता है (जैसे, मुद्रा दर बदल गई), तो ऐप जबरन WidgetCenter.shared.reloadAllTimelines() कॉल कर सकता है।
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)
}
}
WidgetKit तीन विजेट आकारों का समर्थन करता है, प्रत्येक निश्चित अनुपात के साथ। Small (iPhone पर 170×170 pt) कॉम्पैक्ट जानकारी प्रदर्शित करता है — एक मान, आइकन या छोटा टेक्स्ट। Medium (364×170 pt) small से दोगुना चौड़ा है और मानों के जोड़े या मिनी-चार्ट प्रदर्शित करने के लिए उपयुक्त है। Large (364×382 pt) लंबवत रूप से लगभग आधी स्क्रीन लेता है और तालिकाओं, सूचियों या विस्तृत डेटा को प्रदर्शित करने की अनुमति देता है।
डेवलपर को कम से कम दो आकारों का समर्थन करना चाहिए — Apple small + medium की अनुशंसा करता है। Large विजेट केवल तभी आवश्यक है जब ऐप में उस मात्रा को भरने के लिए पर्याप्त सामग्री हो। प्रत्येक आकार को अपना स्वयं का SwiftUI View मिलता है, जिसे WidgetKit सिस्टम स्क्रीन पर रेंडर करता है। महत्वपूर्ण बात यह है कि WidgetKit कस्टम आकारों का समर्थन नहीं करता है — केवल तीन निश्चित आकार, जो इंटरफ़ेस एकरूपता सुनिश्चित करते हैं।
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])
}
}
WidgetKit दो कॉन्फ़िगरेशन प्रकार प्रदान करता है — StaticConfiguration और IntentConfiguration। StaticConfiguration उन विजेट्स के लिए उपयुक्त है जो सभी उपयोगकर्ताओं के लिए समान सामग्री प्रदर्शित करते हैं: मुद्रा दरें, मौसम, कैलेंडर। IntentConfiguration उपयोगकर्ता को Siri इंटेंट सिस्टम के माध्यम से विजेट जोड़ते समय इसे कस्टमाइज़ करने की अनुमति देता है — उदाहरण के लिए, मौसम के लिए कोई विशिष्ट शहर या स्टॉक मूल्य के लिए कोई विशिष्ट टिकर चुनना।
IntentConfiguration INWidgetIntent का उपयोग करता है — SiriKit से INIntent का एक उपवर्ग। जब उपयोगकर्ता विजेट जोड़ता है और पैरामीटर चुनता है (जैसे, शहर), तो सिस्टम इस इंटेंट को सहेजता है और प्रत्येक अपडेट पर इसे TimelineProvider को भेजता है। प्रदाता getTimeline विधि में इंटेंट प्राप्त करता है और सामग्री बनाने के लिए इसके पैरामीटर का उपयोग करता है। IntentConfiguration व्यक्तिगत विजेट्स के लिए पसंदीदा तरीका है क्योंकि यह Siri और Shortcuts के साथ एकीकृत होता है।
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)
}
}
}
विजेट बनाना Xcode में Widget Extension Target जोड़ने से शुरू होता है: File → New → Target → Widget Extension। Xcode स्वचालित रूप से TimelineEntry, TimelineProvider और WidgetConfiguration के साथ एक संरचना उत्पन्न करता है। डेवलपर को केवल डेटा प्रदर्शित करने के लिए SwiftUI View लागू करना और सही अपडेट शेड्यूल के लिए प्रदाता को कॉन्फ़िगर करना होता है।
नीचे वर्तमान Bitcoin मूल्य प्रदर्शित करने वाले एक सरल विजेट का पूर्ण उदाहरण है: Provider URLSession के माध्यम से दर लोड करता है और प्रति घंटा अपडेट के साथ एक Timeline बनाता है। WidgetSwiftUIView दर को बड़े फ़ॉन्ट में और अंतिम अपडेट समय को छोटे फ़ॉन्ट में प्रदर्शित करता है।
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 के साथ, WidgetKit ने लॉक स्क्रीन — iPhone लॉक स्क्रीन के लिए समर्थन बढ़ाया। लॉक स्क्रीन विजेट दो प्रकार के होते हैं: inline (घड़ी के नीचे टेक्स्ट की एक पंक्ति) और rectangular (एक आयताकार क्षेत्र)। होम स्क्रीन विजेट के विपरीत, लॉक स्क्रीन विजेट अधिक बार अपडेट होते हैं — सिस्टम ट्रिगर फोन अनलॉक किए बिना वर्तमान जानकारी प्रदर्शित करने के लिए हर 15–30 मिनट में अपडेट की अनुमति देता है।
लॉक स्क्रीन विजेट को accessoryFamilies के साथ WidgetConfiguration के माध्यम से अलग कॉन्फ़िगरेशन की आवश्यकता होती है: accessoryCircular, accessoryRectangular, accessoryInline। इन परिवारों में सख्त आकार और सामग्री सीमाएं हैं — वे चित्र, एनीमेशन या कस्टम फ़ॉन्ट का समर्थन नहीं करते हैं। Apple लॉक स्क्रीन विजेट के लिए केवल टेक्स्ट जानकारी और SF Symbols सिस्टम आइकन का उपयोग करने की अनुशंसा करता है।
विजेट विकसित करते समय, WidgetKit की सीमाओं पर विचार करना महत्वपूर्ण है। विजेट केवल-पढ़ने के लिए व्यू हैं: वे टच इवेंट को हैंडल नहीं करते हैं (उस टैप को छोड़कर जो ऐप खोलता है)। विजेट एनीमेशन, वीडियो, कीबोर्ड इनपुट, स्क्रॉलिंग या इंटरैक्टिव तत्वों का समर्थन नहीं करते हैं। प्रत्येक विजेट एक निश्चित समय पर डेटा का एक स्थिर स्नैपशॉट है, और इंटरैक्टिविटी जोड़ने का प्रयास App Store से ऐप अस्वीकृति का कारण बनेगा।
सर्वोत्तम अभ्यासों में जबरन अपडेट के लिए Widget Center का उपयोग करना, त्वरित प्रतिक्रिया के लिए TimelineProvider स्तर पर डेटा कैशिंग करना, और प्रारंभिक स्थिति के लिए placeholder का उपयोग करना शामिल है। कई आकारों का समर्थन करना भी महत्वपूर्ण है — उपयोगकर्ता उम्मीद करते हैं कि विजेट small और medium दोनों वेरिएंट में उपलब्ध हो। गलत या पुराना डेटा प्रदर्शित करने से सख्ती से बचें — उपयोगकर्ता विजेट से गलत जानकारी लंबे समय तक याद रखते हैं।
| क्या अनुमति नहीं है | क्यों |
|---|---|
| एनीमेशन और वीडियो | विजेट स्थिर स्नैपशॉट हैं; एनीमेशन बैटरी खत्म करता है |
| इंटरैक्टिविटी | WidgetKit ऐप लिंक को छोड़कर UI तत्वों का समर्थन नहीं करता है |
| स्क्रॉलिंग | स्क्रॉलिंग के बिना निश्चित आकार |
| कीबोर्ड | विजेट में टेक्स्ट इनपुट संभव नहीं है |
| लाइव डेटा | डेटा Timeline शेड्यूल पर अपडेट होता है, रियल टाइम में नहीं |
| कस्टम आकार | केवल small, medium, large, accessory* निश्चित आकार |
अक्सर पूछे जाने वाले प्रश्न
हां, WidgetKit क्रॉस-प्लेटफॉर्म है। एक ही Widget Extension को एकल SwiftUI कोडबेस के साथ iOS, iPadOS और macOS टार्गेट में शामिल किया जा सकता है। अंतर केवल समर्थित Families में दिखाई देते हैं — Mac में accessoryRectangular नहीं है।
Timeline शेड्यूल के अनुसार। डेवलपर निर्धारित करता है कि अगला अपडेट कब होगा — एक मिनट में या एक दिन में। सिस्टम बार-बार उपयोग किए जाने वाले विजेट के लिए अपडेट को तेज भी कर सकता है।
नहीं, WidgetKit UIButton या किसी भी इंटरैक्टिव तत्व का समर्थन नहीं करता है। एकमात्र क्रिया विजेट पर टैप है, जो डीप लिंक के माध्यम से ऐप खोलता है।
WidgetCenter.shared.reloadAllTimelines() या किसी विशिष्ट विजेट के लिए reloadTimelines(ofKind:) का उपयोग करें। ऐप से कॉल तुरंत प्रदाता से नया Timeline का अनुरोध करता है।
न्यूनतम — सामान्य उपयोग में प्रति दिन 1% से कम चार्ज। WidgetKit बैकग्राउंड अपडेट को सीमित करता है और ऐप को सक्रिय नहीं रखता है। मुख्य खर्च पहली बार जोड़ने पर Timeline बनाना है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें