NWPathMonitor: co to je, sledování sítě a práce v iOS

Autor: IT Sectr Publikováno: 2026-03-10 Doba čtení: 9 min

NWPathMonitor — třída z frameworku Network v iOS a macOS pro monitorování stavu síťové cesty zařízení. Podle Apple Developer Documentation (2025) umožňuje NWPathMonitor aplikaci sledovat dostupnost sítě, určovat typ rozhraní a reagovat na změny připojení. NWPathMonitor poskytuje informace o typu připojení, nákladech na provoz a dostupnosti internetu prostřednictvím pohodlného callbacku s NWPath.

Hlavní body

  • NWPathMonitor — třída frameworku Network pro asynchronní monitorování síťové cesty v iOS a macOS.
  • NWPath obsahuje informace o dostupnosti sítě, typu rozhraní (Wi-Fi, mobilní data, Ethernet) a stavu nákladů.
  • Metoda start spouští monitorování na zadané frontě dispatch queue, metoda cancel jej zastavuje.
  • Vlastnost pathUpdateHandler — closure, který je volán při každé změně stavu síťové cesty.
  • NWPathMonitor podporuje filtrování podle požadovaného typu rozhraní pomocí parametru requiredInterfaceType.

Co je NWPathMonitor?

NWPathMonitor — je třída z frameworku Network, představená společností Apple v iOS 12 a macOS 10.14 Mojave. Poskytuje moderní API pro sledování změn síťové cesty zařízení — kombinace síťových rozhraní, kterými prochází provoz aplikace.

Před iOS 12 se pro monitorování sítě používala knihovna Reachability, postavená na C-frameworku SystemConfiguration. NWPathMonitor je nativní Swift alternativa s bohatším API, podporou moderních typů připojení (VPN, multipath, LTE, 5G) a vestavěnou prací s GCD.

Klíčový rozdíl mezi NWPathMonitor a Reachability — objekt NWPath poskytuje nejen binární stav „dostupné/nedostupné“, ale úplný obraz cesty: použitá rozhraní, jejich prioritu, náklady, stav roamingu a možnost proxy a VPN. Vývojář získává vyčerpávající informace pro rozhodování o síťových požadavcích.

Historie vzniku frameworku Network

Framework Network se objevil jako moderní náhrada za nízkoúrovňová C-API — CFStream a BSD Sockets. Poskytuje jednotné rozhraní pro síťovou komunikaci na všech platformách Apple, včetně watchOS a tvOS. NWPathMonitor je součástí tohoto frameworku vedle NWConnection, NWListener a NWBrowser.

Framework Network je napsán v Swiftu a používá GCD pro asynchronní zpracování. To znamená, že callbacky NWPathMonitor jsou prováděny na zadané frontě dispatch queue, integrujíce se se stávající vícevláknovou architekturou aplikace bez ruční správy vláken.

Jak používat NWPathMonitor v aplikaci

Použití NWPathMonitor začíná vytvořením instance třídy a konfigurací handleru pathUpdateHandler. Poté je volána metoda start s určením fronty dispatch queue, na které bude closure prováděn. Zastavení monitorování se provádí metodou cancel, která také uvolňuje prostředky.

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("Síť dostupná")
            } else {
                print("Síť nedostupná")
            }
        }
        monitor.start(on: queue)
    }

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

Práce s typem rozhraní

NWPathMonitor lze nakonfigurovat tak, aby sledoval pouze určitý typ rozhraní. K tomu slouží inicializátor NWPathMonitor(requiredInterfaceType:) s parametrem NWInterface.InterfaceType — .wifi, .cellular, .wiredEthernet nebo .loopback. Pokud typ není uveden, monitorování probíhá pro všechna rozhraní.

Praktický příklad: aplikace pro streamování může sledovat pouze Wi-Fi a upozornit uživatele při přechodu na mobilní data. Kontrola isConstrained a isExpensive v NWPath umožňuje určit, zda je aktuální připojení zpoplatněno nebo omezeno rychlostí.

Životní cyklus monitorování

Monitorování by mělo být spuštěno při startu aplikace nebo při přechodu do popředí a zastaveno při přechodu do pozadí. Doporučuje se vytvořit jednu instanci NWPathMonitor pro celou aplikaci (singleton) a používat ji z různých modulů prostřednictvím protokolu nebo servisní vrstvy.

Vlastnosti a možnosti NWPath

NWPath — objekt předávaný do pathUpdateHandler, který popisuje aktuální stav síťové cesty. Obsahuje pět klíčových vlastností, které pokrývají většinu scénářů monitorování sítě. NWPath.Status — výčet se třemi stavy: satisfied (dostupný), unsatisfied (nedostupný) a requiresConnection (vyžaduje připojení).

VlastnostTypPopis
statusNWPath.StatusAktuální stav cesty: satisfied, unsatisfied, requiresConnection
availableInterfaces[NWInterface]Seznam všech dostupných síťových rozhraní
gateways[NWEndpoint]Seznam bran používaných pro směrování
isExpensiveBoolTrue, pokud je připojení zpoplatněno (mobilní data, osobní hotspot)
isConstrainedBoolTrue, pokud je připojení omezeno rychlostí (režim nízkých dat)

Kontrola nákladů a omezení

Vlastnost isExpensive — kriticky důležitý příznak pro aplikace pracující s velkým objemem dat. Pokud je isExpensive = true, aplikace by měla snížit kvalitu streamování, odložit stahování aktualizací nebo upozornit uživatele. isConstrained indikuje zapnutý režim Low Data Mode.

Pro kontrolu dostupnosti internetu (nejen sítě) se používá metoda usesInterfaceType. Pokud je zařízení připojeno k Wi-Fi bez internetu — NWPath může zobrazovat satisfied, ale skutečný přístup chybí. V takových případech je vyžadována dodatečná validace prostřednictvím NWConnection.

Příklady implementace NWPathMonitor

Podívejme se na pokročilou implementaci NWPathMonitor se zpracováním nákladů, typů rozhraní a notifikací ViewModel pomocí publisheru. V příkladu je použit Combine framework pro reaktivní aktualizaci UI při změně stavu sítě.

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

Zpracování ztráty sítě s odloženou akcí

Při ztrátě připojení může být vyžadováno nejen upozornění UI, ale také provedení odložených akcí — například uložení konceptu požadavku pro pozdější odeslání. Implementujte frontu odložených požadavků, která shromažďuje operace při stavu unsatisfied a odesílá je při obnovení satisfied.

Pro tento úkol se ideálně hodí vzor ReachabilityManager s delegátem: NWPathMonitor upozorní manažera, manažer aktualizuje frontu a UI. Při změně stavu na satisfied se fronta automaticky vyprázdní a UI obdrží indikaci obnovení připojení.

NWPathMonitor vs Reachability

Před příchodem NWPathMonitor bylo standardním řešením pro monitorování sítě v iOS knihovna Reachability od Apple (příklad z dokumentace), postavená na SystemConfiguration. Hlavní rozdíly: Reachability funguje přes SCNetworkReachability v C, nepodporuje moderní typy sítí a poskytuje pouze binární odpověď o dostupnosti.

NWPathMonitor tyto omezení řeší: je napsán v Swiftu, podporuje VPN, multipath, 5G a LTE, poskytuje detailní informace o každém rozhraní a pracuje asynchronně přes GCD. Reachability se stále používá v projektech s minimální podporou iOS 11 a nižších.

VlastnostNWPathMonitorReachability
Minimální verzeiOS 12iOS 2
JazykSwift (Network)C (SystemConfiguration)
Typy rozhraníWi-Fi, Cellular, Ethernet, VPNWi-Fi, WWAN (obecný)
isExpensiveAnoNe
AsynchronnostGCD (dispatch queue)RunLoop
Vícenásobná rozhraníAno (multipath)Ne

Kdy použít Reachability

Pokud vaše aplikace podporuje iOS 11 a nižší, Reachability zůstává jedinou možností. Pro projekty iOS 12+ se doporučuje okamžitě používat NWPathMonitor — lépe se integruje s moderním Swift kódem, Combine a SwiftUI.

Migrace z Reachability na NWPathMonitor je jednoduchá: stačí nahradit volání SCNetworkReachability na NWPathMonitor, při zachování stejné logiky zpracování. Vrstva abstrakce (protokol NetworkMonitorProtocol) umožní přepínání mezi implementacemi bez změny obchodní logiky aplikace.

Často kladené otázky

Jaká je minimální verze iOS potřebná pro NWPathMonitor?

NWPathMonitor je dostupný od iOS 12.0, macOS 10.14, watchOS 5.0 a tvOS 12.0. Pro projekty podporující starší verze použijte Reachability z SystemConfiguration nebo knihovny obálky s podmíněnou kompilací přes #available.

Jaký je rozdíl mezi NWPath.Status.satisfied a unsatisfied?

Satisfied znamená, že provoz může procházet přes alespoň jedno rozhraní. Unsatisfied — žádné rozhraní není dostupné. Stav requiresConnection — cesta vyžaduje navázání připojení (např. VPN není připojena) a provoz dočasně neprochází.

Jak určit typ sítě — Wi-Fi nebo mobilní?

Použijte metodu usesInterfaceType na NWPath: path.usesInterfaceType(.wifi) pro Wi-Fi, path.usesInterfaceType(.cellular) pro mobilní data. Metoda vrací true, pokud aktuální provoz prochází přes zadaný typ rozhraní.

Je potřeba zrušit NWPathMonitor při přechodu do pozadí?

Doporučuje se pozastavit monitorování na pozadí pro úsporu baterie. Volání monitor.cancel() v applicationDidEnterBackground a opětovné spuštění v applicationWillEnterForeground snižuje spotřebu energie. Pro kritické operace použijte Background Task.

Jak zacházet s captive portály pomocí NWPathMonitor?

NWPathMonitor může zobrazovat satisfied i u captive portálu. Pro určení skutečného přístupu k internetu proveďte HTTP požadavek na důvěryhodný endpoint přes NWConnection. Pokud přijde přesměrování — portál je aktivní, je vyžadována autorizace v WebView.

Shrnutí

  • NWPathMonitor — třída frameworku Network pro monitorování síťové cesty v iOS 12+ s podporou GCD a Combine.
  • NWPath obsahuje úplné informace o připojení: stav, typy rozhraní, náklady, omezení a brány.
  • Metoda start spouští monitorování na zadané frontě, pathUpdateHandler přijímá NWPath aktualizace.
  • Vlastnosti isExpensive a isConstrained umožňují určit zpoplatněná a omezená připojení.
  • NWPathMonitor nahradil Reachability pro iOS 12+ a poskytuje bohatší API v Swiftu.
  • Filtrování podle typu rozhraní se implementuje pomocí inicializátoru s parametrem requiredInterfaceType.
  • Pro práci na pozadí by mělo být monitorování pozastaveno a obnoveno při přechodu mezi popředím a pozadím.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také