iOS-Notification-Framework
Yerel bildirimleri iOS'un 64 sınırının ötesinde planlayın, dokunuşları yönlendirin ve push'ları APNs üzerinden gönderin.
Lisans: MIT
NotificationKit, cihazda bildirim planlayan uygulamalar ve onlara push gönderen sunucular için bir Swift paketi. UserNotifications'ı değer tiplerine sarar ve sessizce başarısız olan yerlerini düzeltir: iOS bir uygulamanın yalnız en yakın 64 bekleyen bildirimini tutar ve gerisini hata vermeden atar, bazı geçersiz değerler hata fırlatmak yerine uygulamayı çökertir, delegate callback'leri de Swift concurrency ile zor kullanılır. İkinci library NotificationKitAPNs, uygulamanın okuduğu aynı payload tipiyle push'ları APNs üzerinden gönderir. İki library'nin de Apple SDK'sı dışında bağımlılığı yok.
Özellikler
- 64'ün ötesinde kayıp bildirim yok: NotificationScheduler en yakın 64'ü iOS'a verir, gerisini kaydedilen bir kuyrukta tutar ve slot boşaldıkça öne alır
- Sessiz saatler ve sıklık sınırı bildirimin tetikleneceği zamana göre kontrol edilir; 21:00'de 23:00 için kurulan hatırlatıcı sabahı bekler
- Çökme yerine hata: 60 saniyeden kısa tekrarlayan interval, NaN relevance score ya da 25. saat, UNUserNotificationCenter görmeden NotificationValidationError fırlatır
- Dokunuş, aksiyon ve deep link'ler değer olarak: NotificationEventHandler delegate callback'lerini AsyncStream'e çevirir, DeepLinkRouter yalnız izin verilen scheme ve host'lardan ekran açar
- İki tarafta push: APNs boyut sınırlarını uygulayan tipli PushPayload, hiçbir zaman tam yazdırılmayan DeviceToken, medya indiren Notification Service Extension ve token kimlik doğrulamalı APNs client'ı
- InMemoryNotificationCenter sistemin 64 bildirim sınırını taklit eder; planlama mantığı düz unit test'lerde çalışır
Hızlı Başlangıç
1import NotificationKit2import SwiftUI3 4let scheduler = NotificationScheduler() // one for the whole app5 6struct ContentView: View {7 var body: some View {8 Button("Remind me in 10 seconds") {9 Task {10 do {11 try await scheduler.requestAuthorization()12 try await scheduler.schedule(LocalNotification(13 id: "water",14 title: "Time for a glass of water",15 body: "You asked for this reminder 10 seconds ago.",16 trigger: .after(seconds: 10)17 ))18 } catch {19 print("Could not schedule the reminder:", error)20 }21 }22 }23 }24}Kurulum
Swift Package Manager
1dependencies: [2 .package(url: "https://github.com/muhittincamdali/iOS-Notification-Framework.git", from: "2.0.0")3],4targets: [5 .target(name: "YourApp", dependencies: [6 .product(name: "NotificationKit", package: "iOS-Notification-Framework")7 ]),8 // A server or command-line tool that sends pushes:9 .executableTarget(name: "PushServer", dependencies: [10 .product(name: "NotificationKitAPNs", package: "iOS-Notification-Framework")11 ])12]Xcode
1https://github.com/muhittincamdali/iOS-Notification-Framework.gitEkran Görüntüleri






Zaman Çizelgesi
Repo bir bildirim framework'ü prototipi olarak açıldı; ilk commit'lerin çoğu doküman, örnek ve CI idi
v1.0.0 yayınlandı; main, builder tabanlı bir API ile tek bir commit'ten yeniden başlatıldı
Prototipe küçük eklemeler: SwiftUI önizlemesi, Live Activity yöneticisi ve bir tahmine dayalı push tipi
Test edilebilir bir notification center etrafında 2.0.0 olarak yeniden kuruldu; prototip kaynakları silindi, 1.x API'si korunmadı