Today Widget هو ملحق iOS يعرض معلومات تفاعلية مباشرة في مركز الإشعارات أو على شاشة «اليوم». يرى المستخدم بيانات محدثة — الطقس، أسعار العملات، التقويم — دون فتح التطبيق الرئيسي. وفقاً Apple WWDC (2025)، زاد استخدام WidgetKit بنسبة 40% بعد إدخال الودجتات التفاعلية في iOS 17. Today Widget يحل مشكلة الوصول السريع إلى المعلومات: نظرة على الشاشة — ويحصل المستخدم على البيانات المطلوبة دون التنقل في التطبيق.
الملامح الرئيسية
Today Widget (يُعرف أيضاً بويدجت مركز الإشعارات) هو عنصر واجهة iOS يعرض معلومات موجزة من تطبيق دون تشغيله. يرى المستخدم الودجت عن طريق التمرير لليسار على شاشة القفل أو الشاشة الرئيسية. يمكن للويدجت عرض بيانات ديناميكية — أسعار العملات، آخر الأخبار، حالة المهام، حالة الجهاز.
تاريخياً، ظهر Today Widget في iOS 8 كملحق لمركز الإشعارات تم تنفيذه من خلال إطار عمل مركز الإشعارات. مع 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 |
| الموضع | الشاشة الرئيسية + «اليوم» | «اليوم» فقط |
| الأحجام | صغير، متوسط، كبير | حجم ثابت واحد |
| التفاعلية | أزرار ومفاتيح iOS 17+ | فتح التطبيق فقط |
| التحديث | Timeline Provider | widgetPerformUpdate |
| اللغة | SwiftUI | UIKit |
إذا كان تطبيقك يدعم iOS 14 والإصدارات الأحدث — استخدم WidgetKit. يوفر إمكانيات غنية: أحجام متعددة، تكوين من خلال intents، إعادة تصميم مع iOS 17 وروابط عميقة. التصريحية في SwiftUI تجعل كود الودجت مضغوطاً وقابلاً للقراءة. يدير Timeline Provider جدول التحديثات تلقائياً مع مراعاة استهلاك الطاقة.
فقط إذا كان مطلوباً دعم iOS 9–13. NCWidgetProviding أبسط في التنفيذ — هو UIViewController عادي مع بروتوكول. لكنه محدود: حجم واحد، UIKit فقط، بدون تكوين. توصي Apple بالتبديل إلى WidgetKit حتى للمشاريع القديمة باستخدام availability check: WidgetKit على iOS 14+، NCWidgetProviding كخيار احتياطي.
في iOS الحديث، هناك ثلاثة أنواع من الودجتات حسب الغرض الوظيفي. كل نوع يحل مشكلته الخاصة ويتطلب نهجاً مختلفاً لتصميم البيانات والواجهة. التصنيف يساعد في اختيار البنية المناسبة لتطبيقك.
تعرض معلومات ثابتة أو محدثة دورياً: الطقس، التاريخ، أسعار العملات، حالة الخادم. يتم تحديث البيانات وفقاً لجدول زمني عبر Timeline Provider. لا يتفاعل المستخدم مع الودجت — فقط يقرأ. الودجتات المعلوماتية هي الأبسط في التنفيذ، لا تتطلب معالجة أحداث اللمس وتعمل في الخلفية دون أذونات إضافية.
مع iOS 17، يدعم WidgetKit الأزرار والمفاتيح وأشرطة التمرير في الودجتات. يمكن للمستخدم تنفيذ إجراء — تحديد مهمة، إيقاف الموسيقى مؤقتاً، تشغيل الضوء — دون فتح التطبيق. الودجتات التفاعلية تستخدم App Intents لنقل الإجراءات إلى التطبيق الرئيسي. القيد: فقط على الشاشة الرئيسية، وليس في قسم «اليوم» حتى iOS 18.
يخصص المستخدم البيانات المعروضة من خلال واجهة النظام — يختار مدينة للطقس، حساباً للمالية، فئة للأخبار. يتم التنفيذ من خلال Intents Extension والتكوين في WidgetBundle. الودجتات القابلة للتكوين تزيد من التخصيص وملاءمة المعلومات لكل مستخدم.
لنلقِ نظرة على عملية إنشاء Today Widget في SwiftUI باستخدام WidgetKit. سيعرض الودجت سعر الصرف الحالي مع تحديثات تلقائية. WidgetKit يتطلب ثلاثة مكونات: بنية الودجت، Provider مع التكوين، وعرض للعرض.
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 (إرشادات واجهة المستخدم البشرية) هو سبب للرفض عند النشر في App Store. ثلاثة مبادئ: القراءة السريعة، الاتساق والتسلسل الهرمي.
يقضي المستخدم أقل من ثانية على الودجت. لا تضف أكثر من 3–4 عناصر بيانات. الخط — 11pt كحد أدنى للتسميات، 17pt للقيم. استخدم الخط العريض (Semibold) للأرقام الرئيسية. تجنب التمرير — Today Widget لا يتم تمريره.
يدعم WidgetKit ثلاثة أحجام: صغير (170×170pt)، متوسط (364×170pt)، كبير (364×382pt). لـ Today Widget في قسم «اليوم»، المتوسط هو الخيار الأكثر شيوعاً. تصميم متكيف من خلال EnvironmentValues: غيّر كثافة المعلومات حسب الحجم. صغير — رقم واحد، متوسط — رقم + رسم بياني، كبير — جدول.
يجب أن يعرض الودجت بشكل صحيح في السمات الفاتحة والداكنة دون إجراءات إضافية من المطور — يلتقط WidgetKit ألوان النظام تلقائياً. Dynamic Type للودجتات محدود: حجم الخط ثابت ولكن يجب أن يكون مقروءاً. UIColor.label و UIColor.systemBackground هما اللونان الأساسيان للنص والخلفية في كلا السمتين.
الأسئلة الشائعة
هو الآن نفس ويدجت WidgetKit. الفرق فقط في الموضع: على الشاشة الرئيسية وفي قسم «اليوم» (يسار الشاشة الأولى). قبل iOS 14، كان Today Widget ملحق NCWidgetProviding منفصلاً يعمل فقط في مركز الإشعارات. الآن هو WidgetKit واحد.
لا يقوم WidgetKit بتحديث الودجتات بمؤقت. يحدد المطور الجدول عبر Timeline Provider: إدخالات بطوابع زمنية. يضمن النظام التحديث في الوقت المحدد مع مراعاة توفير الطاقة — قد يتأخر بضع دقائق. الحد الأدنى للفاصل هو 15 دقيقة، لكن Apple توصي بما لا يزيد عن مرة واحدة في الساعة.
نعم، بدءاً من iOS 17، يدعم WidgetKit الأزرار والمفاتيح وأشرطة التمرير من خلال App Intents. تعمل العناصر التفاعلية على الشاشة الرئيسية لـ iPhone و iPad. الدعم في قسم «اليوم» ظهر في iOS 18. لـ iOS 16 والإصدارات الأقدم — فقط فتح التطبيق عند النقر على الودجت.
لا توجد حدود. يمكن للتطبيق تسجيل أي عدد من الودجتات من خلال WidgetBundle — كل بنوعه وحجمه وتكوينه الخاص. يضيفها المستخدم بشكل فردي. يوصى بما لا يزيد عن 3–5 ودجتات لعدم إرباك اختيار المستخدم.
WidgetKit مدعوم بالكامل في iOS Simulator. شغّل مخطط target WidgetKit في Xcode — سيظهر الودجت على الشاشة الرئيسية للمحاكي. لاختبار Timeline Provider، استخدم WidgetKit Debug Profile: Xcode → Product → Profile → WidgetKit Debug. تحقق من السلوك الفعلي على جهاز فعلي.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.