Reachability: یہ کیا ہے، نیٹ ورک کی دستیابی کی جانچ کی لائبریری

مصنف: IT Sectr اشاعت: 2026-03-11 مطالعے کا وقت: 10 منٹ

Reachability ایک لائبریری ہے جو iOS اور macOS کے لیے SystemConfiguration فریم ورک پر بنائی گئی ہے، جو انٹرنیٹ کنکشن کی دستیابی کی جانچ اور اس کی تبدیلیوں کو ٹریک کرنے کی اجازت دیتی ہے۔ Apple Developer دستاویز (2025) کے مطابق، Reachability غیر ہم وقت ساز نیٹ ورک مانیٹرنگ کے لیے SCNetworkReachability استعمال کرتی ہے۔ Reachability لائبریری طویل عرصے تک iOS پروجیکٹس کے لیے معیار رہی جب تک کہ مقامی NWPathMonitor ظاہر نہیں ہوا۔

اہم نکات

  • Reachability — iOS اور macOS میں نیٹ ورک کی دستیابی کی نگرانی کے لیے C-فریم ورک SystemConfiguration پر ایک ریپر۔
  • SCNetworkReachability — ایک نچلی سطح کی C-API جو دور دراز میزبان یا پتے کی رسائی کی جانچ کرتی ہے۔
  • کنکشن کی اقسام — Reachability ایپلیکیشن کے رویے کو اپنانے کے لیے Wi-Fi اور سیلولر ڈیٹا (WWAN) میں فرق کرتی ہے۔
  • اطلاعات — SCNetworkReachabilitySetCallback کے ذریعے لائبریری RunLoop استعمال کرکے نیٹ ورک کی تبدیلیوں کو سبسکرائب کرتی ہے۔
  • NWPathMonitor — Reachability کا ایک جدید متبادل، iOS 12 سے دستیاب اور Apple کی طرف سے تجویز کردہ۔

Reachability کیا ہے؟

Reachability Apple کی ایک نمونہ لائبریری ہے جو نیٹ ورک مانیٹرنگ کے لیے SystemConfiguration فریم ورک کے استعمال کو ظاہر کرتی ہے۔ سورس کوڈ Apple Developer دستاویز میں ایک مثال کے طور پر شائع کیا گیا تھا، لیکن کمیونٹی نے اسے iOS پروجیکٹس میں کنیکٹیویٹی کی جانچ کے لیے معیاری آلے کے طور پر اپنا لیا۔

لائبریری SCNetworkReachability — SystemConfiguration سے ایک C-فنکشن جو دور دراز میزبان یا IP پتے کی رسائی کا جائزہ لیتا ہے — پر مبنی ہے۔ Reachability بناتے وقت، یا تو میزبان نام (مثلاً google.com) یا IP پتہ مخصوص کیا جاتا ہے، اور لائبریری غیر ہم وقت ساز طور پر جانچتی ہے کہ آیا یہ میزبان ڈیوائس کے موجودہ نیٹ ورک انٹرفیس کے ذریعے قابل رسائی ہے۔

Reachability کی مقبولیت اس کی سادگی کی وجہ سے ہے: بس ایک مثال بنائیں، NotificationCenter کے ذریعے اطلاعات کو سبسکرائب کریں، اور kReachabilityChangedNotification کو سنیں۔ جواب میں، ایپ کو ایک اسٹیٹس ملتا ہے: NotReachable، ReachableViaWiFi یا ReachableViaWWAN (سیلولر ڈیٹا)۔

لائبریری کی تاریخ اور حیثیت

Reachability پہلی بار iPhone OS 2 (2008) میں SystemConfiguration فریم ورک کے ساتھ ظاہر ہوئی۔ ایک دہائی تک یہ iOS میں نیٹ ورک کی حالت کی نگرانی کا واحد مقامی طریقہ تھی۔ iOS 12 اور Network فریم ورک کی ریلیز کے ساتھ، Apple NWPathMonitor کو متبادل کے طور پر تجویز کرتا ہے، لیکن Reachability اب بھی معاون ہے۔

بہت سے تیسرے فریق کے ریپر — AFNetworking، Alamofire، AshleyDodd/Reachability.swift — اندرونی SCNetworkReachability میکانزم استعمال کرتے ہیں۔ یہ لائبریریاں ایک آسان Swift/Objective-C انٹرفیس، اسٹیٹس میموئیزیشن، اور تھریڈ سیف کال بیکس شامل کرتی ہیں، اسی SystemConfiguration بنیاد کو برقرار رکھتے ہوئے۔

Reachability اندرونی طور پر کیسے کام کرتی ہے

Reachability کا بنیادی میکانزم SCNetworkReachabilityCreateWithName فنکشن ہے، جو مخصوص میزبان کے لیے ایک ٹریکنگ آبجیکٹ بناتا ہے۔ پھر SCNetworkReachabilityGetFlags کو کال کیا جاتا ہے — ایک ہم وقت ساز جانچ جو موجودہ نیٹ ورک کی حالت کے ساتھ SCNetworkReachabilityFlags کا بٹ ماسک لوٹاتی ہے۔

غیر ہم وقت ساز نگرانی کے لیے SCNetworkReachabilitySetCallback استعمال کیا جاتا ہے، جو ایک C کال بیک فنکشن رجسٹر کرتا ہے۔ جب میزبان کی رسائی کی حالت تبدیل ہوتی ہے تو کال بیک موجودہ RunLoop پر عملدرآمد ہوتا ہے۔ Reachability اس C-کال بیک کو ایک Objective-C طریقہ میں لپیٹتا ہے اور NotificationCenter کے ذریعے اطلاع بھیجتا ہے۔

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

نیٹ ورک رسائی کے جھنڈے

SCNetworkReachabilityFlags ایک بٹ ماسک ہے جو نیٹ ورک کی حالت کو انکوڈ کرتا ہے۔ kSCNetworkReachabilityFlagsReachable جھنڈا اشارہ کرتا ہے کہ میزبان قابل رسائی ہے۔ kSCNetworkReachabilityFlagsConnectionRequired — کنکشن قائم کرنے کی ضرورت ہے۔ جھنڈوں کا مجموعہ طے کرتا ہے کہ ایپلیکیشن ڈیٹا بھیج سکتی ہے یا نہیں۔

اضافی جھنڈے: kSCNetworkReachabilityFlagsIsWWAN — سیلولر نیٹ ورک (iOS) کے ذریعے کنکشن، kSCNetworkReachabilityFlagsInterventionRequired — صارف کی مداخلت ضروری (مثلاً VPN کے لیے)۔ Reachability انٹرفیس کی قسم کا تعین کرنے کے لیے ان جھنڈوں کو مدنظر رکھتی ہے۔

Reachability کے استعمال کی مثالیں

iOS ایپلیکیشن میں Reachability کے استعمال کا معیاری نمونہ ایک مثال بنانا، اطلاعات کو سبسکرائب کرنا، اور اسٹیٹس تبدیلیوں پر ردعمل دینا شامل ہے۔ نیچے دی گئی مثال نیٹ ورک تبدیل ہونے پر یوزر انٹرفیس کو اپ ڈیٹ کرنے کے لیے NotificationCenter کے ساتھ انضمام دکھاتی ہے۔

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 سے منسلک")
            case .cellular:
                print("سیلولر سے منسلک")
            case .unavailable:
                print("کوئی کنکشن نہیں")
            }
        }
    }
}

درخواست سے پہلے نیٹ ورک کی جانچ

HTTP درخواست کرنے سے پہلے، نیٹ ورک کی دستیابی کو ہم وقت ساز طور پر جانچا جا سکتا ہے: reachability.connection != .unavailable۔ یہ درخواست کی کامیابی کی ضمانت نہیں دیتا (سرور دستیاب نہیں ہو سکتا)، لیکن یقینی طور پر ناکام ہونے والی درخواستوں کو روکتا ہے اور UX کو بہتر بناتا ہے — ایپ آف لائن موڈ میں اسپنر نہیں دکھاتی۔

زیادہ درست جانچ کے لیے، Reachability کو URLSession ٹائم آؤٹ کے ساتھ ملائیں۔ اگر Reachability قابل رسائی دکھاتی ہے لیکن درخواست ٹائم آؤٹ میں ناکام ہوتی ہے — تو ممکنہ طور پر سرور سائیڈ مسئلہ یا کیپٹیو پورٹل ہے۔ اس صورت میں، صارف کو سرور کے دستیاب نہ ہونے کا پیغام دکھایا جا سکتا ہے۔

Reachability میں کنکشن کی اقسام

Reachability تین اہم کنکشن کی حالتوں میں فرق کرتی ہے: Wi-Fi، سیلولر ڈیٹا (WWAN)، اور دستیابی نہیں۔ WWAN میں سیلولر کنکشن کی تمام اقسام شامل ہیں — 2G، 3G، 4G/LTE، 5G۔ لائبریری WWAN کے اندر تفصیل فراہم نہیں کرتی، لہٰذا 4G اور 5G میں فرق کرنے کے لیے CoreTelephony کی ضرورت ہے۔

حالتSCNetwork جھنڈاتفصیل
ReachableViaWiFiReachable + !IsWWANمیزبان تک رسائی کے ساتھ Wi-Fi نیٹ ورک کے ذریعے کنکشن
ReachableViaWWANReachable + IsWWANسیلولر نیٹ ورک (2G-5G) کے ذریعے کنکشن
NotReachable!Reachableمیزبان کسی بھی انٹرفیس کے ذریعے قابل رسائی نہیں
ConnectionRequiredReachable + ConnectionRequiredکنکشن قائم کرنا ضروری (VPN, PPPoE)

نیٹ ورک کی اقسام کے لحاظ سے Reachability کی حدود

Reachability Ethernet، VPN ٹنل یا ملٹی پاتھ کنکشن میں فرق نہیں کرتی — تمام غیر WWAN انٹرفیس کو Wi-Fi کے طور پر درجہ بند کیا جاتا ہے۔ یہ حد SystemConfiguration آرکیٹیکچر کی وجہ سے ہے، جو بنیادی درجہ بندی سے آگے نیٹ ورک انٹرفیس کے بارے میں تفصیلی معلومات فراہم نہیں کرتا۔

مخصوص سیلولر کنکشن کی قسم (4G بمقابلہ 5G) کا تعین کرنے کے لیے CoreTelephony سے CTTelephonyNetworkInfo کی ضرورت ہے۔ Reachability کو CoreTelephony کے ساتھ ملانے سے ایپلیکیشن مواد کے معیار کا انتخاب کر سکتی ہے: 5G پر — 4K میں سٹریمنگ، 4G/LTE پر — HD، 3G پر — SD یا صرف آڈیو۔

Reachability سے NWPathMonitor میں منتقلی

Apple iOS 12 سے شروع ہونے والے تمام نئے پروجیکٹس میں Reachability کو NWPathMonitor سے تبدیل کرنے کی تجویز کرتا ہے۔ بنیادی وجہ یہ ہے کہ NWPathMonitor جدید Network فریم ورک کا حصہ ہے، Swift میں لکھا گیا ہے، Combine کو سپورٹ کرتا ہے، اور C مطابقت کے بغیر تفصیلی نیٹ ورک پاتھ کی معلومات فراہم کرتا ہے۔

منتقلی کے عمل میں SCNetworkReachability کو NWPathMonitor سے تبدیل کرنا، NotificationCenter سے pathUpdateHandler بندش یا Combine پبلشر پر سوئچ کرنا شامل ہے۔ نیٹ ورک اسٹیٹس ہینڈلنگ کا الگورتھم اور منطق وہی رہتی ہے — صرف مانیٹرنگ API تبدیل ہوتی ہے۔

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

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

// NWPathMonitor استعمال کرتے ہوئے جدید نفاذ
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()
    }
}

منتقلی کی سفارشات

iOS 12+ کی معاونت والے پروجیکٹس کے لیے، Reachability کو مکمل طور پر NWPathMonitor سے تبدیل کریں۔ iOS 11 کی معاونت کرنے والے پروجیکٹس کے لیے، NWPathMonitor کے ساتھ مشروط تالیف #available(iOS 12, *) استعمال کریں اور Reachability کو فال بیک کے طور پر استعمال کریں۔ یہ پرانے آلات کی حمایت کھوئے بتدریج منتقلی کی اجازت دیتا ہے۔

منتقلی کا بنیادی فائدہ نیٹ ورک پاتھ کی تفصیل ہے۔ NWPathMonitor صرف “قابل رسائی/ناقابل رسائی” ہی نہیں بلکہ ہر انٹرفیس کی قسم، ان کے اخراجات، ترجیح، پراکسی اور VPN سپورٹ بھی رپورٹ کرتا ہے۔ یہ ڈویلپر کو موجودہ نیٹ ورک حالات کے مطابق ایپلیکیشن کے رویے کو ڈھالنے کے لیے مزید ڈیٹا دیتا ہے۔

اکثر پوچھے گئے سوالات

Reachability کو سپورٹ کرنے والا کم سے کم iOS ورژن کیا ہے؟

SCNetworkReachability پر Reachability iPhone OS 2 (iOS 2) سے دستیاب ہے۔ لائبریری iOS کے تمام ورژنز پر کام کرتی ہے، بشمول موجودہ ورژنز۔ حدود OS ورژن سے نہیں بلکہ معلومات کی تفصیل سے متعلق ہیں — پرانے ورژن 4G اور 5G میں فرق نہیں کر سکتے۔

Reachability سادہ ping جانچ سے کیسے مختلف ہے؟

Reachability SCNetworkReachability استعمال کرتی ہے — ایک سسٹم سروس جو پیکٹ بھیجے بغیر نیٹ ورک اسٹیک کی سطح پر میزبان کی رسائی کا جائزہ لیتی ہے۔ Ping ICMP پیکٹ بھیجتا ہے اور ٹریفک استعمال کرتا ہے، اور فائر وال کے ذریعے بلاک بھی ہو سکتا ہے۔ بار بار جانچ کے لیے Reachability تیز اور محفوظ ہے۔

کیا SwiftUI پروجیکٹس میں Reachability استعمال کی جا سکتی ہے؟

ہاں، Reachability ObservableObject یا Combine کے ذریعے SwiftUI میں کام کرتی ہے۔ اسے NotificationCenter پر سبسکرائبڈ کلاس میں لپیٹیں اور @Published کے ذریعے اسٹیٹس شائع کریں۔ نئے SwiftUI پروجیکٹس کے لیے، ہم Reactive View اپ ڈیٹس کے لیے Combine پبلشر کے ساتھ NWPathMonitor تجویز کرتے ہیں۔

Reachability Wi-Fi بمقابلہ سیلولر ڈیٹا کیسے طے کرتی ہے؟

Reachability SCNetworkReachabilityFlags بٹ ماسک میں kSCNetworkReachabilityFlagsIsWWAN جھنڈا چیک کرتی ہے۔ اگر جھنڈا سیٹ ہے — کنکشن سیلولر نیٹ ورک (WWAN) کے ذریعے، اگر نہیں اور میزبان Reachable ہے — Wi-Fi کے ذریعے۔ CoreTelephony کے بغیر اقسام میں فرق کرنے کا یہی واحد طریقہ ہے۔

Reachability کنیکٹیویٹی کیوں دکھاتی ہے لیکن درخواستیں ناکام ہوتی ہیں؟

SCNetworkReachability نیٹ ورک کی سطح پر میزبان کی رسائی چیک کرتی ہے لیکن اعلیٰ سطح کے پروٹوکول کے آپریشن کی ضمانت نہیں دیتی۔ ممکنہ وجوہات: کیپٹیو پورٹل، DNS بلاکنگ، پراکسی سرور یا فائر وال۔ Reachability پہلا فلٹر ہے لیکن حقیقی HTTP درخواست کا متبادل نہیں۔

خلاصہ

  • Reachability — SCNetworkReachability C-API کے ذریعے کام کرنے والی، iOS نیٹ ورک مانیٹرنگ کے لیے SystemConfiguration پر مبنی لائبریری۔
  • تین حالتیں — Wi-Fi، سیلولر ڈیٹا (WWAN)، اور دستیابی نہیں — SCNetworkReachabilityFlags بٹ جھنڈوں کے ذریعے طے کی جاتی ہیں۔
  • غیر ہم وقت ساز اطلاعات RunLoop اور NotificationCenter کے ساتھ SCNetworkReachabilitySetCallback کے ذریعے نافذ کی جاتی ہیں۔
  • حدود — Reachability 4G/5G، VPN، Ethernet میں فرق نہیں کرتی اور ٹریفک کے اخراجات کی معلومات فراہم نہیں کرتی۔
  • NWPathMonitor — iOS 12+ کے لیے Reachability کا جدید متبادل، قسم، اخراجات اور ملٹی پاتھ کے ساتھ تفصیلی NWPath فراہم کرتا ہے۔
  • منتقلی میں NetworkMonitorProtocol کے ذریعے منطق کو محفوظ رکھتے ہوئے SCNetworkReachability کو NWPathMonitor سے تبدیل کرنا شامل ہے۔
  • Reachability iOS 11 اور اس سے نیچے کی حمایت کرنے والے پروجیکٹس یا تیز ہم وقت ساز جانچ کے لیے متعلقہ رہتی ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں