NWPathMonitor: шта је то, надгледање мреже и рад у iOS-у

Аутор: IT Sectr Објављено: 2026-03-10 Време читања: 9 мин

NWPathMonitor — класа из фрејмворка Network у iOS и macOS за праћење стања мрежног пута уређаја. Према Apple Developer Documentation (2025), NWPathMonitor омогућава апликацији да прати доступност мреже, одређује тип интерфејса и реагује на промене конекције. NWPathMonitor пружа информације о типу везе, трошковима саобраћаја и присуству интернета преко згодног callback-а са NWPath.

Главне тачке

  • NWPathMonitor — класа фрејмворка Network за асинхроно праћење мрежног пута у iOS и macOS.
  • NWPath садржи информације о доступности мреже, типу интерфејса (Wi-Fi, мобилни подаци, Ethernet) и статусу трошкова.
  • Метод start покреће праћење на наведеном реду dispatch queue, метод cancel га зауставља.
  • Својство pathUpdateHandler — closure који се позива при свакој промени стања мрежног пута.
  • NWPathMonitor подржава филтрирање по потребном типу интерфејса преко параметра requiredInterfaceType.

Шта је NWPathMonitor?

NWPathMonitor — је класа из фрејмворка Network, коју је представио Apple у iOS 12 и macOS 10.14 Mojave. Она пружа модеран API за праћење промена мрежног пута уређаја — комбинације мрежних интерфејса кроз које пролази саобраћај апликације.

Пре iOS 12 за праћење мреже коришћена је библиотека Reachability, изграђена на C-фрејмворку SystemConfiguration. NWPathMonitor је изворна Swift алтернатива са богатијим API-јем, подршком за савремене типове веза (VPN, multipath, LTE, 5G) и уграђеним радом са GCD.

Кључна разлика између NWPathMonitor и Reachability — објекат NWPath пружа не само бинарни статус „доступно/недоступно", већ потпуну слику пута: коришћене интерфејсе, њихов приоритет, трошкове, статус роуминга и могућност проксија и VPN. Програмер добија исцрпне информације за доношење одлука о мрежним захтевима.

Историја настанка фрејмворка Network

Фрејмворк Network се појавио као модерна замена за нисконивоске C-API — CFStream и BSD Sockets. Он пружа јединствени интерфејс за мрежну комуникацију на свим Apple платформама, укључујући watchOS и tvOS. NWPathMonitor је део овог фрејмворка поред NWConnection, NWListener и NWBrowser.

Фрејмворк Network је написан у Swift-у и користи GCD за асинхрону обраду. То значи да се callback-ови NWPathMonitor извршавају на наведеном dispatch queue-у, интегришући се са постојећом архитектуром вишенитности апликације без ручног управљања нитима.

Како користити NWPathMonitor у апликацији

Коришћење NWPathMonitor почиње креирањем инстанце класе и подешавањем handler-а pathUpdateHandler. Затим се позива метод start са навођењем dispatch queue-а на коме ће се извршавати closure. Заустављање праћења се врши методом cancel, која такође ослобађа ресурсе.

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("Мрежа доступна")
            } else {
                print("Мрежа недоступна")
            }
        }
        monitor.start(on: queue)
    }

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

Рад са типом интерфејса

NWPathMonitor се може конфигурисати да прати само одређени тип интерфејса. За то се користи иницијализатор NWPathMonitor(requiredInterfaceType:) са параметром NWInterface.InterfaceType — .wifi, .cellular, .wiredEthernet или .loopback. Ако тип није наведен, праћење се врши за све интерфејсе.

Практичан пример: апликација за стримовање може да прати само Wi-Fi и упозорава корисника при преласку на мобилне податке. Провера isConstrained и isExpensive у NWPath омогућава одређивање да ли је тренутна веза тарифирана или ограничена по брзини.

Животни циклус праћења

Праћење треба покренути при покретању апликације или изласку у предњи план и зауставити при одласку у позадину. Препоручује се креирање једне инстанце NWPathMonitor за целу апликацију (singleton) и коришћење из различитих модула преко протокола или сервисног слоја.

Својства и могућности NWPath

NWPath — објекат који се прослеђује у pathUpdateHandler и описује тренутно стање мрежног пута. Садржи пет кључних својстава која покривају већину сценарија праћења мреже. NWPath.Status — набрајање са три стања: satisfied (доступан), unsatisfied (недоступан) и requiresConnection (захтева везу).

СвојствоТипОпис
statusNWPath.StatusТренутно стање пута: satisfied, unsatisfied, requiresConnection
availableInterfaces[NWInterface]Листа свих доступних мрежних интерфејса
gateways[NWEndpoint]Листа пролаза који се користе за рутирање
isExpensiveBoolTrue ако је веза тарифирана (мобилни подаци, лични хот-спот)
isConstrainedBoolTrue ако је веза ограничена по брзини (режим ниских података)

Провера трошкова и ограничења

Својство isExpensive — критично важна заставица за апликације које раде са великим количинама података. Ако је isExpensive = true, апликација треба да смањи квалитет стримовања, одложи преузимање ажурирања или упозори корисника. isConstrained указује на укључени режим Low Data Mode.

За проверу доступности интернета (не само мреже) користи се метод usesInterfaceType. Ако је уређај повезан на Wi-Fi без интернета — NWPath може приказивати satisfied, али стварни приступ не постоји. У таквим случајевима потребна је додатна валидација кроз NWConnection.

Примери имплементације NWPathMonitor

Размотримо напредну имплементацију NWPathMonitor са обрадом трошкова, типова интерфејса и обавештавањем ViewModel-а преко publisher-а. У примеру се користи Combine framework за реактивно ажурирање UI-ја при промени стања мреже.

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

Обрада губитка мреже са одложеном акцијом

При губитку конекције може бити потребно не само обавестити UI, већ и извршити одложене радње — на пример, сачувати нацрт захтева за касније слање. Имплементирајте ред одложених захтева који акумулира операције при статусу unsatisfied и шаље их при обнављању satisfied.

За овај задатак идеално одговара образац ReachabilityManager са делегатом: NWPathMonitor обавештава менаџера, менаџер ажурира ред и UI. При промени статуса на satisfied ред се аутоматски празни, а UI добија индикацију обнављања конекције.

NWPathMonitor vs Reachability

Пре појаве NWPathMonitor, стандардно решење за праћење мреже у iOS-у била је библиотека Reachability од Apple-а (пример из документације), изграђена на SystemConfiguration. Главне разлике: Reachability ради преко SCNetworkReachability у C-у, не подржава савремене типове мрежа и даје само бинарни одговор о доступности.

NWPathMonitor решава ова ограничења: написан је у Swift-у, подржава VPN, multipath, 5G и LTE, пружа детаљне информације о сваком интерфејсу и ради асинхроно преко GCD-а. Reachability се још увек користи у пројектима са минималном подршком за iOS 11 и ниже.

КарактеристикаNWPathMonitorReachability
Минимална верзијаiOS 12iOS 2
ЈезикSwift (Network)C (SystemConfiguration)
Типови интерфејсаWi-Fi, Cellular, Ethernet, VPNWi-Fi, WWAN (општи)
isExpensiveИмаНема
АсинхроностGCD (dispatch queue)RunLoop
Више интерфејсаИма (multipath)Нема

Када користити Reachability

Ако ваша апликација подржава iOS 11 и ниже, Reachability остаје једина опција. За пројекте iOS 12+ препоручује се одмах коришћење NWPathMonitor — боље се интегрише са савременим Swift кодом, Combine и SwiftUI.

Миграција са Reachability на NWPathMonitor је једноставна: довољно је заменити позиве SCNetworkReachability са NWPathMonitor, задржавајући исту логику обраде. Слој апстракције (протокол NetworkMonitorProtocol) омогућиће пребацивање између имплементација без промене пословне логике апликације.

Често постављана питања

Која је минимална верзија iOS-а потребна за NWPathMonitor?

NWPathMonitor је доступан почев од iOS 12.0, macOS 10.14, watchOS 5.0 и tvOS 12.0. За пројекте који подржавају старије верзије, користите Reachability из SystemConfiguration или библиотеке омотаче са условном компилацијом преко #available.

Чиме се разликује NWPath.Status.satisfied од unsatisfied?

Satisfied значи да саобраћај може пролазити кроз бар један интерфејс. Unsatisfied — ниједан интерфејс није доступан. Стање requiresConnection — пут захтева успостављање везе (на пример, VPN није повезан), и саобраћај привремено не пролази.

Како одредити тип мреже — Wi-Fi или мобилна?

Користите метод usesInterfaceType на NWPath: path.usesInterfaceType(.wifi) за Wi-Fi, path.usesInterfaceType(.cellular) за мобилне податке. Метод враћа true ако тренутни саобраћај пролази кроз наведени тип интерфејса.

Да ли треба отказати NWPathMonitor при одласку у позадину?

Препоручује се заустављање праћења у позадини ради уштеде батерије. Позив monitor.cancel() у applicationDidEnterBackground и поновни start у applicationWillEnterForeground смањују потрошњу енергије. За критичне операције користите Background Task.

Како обрађивати каптивне портале са NWPathMonitor?

NWPathMonitor може показивати satisfied чак и код каптивног портала. За одређивање стварног приступа интернету извршите HTTP захтев ка поузданом endpoint-у преко NWConnection. Ако стигне редирект — портал је активан, потребна је ауторизација у WebView.

Закључак

  • NWPathMonitor — класа фрејмворка Network за праћење мрежног пута у iOS 12+ са подршком за GCD и Combine.
  • NWPath садржи потпуне информације о вези: статус, типове интерфејса, трошкове, ограничења и пролазе.
  • Метод start покреће праћење на наведеном реду, pathUpdateHandler прима NWPath ажурирања.
  • Својства isExpensive и isConstrained омогућавају одређивање тарифираних и ограничених веза.
  • NWPathMonitor је заменио Reachability за iOS 12+, пружајући богатији API у Swift-у.
  • Филтрирање по типу интерфејса се реализује кроз иницијализатор са параметром requiredInterfaceType.
  • За рад у позадини праћење треба заустављати и настављати при преласку између foreground и background.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође