iOS-Notification-Framework
Planen Sie lokale Benachrichtigungen über iOS' Limit von 64 hinaus, leiten Sie Taps weiter und senden Sie Pushes über APNs.
Lizenz: MIT
NotificationKit ist ein Swift-Package für Apps, die Benachrichtigungen auf dem Gerät planen, und für die Server, die an sie pushen. Es umschließt UserNotifications mit Value Types und behebt die Stellen, die lautlos scheitern: iOS behält nur die 64 am nächsten liegenden ausstehenden Benachrichtigungen einer App und verwirft den Rest ohne Fehler, manche ungültigen Werte lassen die App abstürzen statt einen Fehler zu werfen, und die Delegate-Callbacks sind aus Swift Concurrency nur schwer nutzbar. Eine zweite Library, NotificationKitAPNs, sendet Pushes über APNs mit demselben Payload-Typ, den die App liest. Keine der beiden Libraries hat Abhängigkeiten außerhalb von Apples SDK.
Funktionen
- Keine verlorenen Benachrichtigungen über 64 hinaus: NotificationScheduler übergibt iOS die 64 nächsten, hält die übrigen in einer gespeicherten Warteschlange und rückt sie nach, sobald Plätze frei werden
- Ruhezeiten und eine Häufigkeitsgrenze werden gegen den Auslösezeitpunkt einer Benachrichtigung geprüft, sodass eine um 21:00 Uhr für 23:00 Uhr gesetzte Erinnerung auf den Morgen wartet
- Fehler statt Abstürze: ein wiederholendes Intervall unter 60 Sekunden, ein NaN-Relevance-Score oder Stunde 25 wirft einen NotificationValidationError, bevor UNUserNotificationCenter ihn sieht
- Taps, Actions und Deep Links als Werte: NotificationEventHandler verwandelt Delegate-Callbacks in AsyncStreams, und DeepLinkRouter öffnet Screens nur aus erlaubten Schemes und Hosts
- Push auf beiden Seiten: ein typisiertes PushPayload mit den Größenlimits von APNs, ein DeviceToken, das nie vollständig ausgegeben wird, eine Medien herunterladende Notification Service Extension und ein APNs-Client mit Token-Authentifizierung
- InMemoryNotificationCenter bildet das 64-Benachrichtigungen-Limit des Systems nach, sodass die Scheduling-Logik in einfachen Unit-Tests läuft
Schnellstart
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}Installation
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.gitScreenshots






Zeitleiste
Repository als Prototyp eines Notification-Frameworks eröffnet; die meisten frühen Commits waren Dokumentation, Beispiele und CI
v1.0.0 veröffentlicht; main wurde mit einem einzigen Commit und einer Builder-basierten API neu gestartet
Kleine Ergänzungen am Prototyp: eine SwiftUI-Preview, ein Live-Activity-Manager und ein vorausschauender Push-Typ
Als 2.0.0 um ein testbares Notification Center herum neu aufgebaut; die Prototyp-Quellen wurden entfernt, keine 1.x-API erhalten