Todos los paquetes de código abierto
PlataformaSwift

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.

3EstrellasÚltima versión: v2.0.0 · Actualizado: 15 de octubre de 2026
Plataformas:iOS 17macOS 14watchOS 10visionOS 1

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

swift
1import NotificationKit
2import SwiftUI
3 
4let scheduler = NotificationScheduler() // one for the whole app
5 
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

swift
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

text
1https://github.com/muhittincamdali/iOS-Notification-Framework.git

Capturas de pantalla

Banner de recordatorio de la app de ejemplo NotificationLab en un simulador de iPhone, modo claro
Banner de recordatorio de la app de ejemplo NotificationLab en un simulador de iPhone, modo oscuro
Lista planificada con 64 notificaciones en el sistema y el resto en la cola, modo claro
Lista planificada con 64 notificaciones en el sistema y el resto en la cola, modo oscuro
Pantalla de pedido abierta desde un push del simulador, modo claro
Pantalla de pedido abierta desde un push del simulador, modo oscuro

Cronología

  1. Repositorio abierto como un prototipo de framework de notificaciones; la mayoría de los primeros commits fueron documentación, ejemplos y CI

  2. v1.0.0 publicada; main se reinició desde un único commit con una API basada en builder

  3. Pequeñas adiciones al prototipo: una preview de SwiftUI, un manager de Live Activity y un tipo de push predictivo

  4. 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

Enlaces

Artículo relacionado

Leer el artículo (English)