iOS-Notification-Framework
Planifiez des notifications locales au-delà de la limite de 64 d'iOS, routez les taps et envoyez des pushes via APNs.
Licence: MIT
NotificationKit est un package Swift pour les apps qui planifient des notifications sur l'appareil et pour les serveurs qui leur envoient des pushes. Il encapsule UserNotifications dans des value types et corrige les points qui échouent silencieusement : iOS ne conserve que les 64 notifications en attente les plus proches d'une app et abandonne le reste sans erreur, certaines valeurs invalides plantent l'app au lieu de lever une erreur, et les delegate callbacks sont difficiles à utiliser depuis la concurrence Swift. Une seconde bibliothèque, NotificationKitAPNs, envoie des pushes via APNs avec le même type de payload que celui lu par l'app. Aucune des deux bibliothèques n'a de dépendance hors du SDK d'Apple.
Fonctionnalités
- Aucune notification perdue au-delà de 64 : NotificationScheduler transmet à iOS les 64 les plus proches, conserve les autres dans une file sauvegardée et les fait avancer à mesure que des emplacements se libèrent
- Heures silencieuses et un plafond de fréquence vérifiés par rapport à l'heure de déclenchement d'une notification, si bien qu'un rappel programmé à 21:00 pour 23:00 attend le matin
- Des erreurs plutôt que des plantages : un intervalle répétitif inférieur à 60 secondes, un score de pertinence NaN ou une heure 25 lève une NotificationValidationError avant qu'UNUserNotificationCenter ne la voie
- Taps, actions et deep links sous forme de valeurs : NotificationEventHandler transforme les delegate callbacks en AsyncStreams, et DeepLinkRouter n'ouvre des écrans qu'à partir de schemes et d'hôtes autorisés
- Push des deux côtés : un PushPayload typé avec les limites de taille d'APNs, un DeviceToken qui ne s'affiche jamais en entier, une Notification Service Extension qui télécharge les médias, et un client APNs avec authentification par token
- InMemoryNotificationCenter conserve la limite système de 64 notifications, ce qui permet d'exécuter la logique de planification dans de simples tests unitaires
Démarrage rapide
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.gitCaptures d'écran






Chronologie
Dépôt ouvert en tant que prototype de framework de notifications ; la plupart des premiers commits concernaient la documentation, des exemples et la CI
v1.0.0 publiée ; main redémarrée à partir d'un seul commit avec une API basée sur un builder
Petits ajouts de prototype : un preview SwiftUI, un manager de Live Activity et un type de push prédictif
Reconstruit en 2.0.0 autour d'un notification center testable ; les sources du prototype ont été supprimées et aucune API 1.x n'a été conservée