Reachability: bu nima, tarmoq mavjudligini tekshirish kutubxonasi

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

Reachability — iOS va macOS uchun SystemConfiguration freymvorki asosida qurilgan, internet ulanishining mavjudligini tekshirish va uning o'zgarishlarini kuzatish imkonini beruvchi kutubxona. Apple Developer Documentation (2025) ga ko'ra, Reachability tarmoqni asinxron kuzatish uchun SCNetworkReachability dan foydalanadi. Reachability kutubxonasi uzoq vaqt davomida iOS loyihalari uchun standart bo'lib qoldi, to mahalliy NWPathMonitor paydo bo'lgunga qadar.

Asosiy

  • Reachability — iOS va macOS da tarmoq mavjudligini kuzatish uchun SystemConfiguration C-freymvorki ustidagi o'rovchi.
  • SCNetworkReachability — uzoq host yoki manzilning mavjudligini tekshiruvchi past darajadagi C-API.
  • Ulanish turlari — Reachability ilova harakatini moslashtirish uchun Wi-Fi va mobil ma'lumotlarni (WWAN) farqlaydi.
  • Bildirishnomalar — SCNetworkReachabilitySetCallback orqali kutubxona RunLoop yordamida tarmoq o'zgarishlariga obuna bo'ladi.
  • NWPathMonitor — iOS 12 dan boshlab mavjud bo'lgan va Apple tomonidan tavsiya etilgan Reachability ga zamonaviy alternativ.

Reachability nima?

Reachability — Apple dan tarmoq kuzatuvi uchun SystemConfiguration freymvorkidan foydalanishni namoyish etuvchi namuna kutubxona. Manba kodi Apple Developer Documentation da namuna sifatida nashr etilgan, ammo jamoa uni iOS loyihalarida ulanishni tekshirish uchun standart vosita sifatida qabul qilgan.

Kutubxona SCNetworkReachability — SystemConfiguration dan C funksiyasi asosida ishlaydi, u uzoq host yoki IP manzilning mavjudligini baholaydi. Reachability yaratilganda yo host nomi (masalan, google.com) yoki IP manzil ko'rsatiladi va kutubxona asinxron tekshiradi bu host qurilmaning joriy tarmoq interfeyslari orqali mavjudmi.

Reachability ning mashhurligi uning soddaligi bilan izohlanadi: shunchaki instansiya yaratish, NotificationCenter orqali bildirishnomalarga obuna bo'lish va kReachabilityChangedNotification ni tinglash kifoya. Bunga javoban ilova status oladi: NotReachable, ReachableViaWiFi yoki ReachableViaWWAN (mobil ma'lumotlar).

Kutubxona tarixi va statusi

Reachability birinchi marta iPhone OS 2 (2008) da SystemConfiguration freymvorki bilan birga paydo bo'ldi. O'n yil davomida iOS da tarmoq kuzatuvining yagona mahalliy usuli bo'ldi. iOS 12 va Network freymvorkining chiqarilishi bilan Apple NWPathMonitor ni almashtirish sifatida tavsiya qiladi, ammo Reachability hali ham qo'llab-quvvatlanadi.

Ko'plab uchinchi tomon o'rovchilari — AFNetworking, Alamofire, AshleyDodd/Reachability.swift — SCNetworkReachability ichki mexanizmidan foydalanadi. Bu kutubxonalar qulay Swift/Objective-C interfeysi, status memorizatsiyasi va thread-safe callbacklar qo'shadi, xuddi shu SystemConfiguration asosini saqlab qoladi.

Reachability ichki qanday ishlaydi

Reachability ning asosiy mexanizmi — belgilangan host uchun kuzatuv obyektini yaratuvchi SCNetworkReachabilityCreateWithName funksiyasi. So'ngra SCNetworkReachabilityGetFlags chaqiriladi — joriy tarmoq holati bilan SCNetworkReachabilityFlags bit maskasini qaytaruvchi sinxron tekshirish.

Asinxron kuzatish uchun SCNetworkReachabilitySetCallback ishlatiladi, u C qayta chaqiruv funksiyasini ro'yxatdan o'tkazadi. Callback joriy RunLoop da, host mavjudlik holati o'zgarganda bajariladi. Reachability bu C-callback ni Objective-C metodiga o'raydi va NotificationCenter orqali bildirishnoma yuboradi.

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

Tarmoq mavjudlik bayroqlari

SCNetworkReachabilityFlags — tarmoq holatini kodlovchi bit maskasi. kSCNetworkReachabilityFlagsReachable bayrog'i host mavjudligini ko'rsatadi. kSCNetworkReachabilityFlagsConnectionRequired — ulanish uchun aloqa o'rnatish talab qilinadi. Bayroqlar kombinatsiyasi ilova ma'lumot yuborishi mumkinligini aniqlaydi.

Qo'shimcha bayroqlar: kSCNetworkReachabilityFlagsIsWWAN — mobil tarmoq orqali ulanish (iOS), kSCNetworkReachabilityFlagsInterventionRequired — foydalanuvchi aralashuvi talab qilinadi (masalan, VPN uchun). Reachability interfeys turini aniqlash uchun bu bayroqlarni hisobga oladi.

Reachability dan foydalanish misollari

iOS ilovasida Reachability ning standart foydalanish namunasi instansiya yaratish, bildirishnomalarga obuna bo'lish va status o'zgarishiga reaksiyani o'z ichiga oladi. Quyidagi misol tarmoq o'zgarganda UI ni yangilash uchun NotificationCenter bilan integratsiyani ko'rsatadi.

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 orqali ulangan")
            case .cellular:
                print("Mobil tarmoq orqali ulangan")
            case .unavailable:
                print("Ulanish yo'q")
            }
        }
    }
}

So'rovdan oldin tarmoqni tekshirish

HTTP so'rovini bajarishdan oldin tarmoq mavjudligini sinxron tekshirish mumkin: reachability.connection != .unavailable. Bu so'rovning muvaffaqiyatini kafolatlamaydi (server mavjud bo'lmasligi mumkin), ammo oldindan muvaffaqiyatsiz so'rovlarning oldini oladi va UX ni yaxshilaydi — ilova oflayn rejimda spinner ko'rsatmaydi.

Aniqroq tekshirish uchun Reachability ni URLSession timeoutlari bilan birlashtiring. Agar Reachability reachable ko'rsatsa, ammo so'rov timeout vaqtida bajarilmasa — muammo server tomonda yoki captive portalda. Bunday holda foydalanuvchiga server mavjud emasligi haqida xabar ko'rsatish mumkin.

Reachability da ulanish turlari

Reachability uchta asosiy ulanish holatini farqlaydi: Wi-Fi, mobil ma'lumotlar (WWAN) va mavjud emas. WWAN barcha mobil aloqa turlarini o'z ichiga oladi — 2G, 3G, 4G/LTE, 5G. Kutubxona WWAN ichida tafsilot bermaydi, shuning uchun 4G va 5G ni farqlash uchun CoreTelephony talab qilinadi.

HolatSCNetwork bayrog'iTavsif
ReachableViaWiFiReachable + !IsWWANHostga chiqish bilan Wi-Fi tarmog'i orqali ulanish
ReachableViaWWANReachable + IsWWANMobil tarmoq orqali ulanish (2G-5G)
NotReachable!ReachableHech qanday interfeys orqali host mavjud emas
ConnectionRequiredReachable + ConnectionRequiredUlanish o'rnatish talab qilinadi (VPN, PPPoE)

Tarmoq turlariga ko'ra Reachability cheklovlari

Reachability Ethernet, VPN tunnellari yoki multipath ulanishlarni farqlamaydi — WWAN bo'lmagan barcha interfeyslar Wi-Fi sifatida tasniflanadi. Bu cheklov SystemConfiguration arxitekturasi bilan bog'liq bo'lib, u tarmoq interfeyslari haqida batafsil ma'lumot bermaydi asosiy tasnifdan tashqari.

Mobil aloqaning aniq turini (4G vs 5G) aniqlash uchun CoreTelephony dan CTTelephonyNetworkInfo talab qilinadi. Reachability ni CoreTelephony bilan birlashtirish ilovaga kontent sifatini tanlash imkonini beradi: 5G da 4K striming, 4G/LTE da HD, 3G da SD yoki faqat audio.

Reachability dan NWPathMonitor ga migratsiya

Apple iOS 12 dan boshlab barcha yangi loyihalarda Reachability ni NWPathMonitor bilan almashtirishni tavsiya qiladi. Asosiy sabab NWPathMonitor zamonaviy Network freymvorkining bir qismi bo'lib, Swift da yozilgan, Combine ni qo'llab-quvvatlaydi va C muvofiqligisiz tarmoq yo'li haqida batafsil ma'lumot beradi.

Migratsiya jarayoni SCNetworkReachability ni NWPathMonitor bilan almashtirish, NotificationCenter dan pathUpdateHandler closure yoki Combine publisher ga o'tishni o'z ichiga oladi. Tarmoq statusini qayta ishlash algoritmi va mantig'i bir xil qoladi — faqat kuzatuv API si o'zgaradi.

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

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

// NWPathMonitor yordamida zamonaviy implementatsiya
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()
    }
}

Migratsiya bo'yicha tavsiyalar

iOS 12+ asosiy qo'llab-quvvatlashiga ega loyihalar uchun Reachability ni to'liq NWPathMonitor bilan almashtiring. iOS 11 ni qo'llab-quvvatlovchi loyihalar uchun shartli kompilyatsiya #available(iOS 12, *) dan NWPathMonitor va Reachability bilan fallback sifatida foydalaning. Bu eski qurilmalarni qo'llab-quvvatlashni yo'qotmasdan bosqichma-bosqich migratsiya qilish imkonini beradi.

Migratsiyaning asosiy afzalligi tarmoq yo'lining tafsilotidir. NWPathMonitor faqat “mavjud/mavjud emas” deb xabar bermaydi, balki har bir interfeysning turini, ularning xarajatlarini, ustuvorligini, proxy va VPN qo'llab-quvvatlashini ham bildiradi. Bu dasturchiga ilova harakatini joriy tarmoq sharoitlariga moslashtirish uchun ko'proq ma'lumot beradi.

Tez-tez so'raladigan savollar

Reachability qaysi minimal iOS versiyasini qo'llab-quvvatlaydi?

SCNetworkReachability asosidagi Reachability iPhone OS 2 (iOS 2) dan boshlab mavjud. Kutubxona barcha iOS versiyalarida, shu jumladan joriy versiyalarda ishlaydi. Cheklovlar OT versiyasiga emas, balki ma'lumot tafsilotiga tegishli — eski versiyalarda 4G va 5G farqlanishi mavjud emas.

Reachability oddiy ping tekshiruvidan nimasi bilan farq qiladi?

Reachability paketlar yubormasdan tarmoq steki darajasida host mavjudligini baholovchi tizim xizmati SCNetworkReachability dan foydalanadi. Ping ICMP paketlarini yuboradi va trafik sarflaydi, shuningdek firewall tomonidan bloklanishi mumkin. Reachability tez-tez tekshirish uchun tezroq va xavfsizroq.

Reachability ni SwiftUI loyihalarida ishlatish mumkinmi?

Ha, Reachability SwiftUI da ObservableObject yoki Combine orqali ishlaydi. Uni NotificationCenter ga obuna bo'lgan sinfga o'rang va statusni @Published orqali nashr qiling. Yangi SwiftUI loyihalari uchun View ni reaktiv yangilash uchun Combine publisher bilan NWPathMonitor ni tavsiya qilamiz.

Reachability Wi-Fi ni mobil ma'lumotlardan qanday farqlaydi?

Reachability SCNetworkReachabilityFlags bit maskasidagi kSCNetworkReachabilityFlagsIsWWAN bayrog'ini tekshiradi. Bayroq o'rnatilgan bo'lsa — mobil tarmoq (WWAN) orqali ulanish, aks holda va host Reachable bo'lsa — Wi-Fi orqali. CoreTelephony siz turlarni farqlashning yagona usuli.

Nega Reachability mavjudlikni ko'rsatadi, ammo so'rovlar ishlamaydi?

SCNetworkReachability host mavjudligini tarmoq darajasida tekshiradi, ammo yuqori darajadagi protokollarning ishlashini kafolatlamaydi. Mumkin sabablar: captive portal, DNS blokadasi, proksi server yoki firewall. Reachability birinchi filtr, ammo haqiqiy HTTP so'rovini almashtirmaydi.

Xulosa

  • Reachability — SCNetworkReachability C-API orqali ishlaydigan, iOS tarmoq kuzatuvi uchun SystemConfiguration kutubxonasi.
  • Uch holat — Wi-Fi, mobil ma'lumotlar (WWAN) va mavjud emas — SCNetworkReachabilityFlags bit bayroqlari bilan aniqlanadi.
  • Asinxron bildirishnomalar SCNetworkReachabilitySetCallback orqali RunLoop va NotificationCenter bilan amalga oshiriladi.
  • Cheklovlar — Reachability 4G/5G, VPN, Ethernet ni farqlamaydi va trafik xarajatlari haqida ma'lumot bermaydi.
  • NWPathMonitor — iOS 12+ uchun Reachability ning zamonaviy o'rnini bosuvchi, tur, xarajatlar va multipath bilan batafsil NWPath taqdim etadi.
  • Migratsiya NetworkMonitorProtocol orqali mantigni saqlab, SCNetworkReachability ni NWPathMonitor bilan almashtirishni o'z ichiga oladi.
  • Reachability iOS 11 va undan pastini qo'llab-quvvatlovchi loyihalar yoki tez sinxron tekshirish uchun zarur bo'lib qoladi.

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