جميع حزم المصدر المفتوح
المنصةSwift

iOS-Widget-Development-Kit

عروض SwiftUI (views) ومساعدات لودجات WidgetKit والرسوم البيانية والـ timelines وApp Intents وLive Activities

27النجومآخر إصدار: v2.0.0آخر تحديث: 15 أكتوبر 2026
الأنظمة الأساسية:iOS 17macOS 14

الترخيص: MIT

WidgetDevelopmentKit حزمة Swift للمطوّرين الذين يبنون ودجات لتطبيقات iOS الخاصة بهم. تحتوي على عروض SwiftUI جاهزة لودجات الشاشة الرئيسية (Home Screen) وشاشة القفل (Lock Screen) وStandBy، وعروض رسوم بيانية مخصّصة بحجم الودجات، ومساعدات للـ timelines وللبيانات التي يشاركها التطبيق مع ودجته، وApp Intents لأزرار الودجات، وسمات (attributes) وعروض ActivityKit لـ Live Activities. تظل أنت من يكتب امتداد الودجة (widget extension)؛ وتوفّر لك الحزمة العروض ومنطق التاريخ والتخزين وإعادة المحاولة الذي تحتاجه كل ودجة. لا تحتوي على أي اعتماديات من جهات خارجية.

الميزات

  • قوالب الشاشة الرئيسية مثل الطقس والإحصاءات والمالية والتقويم والعدّ التنازلي والساعة وحلقات اللياقة ومتابع العادات والمهام والماء، بالإضافة إلى 9 عروض Swift Charts مخصّصة بحجم الودجات
  • 15 عرض accessory لشاشة القفل (دائري circular، ومستطيل rectangular، ومضمّن inline) و7 عروض لـ StandBy
  • مساعدات الـ timeline: تواريخ entry، وسياسات إعادة التحميل (reload policies) التي تستخدم حسابات التقويم، ومخزن snapshot له مدة انتهاء للبيانات المشتركة عبر App Group
  • ودجات تفاعلية: 5 App Intents و8 عروض بأزرار تشغّلها
  • Live Activities: 10 أنواع من ActivityAttributes بعروض لشاشة القفل وDynamic Island المضغوطة (compact)، وآلة حالات (state machine) ترفض التحديثات غير المرتَّبة
  • محمّل بيانات يعيد المحاولة فقط عند الأخطاء المؤقتة (408 و5xx وtimeouts وoffline) ويفشل بسرعة داخل امتداد الودجة
  • منطق التاريخ والأرقام وإعادة المحاولة مغطّى باختبارات Swift Testing، بما يشمل NaN والأهداف الصفرية وأيام التوقيت الصيفي؛ ويحافظ اختبار على تزامن كتل الكود في README مع الكود المُجمَّع

البدء السريع

swift
1struct LaunchEntry: TimelineEntry {
2 let date: Date
3}
4 
5struct LaunchProvider: TimelineProvider {
6 func placeholder(in context: Context) -> LaunchEntry {
7 LaunchEntry(date: .now)
8 }
9 
10 func getSnapshot(in context: Context, completion: @escaping (LaunchEntry) -> Void) {
11 completion(LaunchEntry(date: .now))
12 }
13 
14 func getTimeline(in context: Context, completion: @escaping (Timeline<LaunchEntry>) -> Void) {
15 // One entry per hour for the next six hours, then WidgetKit asks again.
16 let entries = TimelineSchedule.dates(from: .now, every: 60 * 60, count: 6).map(LaunchEntry.init)
17 completion(Timeline(entries: entries, policy: .atEnd))
18 }
19}
20 
21struct LaunchCountdownWidget: Widget {
22 let launchDay = DateComponents(calendar: .current, year: 2027, month: 1, day: 1).date ?? .now
23 
24 var body: some WidgetConfiguration {
25 StaticConfiguration(kind: "launch", provider: LaunchProvider()) { entry in
26 CountdownWidget(title: "Launch", targetDate: launchDay, referenceDate: entry.date)
27 }
28 .configurationDisplayName("Countdown")
29 .supportedFamilies([.systemSmall])
30 }
31}

التثبيت

Xcode (File › Add Package Dependencies…)

text
1https://github.com/muhittincamdali/iOS-Widget-Development-Kit.git

Swift Package Manager

swift
1dependencies: [
2 .package(url: "https://github.com/muhittincamdali/iOS-Widget-Development-Kit.git", from: "2.0.0")
3],
4targets: [
5 .target(name: "YourApp", dependencies: [
6 .product(name: "WidgetDevelopmentKit", package: "iOS-Widget-Development-Kit")
7 ])
8]

لقطات الشاشة

ودجات الطقس والماء واللياقة والعدّ التنازلي والاقتباس والعادات مرسومة من الحزمة
نفس ودجات الشاشة الرئيسية في الوضع الداكن
عروض sparkline للإحصاءات، وحلقة التقدّم، والرسم الخطي، والرسم الشريطي
نفس عروض الرسوم البيانية في الوضع الداكن
ودجات شاشة القفل: البطارية، وحلقات النشاط، والعدّ التنازلي، والطقس، والإحصاءات
نفس ودجات شاشة القفل في الوضع الداكن

الجدول الزمني

  1. افتُتح المستودع

  2. وُسم الإصدار v1.0.0؛ لا يُحمَّل البيان (manifest) عند هذا الوسم (tag)، فلا يمكن بناء هذا الإصدار

  3. تم التبسيط إلى هدف مكتبة (library target) واحد من حوالي 240 سطرًا؛ وظل هدف الاختبار (test target) غير قابل للتجميع (compile)

  4. أُعيد البناء والإصدار كـ 2.0.0 (PR #28): استُعيدت العروض من التاريخ وأُصلحت، وبيان Swift 6، واختبارات Swift Testing، وDocC، وتطبيق توضيحي (example app)، وCI

الروابط

مقالة ذات صلة

قراءة المقالة