Reachability एक लाइब्रेरी है जो iOS और macOS के लिए SystemConfiguration फ्रेमवर्क पर बनी है, जो इंटरनेट कनेक्शन की उपलब्धता की जाँच करने और उसके परिवर्तनों को ट्रैक करने की सुविधा देती है। Apple Developer दस्तावेज़ (2025) के अनुसार, Reachability नेटवर्क की अतुल्यकालिक निगरानी के लिए SCNetworkReachability का उपयोग करती है। Reachability लाइब्रेरी लंबे समय तक iOS प्रोजेक्ट्स के लिए मानक बनी रही जब तक कि नेटिव NWPathMonitor प्रकट नहीं हुआ।
मुख्य बिंदु
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 का मुख्य तंत्र SCNetworkReachabilityCreateWithName फ़ंक्शन है, जो निर्दिष्ट होस्ट के लिए एक ट्रैकिंग ऑब्जेक्ट बनाता है। फिर SCNetworkReachabilityGetFlags कहा जाता है — एक तुल्यकालिक जाँच जो वर्तमान नेटवर्क स्थिति के साथ SCNetworkReachabilityFlags की बिटमास्क लौटाती है।
अतुल्यकालिक निगरानी के लिए SCNetworkReachabilitySetCallback का उपयोग किया जाता है, जो एक C कॉलबैक फ़ंक्शन पंजीकृत करता है। जब होस्ट की पहुँच स्थिति बदलती है तो कॉलबैक वर्तमान RunLoop पर निष्पादित होता है। Reachability इस C-कॉलबैक को Objective-C विधि में लपेटता है और NotificationCenter के माध्यम से सूचना भेजता है।
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 इंटरफ़ेस प्रकार निर्धारित करने के लिए इन फ़्लैग को ध्यान में रखती है।
iOS एप्लिकेशन में Reachability के उपयोग का मानक पैटर्न एक इंस्टेंस बनाना, सूचनाओं की सदस्यता लेना और स्थिति परिवर्तनों पर प्रतिक्रिया देना शामिल करता है। नीचे दिया गया उदाहरण नेटवर्क बदलने पर UI को अपडेट करने के लिए NotificationCenter के साथ एकीकरण दिखाता है।
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 तीन मुख्य कनेक्शन स्थितियों में अंतर करती है: Wi-Fi, सेल्युलर डेटा (WWAN) और अनुपलब्धता। WWAN में सभी प्रकार के सेल्युलर कनेक्शन शामिल हैं — 2G, 3G, 4G/LTE, 5G। लाइब्रेरी WWAN के भीतर विवरण प्रदान नहीं करती है, इसलिए 4G और 5G में अंतर करने के लिए CoreTelephony की आवश्यकता होती है।
| स्थिति | SCNetwork फ़्लैग | विवरण |
|---|---|---|
| ReachableViaWiFi | Reachable + !IsWWAN | होस्ट तक पहुँच के साथ Wi-Fi नेटवर्क के माध्यम से कनेक्शन |
| ReachableViaWWAN | Reachable + IsWWAN | सेल्युलर नेटवर्क (2G-5G) के माध्यम से कनेक्शन |
| NotReachable | !Reachable | होस्ट किसी भी इंटरफ़ेस के माध्यम से पहुँच योग्य नहीं है |
| ConnectionRequired | Reachable + ConnectionRequired | कनेक्शन स्थापना आवश्यक (VPN, PPPoE) |
Reachability Ethernet, VPN टनल या मल्टीपथ कनेक्शन में अंतर नहीं करती — सभी गैर-WWAN इंटरफ़ेस को Wi-Fi के रूप में वर्गीकृत किया जाता है। यह सीमा SystemConfiguration आर्किटेक्चर के कारण है, जो मूल वर्गीकरण से परे नेटवर्क इंटरफ़ेस के बारे में विस्तृत जानकारी प्रदान नहीं करता है।
विशिष्ट सेल्युलर कनेक्शन प्रकार (4G बनाम 5G) निर्धारित करने के लिए CoreTelephony से CTTelephonyNetworkInfo की आवश्यकता होती है। Reachability को CoreTelephony के साथ संयोजित करने से एप्लिकेशन सामग्री गुणवत्ता चुन सकता है: 5G पर — 4K में स्ट्रीमिंग, 4G/LTE पर — HD, 3G पर — SD या केवल ऑडियो।
Apple iOS 12 से शुरू होने वाली सभी नई परियोजनाओं में Reachability को NWPathMonitor से बदलने की अनुशंसा करता है। मुख्य कारण यह है कि NWPathMonitor आधुनिक Network फ्रेमवर्क का हिस्सा है, Swift में लिखा गया है, Combine का समर्थन करता है, और C-संगतता के बिना विस्तृत नेटवर्क पथ जानकारी प्रदान करता है।
माइग्रेशन प्रक्रिया में SCNetworkReachability को NWPathMonitor से बदलना, NotificationCenter से pathUpdateHandler क्लोजर या Combine पब्लिशर पर स्विच करना शामिल है। नेटवर्क स्थिति की हैंडलिंग के लिए एल्गोरिदम और तर्क वही रहता है — केवल निगरानी API बदलता है।
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 केवल “pहुँच योग्य/पहुँच योग्य नहीं” ही नहीं बल्कि प्रत्येक इंटरफ़ेस का प्रकार, उनकी लागत, प्राथमिकता, प्रॉक्सी और VPN समर्थन भी रिपोर्ट करता है। यह डेवलपर को वर्तमान नेटवर्क स्थितियों के अनुसार एप्लिकेशन व्यवहार को अनुकूलित करने के लिए अधिक डेटा देता है।
अक्सर पूछे जाने वाले प्रश्न
SCNetworkReachability पर Reachability iPhone OS 2 (iOS 2) से शुरू होकर उपलब्ध है। लाइब्रेरी iOS के सभी संस्करणों पर काम करती है, जिसमें वर्तमान संस्करण भी शामिल हैं। सीमाएँ OS संस्करण से नहीं बल्कि जानकारी के विवरण से संबंधित हैं — पुराने संस्करण 4G और 5G के बीच अंतर नहीं करते हैं।
Reachability SCNetworkReachability का उपयोग करता है — एक सिस्टम सेवा जो पैकेट भेजे बिना नेटवर्क स्टैक स्तर पर होस्ट की पहुँच का मूल्यांकन करती है। Ping ICMP पैकेट भेजता है और ट्रैफ़िक की खपत करता है, साथ ही फ़ायरवॉल द्वारा अवरुद्ध किया जा सकता है। बार-बार जाँच के लिए Reachability तेज़ और सुरक्षित है।
हाँ, Reachability SwiftUI में ObservableObject या Combine के माध्यम से काम करता है। इसे NotificationCenter पर सब्सक्राइब्ड एक क्लास में लपेटें और @Published के माध्यम से स्थिति प्रकाशित करें। नए SwiftUI प्रोजेक्ट्स के लिए, हम प्रतिक्रियाशील View अपडेट के लिए Combine पब्लिशर के साथ NWPathMonitor की अनुशंसा करते हैं।
Reachability SCNetworkReachabilityFlags बिटमास्क में kSCNetworkReachabilityFlagsIsWWAN फ़्लैग की जाँच करती है। यदि फ़्लैग सेट है — कनेक्शन सेल्युलर नेटवर्क (WWAN) के माध्यम से, यदि नहीं और होस्ट Reachable है — Wi-Fi के माध्यम से। CoreTelephony के बिना प्रकारों में अंतर करने का यही एकमात्र तरीका है।
SCNetworkReachability नेटवर्क स्तर पर होस्ट की पहुँच की जाँच करता है लेकिन उच्च-स्तरीय प्रोटोकॉल संचालन की गारंटी नहीं देता। संभावित कारण: कैप्टिव पोर्टल, DNS अवरोधन, प्रॉक्सी सर्वर या फ़ायरवॉल। Reachability पहला फ़िल्टर है लेकिन वास्तविक HTTP अनुरोध का विकल्प नहीं है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें