NWPathMonitor — iOS və macOS-da Network frameworkundan cihazın şəbəkə yolunun vəziyyətini izləmək üçün sinifdir. Apple Developer Documentation (2025)-a əsasən, NWPathMonitor proqrama şəbəkə əlçatanlığını izləməyə, interfeys növünü təyin etməyə və qoşulma dəyişikliklərinə reaksiya verməyə imkan verir. NWPathMonitor rahat NWPath callback vasitəsilə qoşulma növü, trafik xərcləri və internet mövcudluğu haqqında məlumat təqdim edir.
Əsas məqamlar
NWPathMonitor — Apple tərəfindən iOS 12 və macOS 10.14 Mojave-də təqdim edilən Network frameworkundan bir sinifdir. O, cihazın şəbəkə yolunda — proqram trafikinin keçdiyi şəbəkə interfeyslərinin kombinasiyasında dəyişiklikləri izləmək üçün müasir API təmin edir.
iOS 12-dən əvvəl şəbəkə monitorinqi üçün SystemConfiguration C-frameworku üzərində qurulmuş Reachability kitabxanası istifadə olunurdu. NWPathMonitor daha zəngin API, müasir qoşulma növləri (VPN, multipath, LTE, 5G) dəstəyi və GCD ilə daxili işləmə ilə yerli Swift alternatividir.
NWPathMonitor-un Reachability-dən əsas fərqi — NWPath obyenti sadəcə binary “əlçatandır/əlçatan deyil” statusu deyil, yolun tam şəklini təqdim edir: istifadə olunan interfeyslər, onların prioriteti, xərclər, rouminq statusu və proxy və VPN imkanı. Tərtibatçı şəbəkə sorğuları haqqında qərarlar qəbul etmək üçün hərtərəfli məlumat alır.
Network frameworku aşağı səviyyəli C-API-lərin — CFStream və BSD Sockets-in müasir əvəzedicisi kimi meydana çıxdı. O, Apple-ın bütün platformalarında, o cümlədən watchOS və tvOS-da şəbəkə əlaqəsi üçün vahid interfeys təmin edir. NWPathMonitor NWConnection, NWListener və NWBrowser ilə yanaşı bu frameworkun bir hissəsidir.
Network frameworku Swift-də yazılıb və asinxron emal üçün GCD-dən istifadə edir. Bu o deməkdir ki, NWPathMonitor callback-ləri göstərilən dispatch queue-də icra olunur və proqramın mövcud çoxiplik arxitekturası ilə əllə iplik idarəsi olmadan inteqrasiya edir.
NWPathMonitor istifadəsi sinfin instansiyasının yaradılması və pathUpdateHandler handlerinin konfiqurasiyası ilə başlayır. Sonra closure-un icra olunacağı dispatch queue-ni göstərməklə start metodu çağırılır. Monitorinqin dayandırılması resursları da boşaldan cancel metodu ilə həyata keçirilir.
import Network
class NetworkMonitor {
private let monitor = NWPathMonitor()
private let queue = DispatchQueue("monitor")
func startMonitoring() {
monitor.pathUpdateHandler = { path in
if path.status == .satisfied {
print("Şəbəkə mövcuddur")
} else {
print("Şəbəkə mövcud deyil")
}
}
monitor.start(on: queue)
}
func stopMonitoring() {
monitor.cancel()
}
}
NWPathMonitor yalnız müəyyən interfeys növünü izləmək üçün konfiqurasiya edilə bilər. Bunun üçün NWPathMonitor(requiredInterfaceType:) initləşdiricisi NWInterface.InterfaceType parametri ilə — .wifi, .cellular, .wiredEthernet və ya .loopback istifadə olunur. Növ göstərilməyibsə, monitorinq bütün interfeyslər üzrə aparılır.
Praktiki nümunə: striminq proqramı yalnız Wi-Fi-ı izləyə və istifadəçini mobil məlumata keçid barədə xəbərdar edə bilər. NWPath-də isConstrained və isExpensive yoxlanması cari qoşulmanın tarifləşdirilib-edilmədiyini və ya sürət baxımından məhdudlaşdırıldığını müəyyən etməyə imkan verir.
Monitorinq proqram başlayarkən və ya ön plana çıxarkən işə salınmalı və arxa plana keçərkən dayandırılmalıdır. Bütün proqram üçün bir NWPathMonitor instansiyası (singleton) yaratmaq və onu müxtəlif modullardan protokol və ya xidmət qatı vasitəsilə istifadə etmək tövsiyə olunur.
NWPath — pathUpdateHandler-ə ötürülən, cari şəbəkə yolunun vəziyyətini təsvir edən obyektdir. O, şəbəkə monitorinqi ssenarilərinin əksəriyyətini əhatə edən beş əsas xassəyə malikdir. NWPath.Status — üç vəziyyəti olan sadalama: satisfied (əlçatandır), unsatisfied (əlçatan deyil) və requiresConnection (qoşulma tələb olunur).
| Xassə | Tip | Təsvir |
|---|---|---|
| status | NWPath.Status | Yolun cari vəziyyəti: satisfied, unsatisfied, requiresConnection |
| availableInterfaces | [NWInterface] | Bütün mövcud şəbəkə interfeyslərinin siyahısı |
| gateways | [NWEndpoint] | Marşrutlaşdırma üçün istifadə olunan şlüzlərin siyahısı |
| isExpensive | Bool | Doğrudur, əgər qoşulma tarifləşdirilirsə (mobil məlumat, fərdi hotspot) |
| isConstrained | Bool | Doğrudur, əgər qoşulma sürət baxımından məhdudlaşdırılıbsa (aşağı məlumat rejimi) |
isExpensive xassəsi — böyük həcmdə məlumatla işləyən proqramlar üçün kritik əhəmiyyətli flag. isExpensive = true olarsa, proqram striminq keyfiyyətini aşağı salmalı, yeniləmə yükləmələrini təxirə salmalı və ya istifadəçini xəbərdar etməlidir. isConstrained Low Data Mode rejiminin aktiv olduğunu göstərir.
İnternet mövcudluğunu (sadəcə şəbəkəni deyil) yoxlamaq üçün usesInterfaceType metodu istifadə olunur. Cihaz internetsiz Wi-Fi-a qoşulubsa — NWPath satisfied göstərə bilər, lakin faktiki giriş yoxdur. Belə hallarda NWConnection vasitəsilə əlavə valideyasiya tələb olunur.
Xərclərin, interfeys növlərinin emalı və publisher vasitəsilə ViewModel-in xəbərdar edilməsi ilə təkmil NWPathMonitor tətbiqinə baxaq. Nümunədə şəbəkə vəziyyəti dəyişdikdə UI-nin reaktiv yenilənməsi üçün Combine framework istifadə olunur.
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
}
}
Qoşulma itkisi zamanı təkcə UI-ni xəbərdar etmək deyil, həm də gecikmiş hərəkətləri yerinə yetirmək tələb oluna bilər — məsələn, sonrakı göndərmə üçün sorğu qaralamasını saxlamaq. unsatisfied statusunda əməliyyatları toplayan və satisfied bərpa olunduqda onları göndərən gecikmiş sorğular növbəsi tətbiq edin.
Bu vəzifə üçün deleqat ilə ReachabilityManager nümunəsi ideal uyğun gəlir: NWPathMonitor meneceri xəbərdar edir, menecer növbəni və UI-ni yeniləyir. Status satisfied-ə dəyişdikdə növbə avtomatik olaraq təmizlənir və UI qoşulmanın bərpa edilməsi barədə göstəriş alır.
NWPathMonitor meydana çıxmazdan əvvəl iOS-da şəbəkə monitorinqi üçün standart həll SystemConfiguration üzərində qurulmuş Apple-ın Reachability kitabxanası idi (sənədləşmədən nümunə). Əsas fərqlər: Reachability C-də SCNetworkReachability vasitəsilə işləyir, müasir şəbəkə növlərini dəstəkləmir və yalnız binary əlçatanlıq cavabı verir.
NWPathMonitor bu məhdudiyyətləri həll edir: Swift-də yazılıb, VPN, multipath, 5G və LTE-ni dəstəkləyir, hər interfeys haqqında ətraflı məlumat təqdim edir və GCD vasitəsilə asinxron işləyir. Reachability hələ də minimal iOS 11 və aşağı dəstəyi olan layihələrdə istifadə olunur.
| Xüsusiyyət | NWPathMonitor | Reachability |
|---|---|---|
| Minimal versiya | iOS 12 | iOS 2 |
| Dil | Swift (Network) | C (SystemConfiguration) |
| İnterfeys növləri | Wi-Fi, Cellular, Ethernet, VPN | Wi-Fi, WWAN (ümumi) |
| isExpensive | Var | Yox |
| Asinxronluq | GCD (dispatch queue) | RunLoop |
| Çox interfeys | Var (multipath) | Yox |
Proqramınız iOS 11 və aşağısını dəstəkləyirsə, Reachability yeganə seçim olaraq qalır. iOS 12+ layihələri üçün dərhal NWPathMonitor istifadə etmək tövsiyə olunur — o, müasir Swift kodu, Combine və SwiftUI ilə daha yaxşı inteqrasiya edir.
Reachability-dən NWPathMonitor-a miqrasiya sadədir: SCNetworkReachability çağırışlarını NWPathMonitor ilə əvəz etmək, eyni emal məntiqini saxlamaq kifayətdir. Abstraksiya qatı (NetworkMonitorProtocol protokolu) proqramın biznes məntiqini dəyişmədən tətbiqlər arasında keçid etməyə imkan verəcək.
Tez-tez verilən suallar
NWPathMonitor iOS 12.0, macOS 10.14, watchOS 5.0 və tvOS 12.0-dan etibarən mövcuddur. Köhnə versiyaları dəstəkləyən layihələr üçün SystemConfiguration-dan Reachability və ya #available ilə şərti kompilasiya ilə sarma kitabxanalarından istifadə edin.
Satisfied o deməkdir ki, trafik ən azı bir interfeys vasitəsilə keçə bilər. Unsatisfied — heç bir interfeys mövcud deyil. requiresConnection vəziyyəti — yol qoşulmanın qurulmasını tələb edir (məsələn, VPN qoşulmayıb) və trafik müvəqqəti olaraq keçmir.
NWPath-də usesInterfaceType metodundan istifadə edin: path.usesInterfaceType(.wifi) Wi-Fi üçün, path.usesInterfaceType(.cellular) mobil məlumat üçün. Metod cari trafik göstərilən interfeys növündən keçirsə, true qaytarır.
Batareyaya qənaət etmək üçün arxa planda monitorinqi dayandırmaq tövsiyə olunur. applicationDidEnterBackground-da monitor.cancel() çağırışı və applicationWillEnterForeground-da yenidən start enerji istehlakını azaldır. Kritik əməliyyatlar üçün Background Task istifadə edin.
NWPathMonitor captiv portalında belə satisfied göstərə bilər. İnternetə real girişi müəyyən etmək üçün NWConnection vasitəsilə etibarlı endpoint-ə HTTP sorğusu yerinə yetirin. Redirect gəlirsə — portal aktivdir, WebView-də avtorizasiya tələb olunur.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun