iOS-Widget-Development-Kit
WidgetKit widget'ları, grafikler, timeline'lar, App Intents ve Live Activity'ler için SwiftUI view'ları ve yardımcılar
Lisans: MIT
WidgetDevelopmentKit, iOS uygulamalarına widget ekleyen geliştiriciler için bir Swift paketi. Home Screen, Lock Screen ve StandBy widget'ları için hazır SwiftUI view'ları, widget boyutuna göre ayarlanmış grafik view'ları, timeline'lar ve uygulamanın widget'la paylaştığı veri için yardımcılar, widget butonları için App Intents ve Live Activity'ler için ActivityKit attribute'ları ve view'ları içeriyor. Widget extension'ı yine siz yazıyorsunuz; paket, her widget'ın ihtiyaç duyduğu view'ları ve tarih, depolama ve retry mantığını hazır veriyor. Third-party bağımlılığı yok.
Özellikler
- Hava durumu, istatistik, finans, takvim, geri sayım, saat, fitness halkaları, alışkanlık takibi, yapılacaklar ve su gibi Home Screen şablonları; ayrıca widget boyutuna göre ayarlanmış 9 Swift Charts view'ı
- 15 Lock Screen accessory view'ı (circular, rectangular, inline) ve 7 StandBy view'ı
- Timeline yardımcıları: entry tarihleri, takvim aritmetiği kullanan reload politikaları ve App Group üzerinden paylaşılan veri için süreli bir snapshot store
- Interactive widget'lar: 5 App Intent ve bunları çalıştıran butonlu 8 view
- Live Activity'ler: Lock Screen ve compact Dynamic Island view'larıyla 10 ActivityAttributes tipi ve sırasız güncellemeleri reddeden bir state machine
- Yalnız geçici hatalarda (408, 5xx, timeout, offline) yeniden deneyen ve widget extension içinde hızlı fail eden bir data loader
- Tarih, sayı ve retry mantığı NaN, sıfır hedef ve yaz saati günleri dahil Swift Testing testleriyle kapsanıyor; bir test README'deki kod bloklarını derlenen kodla senkron tutuyor
Hızlı Başlangıç
1struct LaunchEntry: TimelineEntry {2 let date: Date3}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 ?? .now23 24 var body: some WidgetConfiguration {25 StaticConfiguration(kind: "launch", provider: LaunchProvider()) { entry in26 CountdownWidget(title: "Launch", targetDate: launchDay, referenceDate: entry.date)27 }28 .configurationDisplayName("Countdown")29 .supportedFamilies([.systemSmall])30 }31}Kurulum
Xcode (File › Add Package Dependencies…)
1https://github.com/muhittincamdali/iOS-Widget-Development-Kit.gitSwift Package Manager
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]Ekran Görüntüleri






Zaman Çizelgesi
Repo açıldı
v1.0.0 etiketlendi; bu etiketteki manifest yüklenmediği için sürüm derlenemiyor
Yaklaşık 240 satırlık tek bir library target'ına sadeleştirildi; test target'ı hâlâ derlenmiyordu
Yeniden kurulup 2.0.0 olarak yayımlandı (PR #28): view'lar geçmişten geri alınıp düzeltildi, Swift 6 manifest'i, Swift Testing testleri, DocC, örnek uygulama ve CI eklendi