iOS-Notification-Framework
Planifica notificaciones locales más allá del límite de 64 de iOS, enruta los taps y envía pushes a través de APNs.
Licencia: MIT
NotificationKit es un paquete Swift para apps que planifican notificaciones en el dispositivo y para los servidores que les envían pushes. Envuelve UserNotifications en value types y corrige las partes que fallan en silencio: iOS conserva solo las 64 notificaciones pendientes más próximas de una app y descarta el resto sin dar un error, algunos valores inválidos crashean la app en lugar de lanzar un error, y los delegate callbacks son difíciles de usar desde Swift concurrency. Una segunda library, NotificationKitAPNs, envía pushes a través de APNs con el mismo tipo de payload que lee la app. Ninguna de las dos libraries tiene dependencias fuera del SDK de Apple.
Características
- Sin notificaciones perdidas más allá de 64: NotificationScheduler entrega a iOS las 64 más próximas, mantiene las demás en una cola guardada y las va subiendo a medida que se liberan slots
- Horas silenciosas y un límite de frecuencia comprobados contra la hora en que se dispara una notificación, de modo que un recordatorio puesto a las 21:00 para las 23:00 espera a la mañana
- Errores en lugar de crashes: un interval repetitivo de menos de 60 segundos, un relevance score NaN o la hora 25 lanzan un NotificationValidationError antes de que UNUserNotificationCenter lo vea
- Taps, actions y deep links como valores: NotificationEventHandler convierte los delegate callbacks en AsyncStreams, y DeepLinkRouter solo abre pantallas desde schemes y hosts permitidos
- Push en ambos lados: un PushPayload tipado con los límites de tamaño de APNs, un DeviceToken que nunca se imprime completo, una Notification Service Extension que descarga media y un APNs client con autenticación por token
- InMemoryNotificationCenter conserva el límite de 64 notificaciones del sistema, de modo que la lógica de planificación se puede probar con unit tests normales
Inicio rápido
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}Instalación
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.gitCapturas de pantalla






Cronología
Repositorio abierto como un prototipo de framework de notificaciones; la mayoría de los primeros commits fueron documentación, ejemplos y CI
v1.0.0 publicada; main se reinició desde un único commit con una API basada en builder
Pequeñas adiciones al prototipo: una preview de SwiftUI, un manager de Live Activity y un tipo de push predictivo
Reconstruido como 2.0.0 alrededor de un notification center testeable; se eliminaron las fuentes del prototipo y no se conservó ninguna API de la serie 1.x