NWPathMonitor: bu nima, tarmoq kuzatuvi va iOS-da ishlash

Muallif: IT Sectr Nashr etilgan: 2026-03-10 O'qish vaqti: 9 daq

NWPathMonitor — iOS va macOS-da Network frameworkidagi qurilmaning tarmoq yo'li holatini kuzatish uchun sinf. Apple Developer Documentation (2025)-ga ko'ra, NWPathMonitor ilovaga tarmoq mavjudligini kuzatish, interfeys turini aniqlash va ulanish o'zgarishlariga reaksiya berish imkonini beradi. NWPathMonitor NWPath bilan qulay callback orqali ulanish turi, trafik xarajatlari va internet mavjudligi haqida ma'lumot beradi.

Asosiy fikrlar

  • NWPathMonitor — iOS va macOS-da asinxron tarmoq yo'lini kuzatish uchun Network framework sinfi.
  • NWPath tarmoq mavjudligi, interfeys turi (Wi-Fi, mobil ma'lumotlar, Ethernet) va xarajat holati haqida ma'lumotni o'z ichiga oladi.
  • start metodi belgilangan dispatch queue-da kuzatuvni boshlaydi, cancel metodi to'xtatadi.
  • pathUpdateHandler xususiyati — tarmoq yo'li holati har o'zgarishida chaqiriladigan closure.
  • NWPathMonitor requiredInterfaceType parametri orqali kerakli interfeys turi bo'yicha filtrlashni qo'llab-quvvatlaydi.

NWPathMonitor nima?

NWPathMonitor — Apple tomonidan iOS 12 va macOS 10.14 Mojave-da taqdim etilgan Network frameworkidagi sinfdir. U qurilmaning tarmoq yo'li — ilova trafigi o'tadigan tarmoq interfeyslari kombinatsiyasidagi o'zgarishlarni kuzatish uchun zamonaviy API taqdim etadi.

iOS 12 dan oldin tarmoq kuzatuvi uchun SystemConfiguration C-frameworkida qurilgan Reachability kutubxonasidan foydalanilgan. NWPathMonitor boyroq API, zamonaviy ulanish turlari (VPN, multipath, LTE, 5G) qo'llab-quvvatlashi va GCD bilan o'rnatilgan ishlashi bilan mahalliy Swift muqobilidir.

NWPathMonitor va Reachability o'rtasidagi asosiy farq — NWPath obyekti nafaqat ikkilik “mavjud/mavjud emas” holatini, balki yo'lning to'liq rasmini taqdim etadi: ishlatilgan interfeyslar, ularning ustuvorligi, xarajatlar, rouming holati va proksi va VPN imkoniyati. Dasturchi tarmoq so'rovlari haqida qaror qabul qilish uchun to'liq ma'lumot oladi.

Network frameworkining paydo bo'lish tarixi

Network frameworki past darajadagi C-API-larning — CFStream va BSD Sockets ning zamonaviy o'rnini bosuvchi sifatida paydo bo'ldi. U Apple-ning barcha platformalarida, jumladan watchOS va tvOS da tarmoq aloqasi uchun yagona interfeysni taqdim etadi. NWPathMonitor NWConnection, NWListener va NWBrowser bilan birga ushbu frameworkning bir qismidir.

Network frameworki Swift-da yozilgan va asinxron ishlov berish uchun GCD-dan foydalanadi. Bu NWPathMonitor callback-lari belgilangan dispatch queue-da bajariladi va ilovaning mavjud ko'p ipli arxitekturasi bilan qo'lda ip boshqaruvisiz integratsiyalashadi degani.

Ilovada NWPathMonitor-dan qanday foydalanish

NWPathMonitor dan foydalanish sinfning namunasini yaratish va pathUpdateHandler handlerni sozlash bilan boshlanadi. Keyin closure bajariladigan dispatch queue-ni ko'rsatgan holda start metodi chaqiriladi. Kuzatuvni to'xtatish resurslarni ham bo'shatadigan cancel metodi bilan amalga oshiriladi.

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("Tarmoq mavjud")
            } else {
                print("Tarmoq mavjud emas")
            }
        }
        monitor.start(on: queue)
    }

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

Interfeys turi bilan ishlash

NWPathMonitor faqat ma'lum bir interfeys turini kuzatish uchun sozlanishi mumkin. Buning uchun NWPathMonitor(requiredInterfaceType:) inizializatoridan NWInterface.InterfaceType parametri bilan — .wifi, .cellular, .wiredEthernet yoki .loopback foydalaniladi. Agar tur ko'rsatilmagan bo'lsa, kuzatuv barcha interfeyslar bo'yicha olib boriladi.

Amaliy misol: striming ilovasi faqat Wi-Fi-ni kuzatishi va foydalanuvchini mobil ma'lumotlarga o'tish haqida ogohlantirishi mumkin. NWPath da isConstrained va isExpensive tekshiruvi joriy ulanishning tariflangan yoki tezlik bo'yicha cheklanganligini aniqlash imkonini beradi.

Kuzatuvning hayotiy tsikli

Kuzatuv ilova ishga tushganda yoki oldingi planga chiqqanda boshlanishi va orqa planga o'tganda to'xtatilishi kerak. Butun ilova uchun bitta NWPathMonitor namunasini (singleton) yaratish va uni turli modullardan protokol yoki xizmat qatlami orqali ishlatish tavsiya etiladi.

NWPath xususiyatlari va imkoniyatlari

NWPath — pathUpdateHandler-ga uzatiladigan, joriy tarmoq yo'lining holatini tavsiflovchi obyekt. U tarmoq kuzatuvining ko'p stsenariylarini qamrab oluvchi beshta asosiy xususiyatga ega. NWPath.Status — uch holatli sanab o'tish: satisfied (mavjud), unsatisfied (mavjud emas) va requiresConnection (ulanish talab qilinadi).

XususiyatTurTavsif
statusNWPath.StatusYo'lning joriy holati: satisfied, unsatisfied, requiresConnection
availableInterfaces[NWInterface]Barcha mavjud tarmoq interfeyslari ro'yxati
gateways[NWEndpoint]Marshrutlash uchun ishlatiladigan shlyuzlar ro'yxati
isExpensiveBoolAgar ulanish tariflangan bo'lsa true (mobil ma'lumotlar, shaxsiy hotspot)
isConstrainedBoolAgar ulanish tezlik bo'yicha cheklangan bo'lsa true (past ma'lumot rejimi)

Xarajatlar va cheklovlarni tekshirish

isExpensive xususiyati — katta hajmdagi ma'lumotlar bilan ishlaydigan ilovalar uchun muhim bayroqdir. Agar isExpensive = true bo'lsa, ilova striming sifatini pasaytirishi, yangilanishlarni yuklab olishni kechiktirishi yoki foydalanuvchini ogohlantirishi kerak. isConstrained Low Data Mode rejimi yoqilganligini ko'rsatadi.

Internet mavjudligini (nafaqat tarmoqni) tekshirish uchun usesInterfaceType metodi ishlatiladi. Qurilma internetsiz Wi-Fi-ga ulangan bo'lsa — NWPath satisfied ko'rsatishi mumkin, ammo haqiqiy kirish yo'q. Bunday hollarda NWConnection orqali qo'shimcha tekshiruv talab qilinadi.

NWPathMonitor amalga oshirish misollari

Xarajatlar, interfeys turlarini qayta ishlash va publisher orqali ViewModel-ni xabardor qilish bilan rivojlangan NWPathMonitor amalga oshirilishini ko'rib chiqaylik. Misolda tarmoq holati o'zgarishida UI ni reaktiv yangilash uchun Combine framework ishlatilgan.

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

Kechiktirilgan harakat bilan tarmoq yo'qolishini boshqarish

Ulanish yo'qolganda nafaqat UI ni xabardor qilish, balki kechiktirilgan harakatlarni bajarish talab qilinishi mumkin — masalan, keyingi yuborish uchun so'rov qoralamasini saqlash. unsatisfied holatida operatsiyalarni to'playdigan va satisfied tiklanganda ularni yuboradigan kechiktirilgan so'rovlar navbatini amalga oshiring.

Bu vazifa uchun delegat bilan ReachabilityManager namunasi ideal mos keladi: NWPathMonitor menejerni xabardor qiladi, menejer navbat va UI ni yangilaydi. Status satisfied ga o'zgarganda navbat avtomatik tozalanadi va UI ulanishning tiklanganligi haqida ko'rsatma oladi.

NWPathMonitor vs Reachability

NWPathMonitor paydo bo'lishidan oldin iOS da tarmoq kuzatuvi uchun standart yechim SystemConfiguration da qurilgan Apple-ning Reachability kutubxonasi edi. Asosiy farqlar: Reachability C da SCNetworkReachability orqali ishlaydi, zamonaviy tarmoq turlarini qo'llab-quvvatlamaydi va faqat ikkilik mavjudlik javobini beradi.

NWPathMonitor bu cheklovlarni hal qiladi: Swift da yozilgan, VPN, multipath, 5G va LTE ni qo'llab-quvvatlaydi, har bir interfeys haqida batafsil ma'lumot beradi va GCD orqali asinxron ishlaydi. Reachability hali ham minimal iOS 11 va undan past qo'llab-quvvatlanadigan loyihalarda ishlatiladi.

XususiyatNWPathMonitorReachability
Minimal versiyaiOS 12iOS 2
TilSwift (Network)C (SystemConfiguration)
Interfeys turlariWi-Fi, Cellular, Ethernet, VPNWi-Fi, WWAN (umumiy)
isExpensiveBorYo'q
AsinxronlikGCD (dispatch queue)RunLoop
Ko'p interfeysBor (multipath)Yo'q

Reachability-dan qachon foydalanish

Agar ilovangiz iOS 11 va undan past versiyalarni qo'llab-quvvatlasa, Reachability yagona variant bo'lib qoladi. iOS 12+ loyihalari uchun darhol NWPathMonitor dan foydalanish tavsiya etiladi — u zamonaviy Swift kodi, Combine va SwiftUI bilan yaxshiroq integratsiyalanadi.

Reachability-dan NWPathMonitor-ga migratsiya oddiy: SCNetworkReachability chaqiruvlarini NWPathMonitor bilan almashtirish, bir xil ishlov berish mantiqini saqlash kifoya. Abstraktsiya qatlami (NetworkMonitorProtocol protokoli) ilovaning biznes mantiqini o'zgartirmasdan amalga oshirishlar o'rtasida almashish imkonini beradi.

Tez-tez so'raladigan savollar

NWPathMonitor uchun qanday minimal iOS versiyasi talab qilinadi?

NWPathMonitor iOS 12.0, macOS 10.14, watchOS 5.0 va tvOS 12.0 dan boshlab mavjud. Eski versiyalarni qo'llab-quvvatlaydigan loyihalar uchun SystemConfiguration dan Reachability yoki #available bilan shartli kompilyatsiya orqali o'rama kutubxonalardan foydalaning.

NWPath.Status.satisfied unsatisfied dan nima bilan farq qiladi?

Satisfied trafik kamida bitta interfeys orqali o'tishi mumkinligini anglatadi. Unsatisfied — hech qanday interfeys mavjud emas. requiresConnection holati — yo'l ulanishni o'rnatishni talab qiladi (masalan, VPN ulanmagan) va trafik vaqtincha o'tmaydi.

Tarmoq turini qanday aniqlash — Wi-Fi yoki mobil?

NWPath da usesInterfaceType metodidan foydalaning: path.usesInterfaceType(.wifi) Wi-Fi uchun, path.usesInterfaceType(.cellular) mobil ma'lumotlar uchun. Agar joriy trafik belgilangan interfeys turi orqali o'tsa, metod true qaytaradi.

Orqa planga o'tishda NWPathMonitor bekor qilinishi kerakmi?

Batareyani tejash uchun orqa planda kuzatuvni to'xtatish tavsiya etiladi. applicationDidEnterBackground da monitor.cancel() chaqiruvi va applicationWillEnterForeground da qayta start energiya sarfini kamaytiradi. Kritik operatsiyalar uchun Background Task dan foydalaning.

NWPathMonitor bilan captive portalni qanday boshqarish?

NWPathMonitor captive portalda ham satisfied ko'rsatishi mumkin. Internetga haqiqiy kirishni aniqlash uchun NWConnection orqali ishonchli endpoint-ga HTTP so'rovi ni bajaring. Agar redirect kelsa — portal faol, WebView da avtorizatsiya talab qilinadi.

Xulosa

  • NWPathMonitor — GCD va Combine qo'llab-quvvatlashi bilan iOS 12+ da tarmoq yo'lini kuzatish uchun Network framework sinfi.
  • NWPath ulanish haqida to'liq ma'lumotni o'z ichiga oladi: holat, interfeys turlari, xarajatlar, cheklovlar va shlyuzlar.
  • start metodi belgilangan navbatda kuzatuvni boshlaydi, pathUpdateHandler NWPath yangilanishlarini oladi.
  • isExpensive va isConstrained xususiyatlari tariflangan va cheklangan ulanishlarni aniqlash imkonini beradi.
  • NWPathMonitor iOS 12+ uchun Reachability o'rnini egallab, Swift da boyroq API taqdim etadi.
  • Tur bo'yicha filtrlash requiredInterfaceType parametri bilan inizializator orqali amalga oshiriladi.
  • Orqa plan ishi uchun kuzatuv foreground va background o'rtasida o'tishda to'xtatilishi va qayta boshlanishi kerak.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing