NWPathMonitor — egy osztály a Network keretrendszerből iOS és macOS rendszeren az eszköz hálózati útvonalának állapotának figyelésére. A Apple Developer Documentation (2025) szerint az NWPathMonitor lehetővé teszi az alkalmazás számára a hálózat elérhetőségének nyomon követését, az interfész típusának meghatározását és a kapcsolati változásokra való reagálást. NWPathMonitor információt nyújt a kapcsolat típusáról, a forgalom költségeiről és az internet elérhetőségéről egy kényelmes callback segítségével az NWPath-tel.
Főbb pontok
NWPathMonitor — egy osztály a Network keretrendszerből, amelyet az Apple az iOS 12 és macOS 10.14 Mojave rendszerben vezetett be. Modern API-t biztosít az eszköz hálózati útvonalának — az alkalmazás forgalma által használt hálózati interfészek kombinációjának — változásainak nyomon követésére.
Az iOS 12 előtt a hálózat figyelésére a Reachability könyvtárat használták, amely a C-alapú SystemConfiguration keretrendszerre épült. Az NWPathMonitor egy natív Swift alternatíva gazdagabb API-val, modern kapcsolattípusok (VPN, multipath, LTE, 5G) támogatásával és beépített GCD-vel való munkával.
A legfontosabb különbség az NWPathMonitor és a Reachability között — az NWPath objektum nem csak egy bináris „elérhető/nem elérhető“ státuszt ad, hanem teljes képet nyújt az útvonalról: a használt interfészeket, azok prioritását, költségeket, barangolási státuszt és a proxy és VPN lehetőségét. A fejlesztő átfogó információkat kap a hálózati kérésekkel kapcsolatos döntések meghozatalához.
A Network keretrendszer az alacsony szintű C-API-k — CFStream és BSD Sockets — modern helyettesítőjeként jelent meg. Egységes interfészt biztosít a hálózati kommunikációhoz az Apple összes platformján, beleértve a watchOS-t és a tvOS-t is. Az NWPathMonitor ennek a keretrendszernek a része az NWConnection, NWListener és NWBrowser mellett.
A Network keretrendszer Swift-ben íródott és GCD-t használ az aszinkron feldolgozáshoz. Ez azt jelenti, hogy az NWPathMonitor callback-jei a megadott dispatch queue-n hajtódnak végre, integrálódva az alkalmazás meglévő többszálú architektúrájába manuális szálkezelés nélkül.
Az NWPathMonitor használata az osztály egy példányának létrehozásával és a pathUpdateHandler beállításával kezdődik. Ezután meghívásra kerül a start metódus a dispatch queue megadásával, amelyen a closure végrehajtódik. A figyelés leállítása a cancel metódussal történik, amely felszabadítja az erőforrásokat is.
import Network
class NetworkMonitor {
private let monitor = NWPathMonitor()
private let queue = DispatchQueue("monitor")
func startMonitoring() {
monitor.pathUpdateHandler = { path in
if path.status == .satisfied {
print("Hálózat elérhető")
} else {
print("Hálózat nem elérhető")
}
}
monitor.start(on: queue)
}
func stopMonitoring() {
monitor.cancel()
}
}
Az NWPathMonitor konfigurálható úgy, hogy csak egy adott interfész típust figyeljen. Ehhez a NWPathMonitor(requiredInterfaceType:) inicializátor használatos az NWInterface.InterfaceType paraméterrel — .wifi, .cellular, .wiredEthernet vagy .loopback. Ha a típus nincs megadva, a figyelés minden interfészre kiterjed.
Gyakorlati példa: egy streaming alkalmazás csak a Wi-Fi-t figyelheti, és figyelmeztetheti a felhasználót a mobil adatra váltáskor. Az isConstrained és isExpensive ellenőrzése NWPath-ben lehetővé teszi annak meghatározását, hogy az aktuális kapcsolat díjköteles-e vagy sebességkorlátozott-e.
A figyelést az alkalmazás indításakor vagy előtérbe kerüléskor kell elindítani, és háttérbe kerüléskor leállítani. Javasolt egyetlen NWPathMonitor példányt létrehozni a teljes alkalmazáshoz (singleton), és azt különböző modulokból protokollon vagy szolgáltatási rétegen keresztül használni.
Az NWPath — a pathUpdateHandler-nek átadott objektum, amely leírja a hálózati útvonal aktuális állapotát. Öt kulcsfontosságú tulajdonságot tartalmaz, amelyek a hálózatfigyelési forgatókönyvek többségét lefedik. NWPath.Status — egy felsorolás három állapottal: satisfied (elérhető), unsatisfied (nem elérhető) és requiresConnection (kapcsolat szükséges).
| Tulajdonság | Típus | Leírás |
|---|---|---|
| status | NWPath.Status | Az útvonal aktuális állapota: satisfied, unsatisfied, requiresConnection |
| availableInterfaces | [NWInterface] | Az összes elérhető hálózati interfész listája |
| gateways | [NWEndpoint] | Az útválasztáshoz használt átjárók listája |
| isExpensive | Bool | True, ha a kapcsolat díjköteles (mobil adat, személyes hotspot) |
| isConstrained | Bool | True, ha a kapcsolat sebességkorlátozott (Low Data Mode) |
Az isExpensive tulajdonság — kritikus fontosságú jelző a nagy adatmennyiséggel dolgozó alkalmazások számára. Ha isExpensive = true, az alkalmazásnak csökkentenie kell a streaming minőségét, el kell halasztania a frissítések letöltését, vagy figyelmeztetnie kell a felhasználót. Az isConstrained a Low Data Mode bekapcsolt állapotát jelzi.
Az internet elérhetőségének (nem csak a hálózatnak) ellenőrzéséhez a usesInterfaceType metódus használatos. Ha az eszköz internet nélküli Wi-Fi-hez csatlakozik — az NWPath satisfied-t mutathat, de a tényleges hozzáférés hiányzik. Ilyen esetekben további érvényesítés szükséges az NWConnection-en keresztül.
Nézzünk egy fejlett NWPathMonitor implementációt költségek, interfésztípusok kezelésével és a ViewModel értesítésével publisheren keresztül. A példában a Combine keretrendszer van használva a UI reaktív frissítéséhez a hálózati állapot változásakor.
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
}
}
Kapcsolat elvesztésekor nemcsak a UI értesítése lehet szükséges, hanem késleltetett műveletek végrehajtása is — például egy kérés piszkozatának mentése későbbi elküldéshez. Implementáljon egy késleltetett kérések sorát, amely összegyűjti a műveleteket unsatisfied státusznál, és elküldi őket a satisfied helyreállításakor.
Ehhez a feladathoz a ReachabilityManager delegátussal minta ideális: az NWPathMonitor értesíti a menedzsert, a menedzser frissíti a sort és a UI-t. Amikor a státusz satisfied-re változik, a sor automatikusan kiürül, és a UI jelzést kap a kapcsolat helyreállításáról.
Az NWPathMonitor megjelenése előtt a hálózatfigyelés szabványos megoldása iOS-ben az Apple Reachability könyvtára volt (példa a dokumentációból), amely a SystemConfiguration-re épült. A fő különbségek: a Reachability C-ben, SCNetworkReachability-n keresztül működik, nem támogatja a modern hálózati típusokat, és csak bináris választ ad az elérhetőségről.
Az NWPathMonitor megoldja ezeket a korlátozásokat: Swift-ben íródott, támogatja a VPN, multipath, 5G és LTE technológiákat, részletes információkat nyújt minden interfészről, és aszinkron módon, GCD-n keresztül működik. A Reachability-t még mindig használják olyan projektekben, amelyek minimális iOS 11 és alacsonyabb támogatást igényelnek.
| Jellemző | NWPathMonitor | Reachability |
|---|---|---|
| Minimális verzió | iOS 12 | iOS 2 |
| Nyelv | Swift (Network) | C (SystemConfiguration) |
| Interfész típusok | Wi-Fi, Cellular, Ethernet, VPN | Wi-Fi, WWAN (általános) |
| isExpensive | Van | Nincs |
| Aszinkronitás | GCD (dispatch queue) | RunLoop |
| Több interfész | Van (multipath) | Nincs |
Ha az alkalmazása támogatja az iOS 11 és alacsonyabb verziókat, a Reachability marad az egyetlen lehetőség. iOS 12+ projektekhez ajánlott azonnal NWPathMonitor-t használni — jobban integrálódik a modern Swift kóddal, Combine-nal és SwiftUI-val.
A Reachability-ről NWPathMonitor-ra való migráció egyszerű: elég az SCNetworkReachability hívásokat NWPathMonitor-ra cserélni, megtartva ugyanazt a feldolgozási logikát. Az absztrakciós réteg (NetworkMonitorProtocol protokoll) lehetővé teszi a megvalósítások közötti váltást az alkalmazás üzleti logikájának megváltoztatása nélkül.
Gyakran Ismételt Kérdések
Az NWPathMonitor iOS 12.0, macOS 10.14, watchOS 5.0 és tvOS 12.0 verziótól elérhető. Régebbi verziókat támogató projektekhez használja a Reachability-t a SystemConfiguration-ből vagy a wrapper könyvtárakat feltételes fordítás segítségével a #available-en keresztül.
Satisfied azt jelenti, hogy a forgalom legalább egy interfészen áthaladhat. Unsatisfied — egyetlen interfész sem elérhető. A requiresConnection állapot — az útvonal kapcsolat létesítését igényli (például a VPN nincs csatlakoztatva), és a forgalom ideiglenesen nem halad át.
Használja a usesInterfaceType metódust az NWPath-en: path.usesInterfaceType(.wifi) Wi-Fi-hez, path.usesInterfaceType(.cellular) mobil adathoz. A metódus true-t ad vissza, ha az aktuális forgalom a megadott interfész típuson halad át.
Ajánlott szüneteltetni a figyelést háttérben az akkumulátor kímélése érdekében. A monitor.cancel() hívása az applicationDidEnterBackground-ban és az újraindítás az applicationWillEnterForeground-ban csökkenti az energiafogyasztást. Kritikus műveletekhez használja a Background Task-ot.
Az NWPathMonitor satisfied státuszt mutathat még captive portál esetén is. A valós internet-hozzáférés meghatározásához hajtson végre egy HTTP kérést egy megbízható végponthoz az NWConnection-en keresztül. Ha átirányítás érkezik — a portál aktív, engedélyezés szükséges a WebView-ban.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is