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 — 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 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.
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.
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()
}
}
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.
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 — 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).
| Xususiyat | Tur | Tavsif |
|---|---|---|
| status | NWPath.Status | Yo'lning joriy holati: satisfied, unsatisfied, requiresConnection |
| availableInterfaces | [NWInterface] | Barcha mavjud tarmoq interfeyslari ro'yxati |
| gateways | [NWEndpoint] | Marshrutlash uchun ishlatiladigan shlyuzlar ro'yxati |
| isExpensive | Bool | Agar ulanish tariflangan bo'lsa true (mobil ma'lumotlar, shaxsiy hotspot) |
| isConstrained | Bool | Agar ulanish tezlik bo'yicha cheklangan bo'lsa true (past ma'lumot rejimi) |
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.
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.
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
}
}
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 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.
| Xususiyat | NWPathMonitor | Reachability |
|---|---|---|
| Minimal versiya | iOS 12 | iOS 2 |
| Til | Swift (Network) | C (SystemConfiguration) |
| Interfeys turlari | Wi-Fi, Cellular, Ethernet, VPN | Wi-Fi, WWAN (umumiy) |
| isExpensive | Bor | Yo'q |
| Asinxronlik | GCD (dispatch queue) | RunLoop |
| Ko'p interfeys | Bor (multipath) | Yo'q |
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 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.
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.
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.
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 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
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.