Reachability: bu nədir, şəbəkənin əlçatanlığını yoxlama kitabxanası

Müəllif: IT Sectr Dərc olunub: 2026-03-11 Oxuma vaxtı: 10 dəq

Reachability — iOS və macOS üçün SystemConfiguration çərçivəsi əsasında qurulmuş, internet bağlantısının əlçatanlığını yoxlamağa və onun dəyişikliklərini izləməyə imkan verən kitabxanadır. Apple Developer Documentation (2025)-yə görə, Reachability şəbəkənin asinxron monitorinqi üçün SCNetworkReachability istifadə edir. Reachability kitabxanası uzun müddət iOS layihələri üçün standart olaraq qalmışdır, ta ki yerli NWPathMonitor meydana çıxana qədər.

Başlıca

  • Reachability — iOS və macOS-da şəbəkənin əlçatanlığını monitorinq etmək üçün C-çərçivəsi SystemConfiguration üzərində qapaqdır.
  • SCNetworkReachability — uzaq hostun və ya ünvanın əlçatanlığını yoxlayan aşağı səviyyəli C-API.
  • Bağlantı növləri — Reachability tətbiqin davranışını uyğullaşdırmaq üçün Wi-Fi və mobil məlumatları (WWAN) fərqləndirir.
  • Bildirişlər — SCNetworkReachabilitySetCallback vasitəsilə kitabxana RunLoop köməyi ilə şəbəkə dəyişikliklərinə abunə olur.
  • NWPathMonitor — iOS 12-dən etibarən mövcud olan və Apple tərəfindən tövsiyə edilən Reachability-ə müasir alternativdir.

Reachability nədir?

Reachability — şəbəkə monitorinqi üçün SystemConfiguration çərçivəsindən istifadəni nümayiş etdirən Apple-dan nümunə kitabxanadır. Mənbə kodu Apple Developer Documentation-da nümunə olaraq dərc edilmişdir, lakin icma onu iOS layihələrində bağlantı yoxlaması üçün standart alət kimi qəbul etmişdir.

Kitabxana SystemConfiguration-dan C funksiyası olan SCNetworkReachability əsasında işləyir və uzaq hostun və ya IP ünvanının əlçatanlığını qiymətləndirir. Reachability yaradılarkən ya host adı (məsələn, google.com) ya da IP ünvanı göstərilir və kitabxana asinxron olaraq yoxlayır ki, bu host cihazın cari şəbəkə interfeysləri vasitəsilə əlçatandırmı.

Reachability-in populyarlığı onun sadəliyi ilə izah olunur: sadəcə bir instansiya yaratmaq, NotificationCenter vasitəsilə bildirişlərə abunə olmaq və kReachabilityChangedNotification-u dinləmək kifayətdir. Cavab olaraq tətbiq status alır: NotReachable, ReachableViaWiFi və ya ReachableViaWWAN (mobil məlumatlar).

Kitabxananın tarixi və statusu

Reachability ilk dəfə iPhone OS 2-də (2008) SystemConfiguration çərçivəsi ilə birlikdə ortaya çıxdı. On il ərzinde iOS-da şəbəkə monitorinqinin yeganə yerli üsulu olmuşdur. iOS 12 və Network çərçivəsinin buraxılması ilə Apple NWPathMonitor-u əvəz olaraq tövsiyə edir, lakin Reachability hələ dəstəklənir.

Çoxsaylı üçüncü tərəf qapaqları — AFNetworking, Alamofire, AshleyDodd/Reachability.swift — SCNetworkReachability daxili mexanizmindən istifadə edir. Bu kitabxanalar rahat Swift/Objective-C interfeysi, status memoizasiyası və thread-safe callbacklər əlavə edir, eyni SystemConfiguration əsasını qoruyur.

Reachability daxili olaraq necə işləyir

Reachability-in əsas mexanizmi — müəyyən host üçün izləmə obyekti yaradan SCNetworkReachabilityCreateWithName funksiyasıdır. Sonra SCNetworkReachabilityGetFlags çağırılır — cari şəbəkə vəziyyəti ilə SCNetworkReachabilityFlags bit maskasını qaytaran sinxron yoxlama.

Asinxron monitorinq üçün C geri çağırış funksiyasını qeydiyyatdan keçirən SCNetworkReachabilitySetCallback istifadə olunur. Callback cari RunLoop-da, hostun əlçatanlıq vəziyyəti dəyişdikdə yerinə yetirilir. Reachability bu C-callback-ı Objective-C metoduna sarır və NotificationCenter vasitəsilə bildiriş göndərir.

swift
import SystemConfiguration

class Reachability {
    private var reachabilityRef: SCNetworkReachability?

    init?(hostname: String) {
        reachabilityRef = SCNetworkReachabilityCreateWithName(
            nil, hostname
        )
    }

    func checkReachability() -> Bool {
        var flags = SCNetworkReachabilityFlags()
        SCNetworkReachabilityGetFlags(
            reachabilityRef!, &flags
        )
        return isReachable(with: flags)
    }

    private func isReachable(with flags: SCNetworkReachabilityFlags) -> Bool {
        let reachable = flags.contains(.reachable)
        let connectionRequired = flags.contains(.connectionRequired)
        return reachable && !connectionRequired
    }
}

Şəbəkə əlçatanlıq bayraqları

SCNetworkReachabilityFlags — şəbəkə vəziyyətini kodlayan bit maskasıdır. kSCNetworkReachabilityFlagsReachable bayrağı hostun əlçatan olduğunu göstərir. kSCNetworkReachabilityFlagsConnectionRequired — bağlantı üçün əlaqə qurulması tələb olunur. Bayraqların kombinasiyası tətbiqin məlumat göndərə biləcəyini müəyyən edir.

Əlavə bayraqlar: kSCNetworkReachabilityFlagsIsWWAN — mobil şəbəkə üzərindən bağlantı (iOS), kSCNetworkReachabilityFlagsInterventionRequired — istifadəçi müdaxiləsi tələb olunur (məsələn, VPN üçün). Reachability interfeys növünü müəyyən etmək üçün bu bayraqları nəzərə alır.

Reachability istifadə nümunələri

iOS tətbiqində Reachability-in standart istifadə nümunəsi instansiya yaratmağı, bildirişlərə abunə olmağı və status dəyişikliyinə reaksiya verməyi əhatə edir. Aşağıdakı nümunə şəbəkə dəyişərkən UI-ni yeniləmək üçün NotificationCenter ilə inteqrasiyanı göstərir.

swift
import Reachability
import UIKit

class ViewController: UIViewController {
    var reachability: Reachability?

    override func viewDidLoad() {
        super.viewDidLoad()
        reachability = Reachability(hostname: "google.com")
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(reachabilityChanged),
            name: .reachabilityChanged,
            object: nil
        )
        reachability?.startNotifier()
    }

    @objc func reachabilityChanged(notification: Notification) {
        if let reachability = notification.object as? Reachability {
            switch reachability.connection {
            case .wifi:
                print("Wi-Fi vasitəsilə qoşuldu")
            case .cellular:
                print("Mobil şəbəkə vasitəsilə qoşuldu")
            case .unavailable:
                print("Bağlantı yoxdur")
            }
        }
    }
}

Sorğudan əvvəl şəbəkə yoxlaması

HTTP sorğusunu yerinə yetirməzdən əvvəl şəbəkənin əlçatanlığını sinxron yoxlamaq olar: reachability.connection != .unavailable. Bu sorğunun uğurunu təmin etmir (server əlçatan olmaya bilər), lakin əvvəlcədən uğursuz sorğuların qarşısını alır və UX-i yaxşılaşdırır — tətbiq oflayn rejimdə spinner göstərmir.

Daha dəqiq yoxlama üçün Reachability-i URLSession timeoutları ilə birləşdirin. Əgər Reachability əlçatanlıq göstərirsə, lakin sorğu timeout müddətində yerinə yetirilmirsə — problem yəqin ki, server tərəfində və ya captive portaldadır. Belə halda istifadəçiyə serverin əlçatan olmadığı barədə mesaj göstərmək olar.

Reachability-də bağlantı növləri

Reachability üç əsas bağlantı vəziyyətini fərqləndirir: Wi-Fi, mobil məlumatlar (WWAN) və əlçatan deyil. WWAN bütün mobil rabitə növlərini əhatə edir — 2G, 3G, 4G/LTE, 5G. Kitabxana WWAN daxilində təfərrüat vermir, buna görə 4G və 5G-ni fərqləndirmək üçün CoreTelephony tələb olunur.

VəziyyətSCNetwork bayrağıTəsvir
ReachableViaWiFiReachable + !IsWWANHost-a çıxışı olan Wi-Fi şəbəkəsi üzərindən bağlantı
ReachableViaWWANReachable + IsWWANMobil şəbəkə üzərindən bağlantı (2G-5G)
NotReachable!ReachableHost heç bir interfeys vasitəsilə əlçatan deyil
ConnectionRequiredReachable + ConnectionRequiredBağlantının qurulması tələb olunur (VPN, PPPoE)

Şəbəkə növlərinə görə Reachability məhdudiyyətləri

Reachability Ethernet, VPN tunelləri və ya multipath bağlantılarını fərqləndirmir — WWAN olmayan bütün interfeyslər Wi-Fi kimi təsnif edilir. Bu məhdudiyyət əsas təsnifatdan kənarda şəbəkə interfeysləri haqqında təfərrüatlı məlumat verməyən SystemConfiguration memarlığı ilə bağlıdır.

Mobil rabitənin konkret növünü (4G vs 5G) müəyyən etmək üçün CoreTelephony-dən CTTelephonyNetworkInfo tələb olunur. Reachability-i CoreTelephony ilə birləşdirmək tətbiqə məzmun keyfiyyətini seçməyə imkan verir: 5G-də 4K striminq, 4G/LTE-də HD, 3G-də SD və ya yalnız audio.

Reachability-dən NWPathMonitor-a miqrasiya

Apple iOS 12-dən başlayaraq bütün yeni layihələrdə Reachability-in NWPathMonitor ilə əvəz edilməsini tövsiyə edir. Əsas səbəb NWPathMonitor-un müasir Network çərçivəsinin bir hissəsi olması, Swift-də yazılması, Combine-i dəstəkləməsi və C uyğunluğu olmadan şəbəkə yolu haqqında təfərrüatlı məlumat verməsidir.

Miqrasiya prosesi SCNetworkReachability-in NWPathMonitor ilə əvəz edilməsini, NotificationCenter-dən pathUpdateHandler closure və ya Combine publisher-a keçidi əhatə edir. Şəbəkə statusunun emal alqoritmi və məntiqi eyni qalır — yalnız monitorinq API-si dəyişir.

swift
protocol NetworkMonitorProtocol {
    var isReachable: Bool { get }
    var connectionType: ConnectionType { get }
    func startMonitoring()
    func stopMonitoring()
}

enum ConnectionType {
    case wifi, cellular, ethernet, unavailable
}

// NWPathMonitor istifadə edən müasir tətbiq
class ModernNetworkMonitor: NetworkMonitorProtocol {
    private let monitor = NWPathMonitor()
    private let queue = DispatchQueue("Network")
    private var currentPath: NWPath?

    var isReachable: Bool {
        currentPath?.status == .satisfied
    }

    func startMonitoring() {
        monitor.pathUpdateHandler = { [weak self] path in
            self?.currentPath = path
        }
        monitor.start(on: queue)
    }

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

Miqrasiya tövsiyələri

iOS 12+ əsas dəstəyi olan layihələr üçün Reachability-i tamamilə NWPathMonitor ilə əvəz edin. iOS 11-i dəstəkləyən layihələr üçün NWPathMonitor və Reachability ilə şərti kompilasiyadan #available(iOS 12, *) fallback kimi istifadə edin. Bu, köhnə cihazların dəstəyini itirmədən tədricən miqrasiya etməyə imkan verir.

Miqrasiyanın əsas üstünlüyü şəbəkə yolunun təfərrüatıdır. NWPathMonitor sadəcə „əlçatan/əlçatan deyil” deyil, həm də hər bir interfeysin növünü, onların xərclərini, prioritetini, proxy və VPN dəstəyini bildirir. Bu, tərtibatçıya tətbiqin davranışını cari şəbəkə şəraitinə uyğullaşdırmaq üçün daha çox məlumat verir.

Tez-tez verilən suallar

Reachability hansı minimum iOS versiyasını dəstəkləyir?

SCNetworkReachability əsasında Reachability iPhone OS 2 (iOS 2)-dən etibarən mövcuddur. Kitabxana bütün iOS versiyalarında, o cümlədən cari versiyalarda işləyir. Məhdudiyyətlər ƏS versiyasına deyil, məlumat təfərrüatına aiddir — köhnə versiyalarda 4G və 5G fərqləndirməsi yoxdur.

Reachability sadəcə ping yoxlamasından nə ilə fərqlənir?

Reachability paketlər göndərmədən şəbəkə steki səviyyəsində hostun əlçatanlığını qiymətləndirən sistem xidməti olan SCNetworkReachability-dən istifadə edir. Ping ICMP paketləri göndərir və trafik sərf edir, həmçinin firewall tərəfindən bloklana bilər. Reachability tez-tez yoxlama üçün daha sürətli və təhlükəsizdir.

Reachability SwiftUI layihələrində istifadə edilə bilərmi?

Bəli, Reachability ObservableObject və ya Combine vasitəsilə SwiftUI-də işləyir. Onu NotificationCenter-ə abunə olan sinfə sarın və statusu @Published vasitəsilə dərc edin. Yeni SwiftUI layihələri üçün View-in reaktiv yenilənməsi üçün Combine publisher ilə NWPathMonitor-u tövsiyə edirik.

Reachability Wi-Fi vs mobil məlumatları necə müəyyən edir?

Reachability SCNetworkReachabilityFlags bit maskasında kSCNetworkReachabilityFlagsIsWWAN bayrağını yoxlayır. Bayraq qurulubsa — bağlantı mobil şəbəkə (WWAN) üzərindəndir, yox və host Reachable-dirsə — Wi-Fi üzərindən. CoreTelephony olmadan növləri fərqləndirməyin yeganə yoludur.

Niyə Reachability əlçatanlıq göstərir, amma sorğular işləmir?

SCNetworkReachability hostun şəbəkə səviyyəsində əlçatanlığını yoxlayır, lakin yuxarı səviyyəli protokolların işləməsinə zəmanət vermir. Mümkün səbəblər: captive portal, DNS blokadası, proksi server və ya firewall. Reachability ilk filtrdir, lakin real HTTP sorğusunu əvəz etmir.

Xülasə

  • Reachability — SCNetworkReachability C-API vasitəsilə işləyən, iOS şəbəkə monitorinqi üçün SystemConfiguration kitabxanası.
  • Üç vəziyyət — Wi-Fi, mobil məlumatlar (WWAN) və əlçatan deyil — SCNetworkReachabilityFlags bit bayraqları ilə müəyyən edilir.
  • Asinxron bildirişlər SCNetworkReachabilitySetCallback vasitəsilə RunLoop və NotificationCenter ilə həyata keçirilir.
  • Məhdudiyyətlər — Reachability 4G/5G, VPN, Ethernet-i fərqləndirmir və trafik xərcləri haqqında məlumat vermir.
  • NWPathMonitor — iOS 12+ üçün Reachability-in müasir əvəzi, növü, xərcləri və multipath ilə təfərrüatlı NWPath təqdim edir.
  • Miqrasiya SCNetworkReachability-in NWPathMonitor ilə əvəz edilməsini NetworkMonitorProtocol vasitəsilə məntiqi qorumaqla əhatə edir.
  • Reachability iOS 11 və aşağısını dəstəkləyən layihələr və ya sürətli sinxron yoxlama üçün tələb olunur.

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.

Layihəni müzakirə et

Həm də oxuyun