NWPathMonitor : ce que c’est, surveillance réseau et travail dans iOS

Auteur : IT Sectr Publié le : 2026-03-10 Temps de lecture : 9 min

NWPathMonitor est une classe du framework Network dans iOS et macOS pour surveiller l’état du chemin réseau de l’appareil. Selon Apple Developer Documentation (2025), NWPathMonitor permet à l’application de suivre la disponibilité du réseau, de déterminer le type d’interface et de réagir aux changements de connexion. NWPathMonitor fournit des informations sur le type de connexion, les coûts des données et la disponibilité Internet via un callback pratique avec NWPath.

Points clés

  • NWPathMonitor — une classe du framework Network pour la surveillance asynchrone du chemin réseau dans iOS et macOS.
  • NWPath contient des informations sur la disponibilité du réseau, le type d’interface (Wi-Fi, données cellulaires, Ethernet) et le statut des coûts.
  • La méthode start démarre la surveillance sur la file d’attente dispatch queue spécifiée, la méthode cancel l’arrête.
  • La propriété pathUpdateHandler — une closure qui est appelée à chaque changement d’état du chemin réseau.
  • NWPathMonitor prend en charge le filtrage par type d’interface requis via le paramètre requiredInterfaceType.

Qu’est-ce que NWPathMonitor ?

NWPathMonitor est une classe du framework Network introduite par Apple dans iOS 12 et macOS 10.14 Mojave. Elle fournit une API moderne pour suivre les changements dans le chemin réseau de l’appareil — la combinaison d’interfaces réseau à travers lesquelles le trafic de l’application transite.

Avant iOS 12, la bibliothèque Reachability construite sur le framework SystemConfiguration en C était utilisée pour la surveillance réseau. NWPathMonitor est une alternative native en Swift avec une API plus riche, une prise en charge des types de connexion modernes (VPN, multipath, LTE, 5G) et une intégration intégrée avec GCD.

La différence clé entre NWPathMonitor et Reachability — l’objet NWPath fournit non seulement un statut binaire « disponible/indisponible », mais une image complète du chemin : interfaces utilisées, leur priorité, coûts, statut d’itinérance et capacités proxy et VPN. Le développeur obtient des informations complètes pour prendre des décisions sur les requêtes réseau.

Historique du framework Network

Le framework Network est apparu comme un remplacement moderne des API C de bas niveau — CFStream et BSD Sockets. Il fournit une interface unifiée pour la communication réseau sur toutes les plateformes Apple, y compris watchOS et tvOS. NWPathMonitor fait partie de ce framework aux côtés de NWConnection, NWListener et NWBrowser.

Le framework Network est écrit en Swift et utilise GCD pour le traitement asynchrone. Cela signifie que les callbacks de NWPathMonitor s’exécutent sur la dispatch queue spécifiée, s’intégrant à l’architecture de multithreading existante de l’application sans gestion manuelle des threads.

Comment utiliser NWPathMonitor dans une application

L’utilisation de NWPathMonitor commence par la création d’une instance de classe et la configuration du callback pathUpdateHandler. Ensuite, la méthode start est appelée avec une dispatch queue où la closure s’exécutera. La surveillance est arrêtée par la méthode cancel, qui libère également les ressources.

swift
import Network

class NetworkMonitor {
    private let monitor = NWPathMonitor()
    private let queue = DispatchQueue("monitor")

    func startMonitoring() {
        monitor.pathUpdateHandler = { path in
            if path.status == .satisfied {
                print("Réseau disponible")
            } else {
                print("Réseau indisponible")
            }
        }
        monitor.start(on: queue)
    }

    func stopMonitoring() {
        monitor.cancel()
    }
}

Travail avec le type d’interface

NWPathMonitor peut être configuré pour surveiller uniquement un type d’interface spécifique. Utilisez l’initialiseur NWPathMonitor(requiredInterfaceType:) avec le paramètre NWInterface.InterfaceType — .wifi, .cellular, .wiredEthernet ou .loopback. Si aucun type n’est spécifié, la surveillance couvre toutes les interfaces.

Exemple pratique : une application de streaming peut surveiller uniquement le Wi-Fi et avertir l’utilisateur du passage aux données cellulaires. Vérifier isConstrained et isExpensive dans NWPath permet de déterminer si la connexion actuelle est facturée ou limitée en vitesse.

Cycle de vie de la surveillance

La surveillance doit démarrer au lancement de l’application ou lors du passage au premier plan, et s’arrêter lors du passage en arrière-plan. Il est recommandé de créer une seule instance de NWPathMonitor pour toute l’application (singleton) et de l’utiliser depuis différents modules via un protocole ou une couche de service.

Propriétés et capacités de NWPath

NWPath est un objet transmis à pathUpdateHandler qui décrit l’état actuel du chemin réseau. Il contient cinq propriétés clés couvrant la plupart des scénarios de surveillance réseau. NWPath.Status — une énumération avec trois états : satisfied (disponible), unsatisfied (indisponible) et requiresConnection (nécessite une connexion).

PropriétéTypeDescription
statusNWPath.StatusÉtat actuel du chemin : satisfied, unsatisfied, requiresConnection
availableInterfaces[NWInterface]Liste de toutes les interfaces réseau disponibles
gateways[NWEndpoint]Liste des passerelles utilisées pour le routage
isExpensiveBoolTrue si la connexion est facturée (données cellulaires, hotspot personnel)
isConstrainedBoolTrue si la connexion est limitée en vitesse (Low Data Mode)

Vérification des coûts et restrictions

La propriété isExpensive est un indicateur critique pour les applications traitant de grands volumes de données. Si isExpensive = true, l’application doit réduire la qualité du streaming, reporter les téléchargements de mises à jour ou avertir l’utilisateur. isConstrained indique que le Low Data Mode est activé.

Pour vérifier la disponibilité Internet (pas seulement le réseau), utilisez la méthode usesInterfaceType. Si l’appareil est connecté au Wi-Fi sans Internet — NWPath peut afficher satisfied, mais l’accès réel est absent. Dans ces cas, une validation supplémentaire via NWConnection est nécessaire.

Exemples d’implémentation de NWPathMonitor

Examinons une implémentation avancée de NWPathMonitor avec gestion des coûts, types d’interface et notification ViewModel via un publisher. L’exemple utilise le framework Combine pour les mises à jour réactives de l’interface utilisateur lors des changements d’état du réseau.

swift
import Network
import Combine

final class NetworkManager: ObservableObject {
    static let shared = NetworkManager()
    @Published private(set) var isConnected = true
    @Published private(set) var isExpensive = false

    private let monitor = NWPathMonitor()
    private let queue = DispatchQueue("NetworkMonitor")

    private init() {
        monitor.pathUpdateHandler = { [weak self] path in
            DispatchQueue.main.async {
                self?.isConnected = path.status == .satisfied
                self?.isExpensive = path.isExpensive
            }
        }
        monitor.start(on: queue)
    }

    func checkInterface() -> NWInterface.InterfaceType {
        let path = monitor.currentPath
        if path.usesInterfaceType(.wifi) { return .wifi }
        if path.usesInterfaceType(.cellular) { return .cellular }
        return .other
    }
}

Gestion de la perte de réseau avec action différée

Lorsque la connexion est perdue, il peut être nécessaire non seulement d’informer l’interface utilisateur, mais aussi d’effectuer des actions différées — par exemple, enregistrer un brouillon de requête pour un envoi ultérieur. Implémentez une file d’attente de requêtes différées qui accumule les opérations pendant le statut unsatisfied et les envoie lorsque satisfied est rétabli.

Le modèle ReachabilityManager avec délégation est idéal pour cette tâche : NWPathMonitor notifie le gestionnaire, le gestionnaire met à jour la file d’attente et l’interface utilisateur. Lorsque le statut passe à satisfied, la file d’attente se vide automatiquement et l’interface utilisateur reçoit une indication de restauration de la connexion.

NWPathMonitor vs Reachability

Avant NWPathMonitor, la solution standard pour la surveillance réseau dans iOS était la bibliothèque Reachability d’Apple (exemple de la documentation), construite sur SystemConfiguration. Les principales différences : Reachability fonctionne via SCNetworkReachability en C, ne prend pas en charge les types de réseau modernes et fournit seulement une réponse binaire de disponibilité.

NWPathMonitor résout ces limitations : il est écrit en Swift, prend en charge VPN, multipath, 5G et LTE, fournit des informations détaillées sur chaque interface et fonctionne de manière asynchrone via GCD. Reachability est toujours utilisé dans les projets prenant en charge iOS 11 et inférieur.

CaractéristiqueNWPathMonitorReachability
Version minimaleiOS 12iOS 2
LangageSwift (Network)C (SystemConfiguration)
Types d’interfaceWi-Fi, Cellular, Ethernet, VPNWi-Fi, WWAN (générique)
isExpensiveOuiNon
AsynchroneGCD (dispatch queue)RunLoop
Interfaces multiplesOui (multipath)Non

Quand utiliser Reachability

Si votre application prend en charge iOS 11 et inférieur, Reachability reste la seule option. Pour les projets iOS 12+, il est recommandé d’utiliser directement NWPathMonitor — il s’intègre mieux avec le code Swift moderne, Combine et SwiftUI.

La migration de Reachability vers NWPathMonitor est simple : il suffit de remplacer les appels SCNetworkReachability par NWPathMonitor, en conservant la même logique de traitement. Une couche d’abstraction (NetworkMonitorProtocol) permettra de basculer entre les implémentations sans modifier la logique métier de l’application.

Foire aux questions

Quelle est la version minimale d’iOS requise pour NWPathMonitor ?

NWPathMonitor est disponible à partir de iOS 12.0, macOS 10.14, watchOS 5.0 et tvOS 12.0. Pour les projets prenant en charge des versions plus anciennes, utilisez Reachability de SystemConfiguration ou des bibliothèques d’encapsulation avec compilation conditionnelle via #available.

Quelle est la différence entre NWPath.Status.satisfied et unsatisfied ?

Satisfied signifie que le trafic peut passer par au moins une interface. Unsatisfied — aucune interface n’est disponible. L’état requiresConnection — le chemin nécessite l’établissement d’une connexion (par exemple, VPN non connecté) et le trafic ne peut temporairement pas passer.

Comment déterminer le type de réseau — Wi-Fi ou cellulaire ?

Utilisez la méthode usesInterfaceType sur NWPath : path.usesInterfaceType(.wifi) pour le Wi-Fi, path.usesInterfaceType(.cellular) pour les données cellulaires. La méthode renvoie true si le trafic actuel passe par le type d’interface spécifié.

Dois-je annuler NWPathMonitor lors du passage en arrière-plan ?

Il est recommandé de suspendre la surveillance en arrière-plan pour économiser la batterie. L’appel de monitor.cancel() dans applicationDidEnterBackground et le redémarrage de start dans applicationWillEnterForeground réduisent la consommation d’énergie. Utilisez Background Task pour les opérations critiques.

Comment gérer les portails captifs avec NWPathMonitor ?

NWPathMonitor peut afficher satisfied même avec un portail captif. Pour déterminer l’accès Internet réel, effectuez une requête HTTP vers un point de terminaison de confiance via NWConnection. Si une redirection se produit — le portail est actif et nécessite une autorisation dans un WebView.

Résumé

  • NWPathMonitor — une classe du framework Network pour surveiller le chemin réseau dans iOS 12+ avec prise en charge de GCD et Combine.
  • NWPath contient des informations complètes sur la connexion : statut, types d’interface, coûts, restrictions et passerelles.
  • La méthode start lance la surveillance sur la file spécifiée, pathUpdateHandler reçoit les mises à jour NWPath.
  • Les propriétés isExpensive et isConstrained permettent d’identifier les connexions facturées et restreintes.
  • NWPathMonitor a remplacé Reachability pour iOS 12+, offrant une API plus riche en Swift.
  • Le filtrage par type d’interface est implémenté via l’initialiseur avec le paramètre requiredInterfaceType.
  • Pour le fonctionnement en arrière-plan, la surveillance doit être suspendue et reprise lors du basculement entre premier plan et arrière-plan.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi