NWPathMonitor: wat is het, netwerkbewaking en werken in iOS

Auteur: IT Sectr Gepubliceerd: 2026-03-10 Leestijd: 9 min

NWPathMonitor — een klasse uit het Network-framework in iOS en macOS voor het bewaken van de netwerkpadstatus van het apparaat. Volgens Apple Developer Documentation (2025) stelt NWPathMonitor de app in staat om de netwerkbeschikbaarheid te volgen, het interfacetype te bepalen en te reageren op verbindingswijzigingen. NWPathMonitor biedt informatie over het verbindingstype, verkeerskosten en internetbeschikbaarheid via een handige callback met NWPath.

Belangrijkste punten

  • NWPathMonitor — een klasse van het Network-framework voor asynchrone bewaking van het netwerkpad in iOS en macOS.
  • NWPath bevat informatie over netwerkbeschikbaarheid, interfacetype (Wi-Fi, mobiele data, Ethernet) en koststatus.
  • Methode start start de monitoring op de opgegeven dispatch queue, methode cancel stopt deze.
  • Eigenschap pathUpdateHandler — closure die wordt aangeroepen bij elke wijziging van de netwerkpadstatus.
  • NWPathMonitor ondersteunt filteren op vereist interfacetype via de parameter requiredInterfaceType.

Wat is NWPathMonitor?

NWPathMonitor — is een klasse uit het Network-framework, geïntroduceerd door Apple in iOS 12 en macOS 10.14 Mojave. Het biedt een moderne API voor het volgen van wijzigingen in het netwerkpad van het apparaat — de combinatie van netwerkinterfaces waar het verkeer van de app doorheen gaat.

Vóór iOS 12 werd voor netwerkmonitoring de bibliotheek Reachability gebruikt, gebouwd op het C-framework SystemConfiguration. NWPathMonitor is een native Swift-alternatief met een rijkere API, ondersteuning voor moderne verbindingstypen (VPN, multipath, LTE, 5G) en ingebouwde integratie met GCD.

Het belangrijkste verschil tussen NWPathMonitor en Reachability — het NWPath-object biedt niet alleen een binaire status „beschikbaar/niet beschikbaar“, maar een volledig beeld van het pad: gebruikte interfaces, hun prioriteit, kosten, roamingstatus en de mogelijkheid van proxy en VPN. De ontwikkelaar krijgt uitgebreide informatie om beslissingen te nemen over netwerkverzoeken.

Geschiedenis van het Network-framework

Het Network-framework is ontstaan als moderne vervanging van laagwaardige C-API's — CFStream en BSD Sockets. Het biedt een uniforme interface voor netwerkcommunicatie op alle Apple-platforms, inclusief watchOS en tvOS. NWPathMonitor maakt deel uit van dit framework naast NWConnection, NWListener en NWBrowser.

Het Network-framework is geschreven in Swift en gebruikt GCD voor asynchrone verwerking. Dit betekent dat de callbacks van NWPathMonitor worden uitgevoerd op de opgegeven dispatch queue, waardoor ze integreren met de bestaande multi-threading architectuur van de app zonder handmatig threadbeheer.

NWPathMonitor gebruiken in de app

Het gebruik van NWPathMonitor begint met het maken van een instantie van de klasse en het configureren van de pathUpdateHandler. Vervolgens wordt de methode start aangeroepen met specificatie van de dispatch queue waarop de closure wordt uitgevoerd. Het stoppen van de monitoring gebeurt met de methode cancel, die ook bronnen vrijgeeft.

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("Netwerk beschikbaar")
            } else {
                print("Netwerk niet beschikbaar")
            }
        }
        monitor.start(on: queue)
    }

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

Werken met het interfacetype

NWPathMonitor kan worden geconfigureerd om alleen een specifiek interfacetype te volgen. Hiervoor wordt de initialisator NWPathMonitor(requiredInterfaceType:) gebruikt met de parameter NWInterface.InterfaceType — .wifi, .cellular, .wiredEthernet of .loopback. Als het type niet is opgegeven, wordt de monitoring voor alle interfaces uitgevoerd.

Praktisch voorbeeld: een streaming-app kan alleen Wi-Fi volgen en de gebruiker waarschuwen bij overschakeling naar mobiele data. Controle van isConstrained en isExpensive in NWPath maakt het mogelijk te bepalen of de huidige verbinding wordt getarifeerd of beperkt is in snelheid.

Levenscyclus van monitoring

Monitoring moet worden gestart bij het opstarten van de app of bij het naar de voorgrond komen en worden gestopt bij het naar de achtergrond gaan. Het wordt aanbevolen om één instantie van NWPathMonitor voor de hele app (singleton) te maken en deze vanuit verschillende modules te gebruiken via een protocol of servicelaag.

Eigenschappen en mogelijkheden van NWPath

NWPath — het object dat wordt doorgegeven aan pathUpdateHandler en de huidige status van het netwerkpad beschrijft. Het bevat vijf belangrijke eigenschappen die de meeste netwerkmonitoringscenario's dekken. NWPath.Status — een opsomming met drie toestanden: satisfied (beschikbaar), unsatisfied (niet beschikbaar) en requiresConnection (verbinding vereist).

EigenschapTypeBeschrijving
statusNWPath.StatusHuidige padstatus: satisfied, unsatisfied, requiresConnection
availableInterfaces[NWInterface]Lijst van alle beschikbare netwerkinterfaces
gateways[NWEndpoint]Lijst van gateways die worden gebruikt voor routering
isExpensiveBoolTrue als de verbinding wordt getarifeerd (mobiele data, persoonlijke hotspot)
isConstrainedBoolTrue als de verbinding is beperkt in snelheid (Low Data Mode)

Kosten en beperkingen controleren

De eigenschap isExpensive — een kritisch belangrijke vlag voor apps die met grote hoeveelheden data werken. Als isExpensive = true is, moet de app de streamingkwaliteit verlagen, het downloaden van updates uitstellen of de gebruiker waarschuwen. isConstrained geeft aan dat de Low Data Mode is ingeschakeld.

Voor het controleren van de internetbeschikbaarheid (niet alleen het netwerk) wordt de methode usesInterfaceType gebruikt. Als het apparaat is verbonden met Wi-Fi zonder internet — kan NWPath satisfied tonen, maar is er geen feitelijke toegang. In dergelijke gevallen is aanvullende validatie via NWConnection vereist.

Voorbeelden van NWPathMonitor-implementatie

Laten we een geavanceerde NWPathMonitor-implementatie bekijken met verwerking van kosten, interfacetypen en het melden van de ViewModel via een publisher. In het voorbeeld wordt Combine framework gebruikt voor reactieve UI-updates bij wijziging van de netwerkstatus.

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
    }
}

Netwerkverlies afhandelen met uitgestelde actie

Bij verlies van verbinding kan het nodig zijn niet alleen de UI te melden, maar ook uitgestelde acties uit te voeren — bijvoorbeeld een conceptverzoek opslaan voor latere verzending. Implementeer een wachtrij voor uitgestelde verzoeken die bewerkingen verzamelt bij de status unsatisfied en deze verzendt bij herstel van satisfied.

Voor deze taak is het patroon ReachabilityManager met delegate ideaal: NWPathMonitor meldt de manager, de manager werkt de wachtrij en UI bij. Bij wijziging van de status naar satisfied wordt de wachtrij automatisch geleegd en ontvangt de UI een indicatie van herstel van de verbinding.

NWPathMonitor vs Reachability

Vóór de komst van NWPathMonitor was de standaardoplossing voor netwerkmonitoring in iOS de Reachability-bibliotheek van Apple (voorbeeld uit documentatie), gebouwd op SystemConfiguration. De belangrijkste verschillen: Reachability werkt via SCNetworkReachability in C, ondersteunt geen moderne netwerktypen en geeft alleen een binair antwoord over beschikbaarheid.

NWPathMonitor lost deze beperkingen op: het is geschreven in Swift, ondersteunt VPN, multipath, 5G en LTE, biedt gedetailleerde informatie over elke interface en werkt asynchroon via GCD. Reachability wordt nog steeds gebruikt in projecten met minimale ondersteuning voor iOS 11 en lager.

KenmerkNWPathMonitorReachability
Minimale versieiOS 12iOS 2
TaalSwift (Network)C (SystemConfiguration)
InterfacetypenWi-Fi, Cellular, Ethernet, VPNWi-Fi, WWAN (algemeen)
isExpensiveJaNee
AsynchroniteitGCD (dispatch queue)RunLoop
Meerdere interfacesJa (multipath)Nee

Wanneer Reachability gebruiken

Als uw app iOS 11 en lager ondersteunt, blijft Reachability de enige optie. Voor iOS 12+ projecten wordt aanbevolen om direct NWPathMonitor te gebruiken — het integreert beter met moderne Swift-code, Combine en SwiftUI.

Migratie van Reachability naar NWPathMonitor is eenvoudig: vervang de SCNetworkReachability-aanroepen door NWPathMonitor en behoud dezelfde verwerkingslogica. Een abstractielaag (protocol NetworkMonitorProtocol) maakt het mogelijk om tussen implementaties te schakelen zonder de bedrijfslogica van de app te wijzigen.

Veelgestelde vragen

Wat is de minimale iOS-versie die vereist is voor NWPathMonitor?

NWPathMonitor is beschikbaar vanaf iOS 12.0, macOS 10.14, watchOS 5.0 en tvOS 12.0. Voor projecten die oudere versies ondersteunen, gebruikt u Reachability uit SystemConfiguration of wrapper-bibliotheken met voorwaardelijke compilatie via #available.

Wat is het verschil tussen NWPath.Status.satisfied en unsatisfied?

Satisfied betekent dat verkeer door ten minste één interface kan gaan. Unsatisfied — geen enkele interface is beschikbaar. De status requiresConnection — het pad vereist het tot stand brengen van een verbinding (bijvoorbeeld VPN is niet verbonden) en verkeer gaat tijdelijk niet door.

Hoe bepaal ik het netwerktype — Wi-Fi of mobiel?

Gebruik de methode usesInterfaceType op NWPath: path.usesInterfaceType(.wifi) voor Wi-Fi, path.usesInterfaceType(.cellular) voor mobiele data. De methode retourneert true als het huidige verkeer door het opgegeven interfacetype gaat.

Moet ik NWPathMonitor annuleren bij het naar de achtergrond gaan?

Het wordt aanbevolen om de monitoring op de achtergrond te pauzeren om de batterij te sparen. Het aanroepen van monitor.cancel() in applicationDidEnterBackground en het opnieuw starten in applicationWillEnterForeground vermindert het energieverbruik. Gebruik Background Task voor kritieke bewerkingen.

Hoe ga ik om met captive portals met NWPathMonitor?

NWPathMonitor kan satisfied tonen, zelfs bij een captive portal. Om de feitelijke internettoegang te bepalen, voert u een HTTP-verzoek naar een vertrouwd endpoint uit via NWConnection. Als er een redirect komt — is de portal actief en is autorisatie in WebView vereist.

Samenvatting

  • NWPathMonitor — een klasse van het Network-framework voor netwerkpadmonitoring in iOS 12+ met ondersteuning voor GCD en Combine.
  • NWPath bevat volledige informatie over de verbinding: status, interfacetypen, kosten, beperkingen en gateways.
  • Methode start start monitoring op de opgegeven wachtrij, pathUpdateHandler ontvangt NWPath-updates.
  • Eigenschappen isExpensive en isConstrained maken het mogelijk getarifeerde en beperkte verbindingen te bepalen.
  • NWPathMonitor heeft Reachability vervangen voor iOS 12+ en biedt een rijkere API in Swift.
  • Filteren op type interface wordt geïmplementeerd via de initialisator met de parameter requiredInterfaceType.
  • Voor achtergrondwerk moet de monitoring worden gepauzeerd en hervat bij het schakelen tussen foreground en background.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook