Tous les paquets open source
PlateformeSwift

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.

3ÉtoilesDernière version: v2.0.0 · Mis à jour: 15 octobre 2026
Plateformes:iOS 17macOS 14watchOS 10visionOS 1

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

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}

Installation

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

Captures d'écran

Bannière de rappel de l'app d'exemple NotificationLab sur un simulateur iPhone, mode clair
Bannière de rappel de l'app d'exemple NotificationLab sur un simulateur iPhone, mode sombre
Liste planifiée avec 64 notifications au système et le reste dans la file, mode clair
Liste planifiée avec 64 notifications au système et le reste dans la file, mode sombre
Écran de commande ouvert depuis un push du simulateur, mode clair
Écran de commande ouvert depuis un push du simulateur, mode sombre

Chronologie

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

  2. v1.0.0 publiée ; main redémarrée à partir d'un seul commit avec une API basée sur un builder

  3. Petits ajouts de prototype : un preview SwiftUI, un manager de Live Activity et un type de push prédictif

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

Liens

Article associé

Lire l'article (English)