NWPathMonitor iOS اور macOS میں Network فریم ورک کا ایک کلاس ہے جو آلات کے نیٹ ورک پاتھ کی حالت کی نگرانی کرتا ہے۔ Apple Developer Documentation (2025) کے مطابق، NWPathMonitor ایپلیکیشن کو نیٹ ورک کی دستیابی کو ٹریک کرنے، انٹرفیس کی قسم کا تعین کرنے اور کنیکشن میں تبدیلیوں کا جواب دینے کی اجازت دیتا ہے۔ NWPathMonitor NWPath کے ساتھ ایک آسان کال بیک کے ذریعے کنیکشن کی قسم، ڈیٹا کی لاگت اور انٹرنیٹ کی دستیابی کے بارے میں معلومات فراہم کرتا ہے۔
اہم نکات
NWPathMonitor Network فریم ورک کا ایک کلاس ہے جو Apple نے iOS 12 اور macOS 10.14 Mojave میں متعارف کرایا تھا۔ یہ آلات کے نیٹ ورک پاتھ میں تبدیلیوں کو ٹریک کرنے کے لیے ایک جدید API فراہم کرتا ہے — نیٹ ورک انٹرفیسوں کا ایک اتحاد جس کے ذریعے ایپلیکیشن کا ٹرافک گزرتا ہے۔
iOS 12 سے پہلے، C پر مبنی SystemConfiguration فریم ورک پر تعمیر شدہ Reachability لائبریری نیٹ ورک کی نگرانی کے لیے استعمال ہوتی تھی۔ NWPathMonitor ایک امیر API کے ساتھ ایک دیشی Swift متبادل ہے، جو جدید قسموں کے کنیکشن (VPN، multipath، LTE، 5G) اور مضموعی GCD انضمام کی حمایت کرتا ہے۔
NWPathMonitor اور Reachability کے درمیان بنیادی فرق — NWPath آبجیکٹ خالی ایک دوائی حالت «دستیاب/غیر دستیاب» ہی نہیں، بلکہ پاتھ کی ایک مکمل تصویر فراہم کرتا ہے: استعمال شدہ انٹرفیس، ان کی اولویت، اخراجات، رومنگ کی حالت اور پروکسی اور VPN کی صلاحیتیں۔ ڈیولپر نیٹ ورک کی درخواستوں کے بارے میں فیصلے کرنے کے لیے مکمل معلومات حاصل کرتا ہے۔
Network فریم ورک نیچی سطح کے C API — CFStream اور BSD Sockets کے جدید متبادل کے طور پر سامنے آیا۔ یہ watchOS اور tvOS سمیت تمام Apple پلیٹ فارمز پر نیٹ ورک کی ذریعے ابتاغ کے لیے ایک متحد انٹرفیس فراہم کرتا ہے۔ NWPathMonitor NWConnection، NWListener اور NWBrowser کے ساتھ اس فریم ورک کا حصہ ہے۔
Network فریم ورک Swift میں لکھا گیا ہے اور غیر ہم زمان کارروائی کے لیے GCD کا استعمال کرتا ہے۔ اس کا مطلب ہے که NWPathMonitor کے کال بیک متعین dispatch queue پر عمل کرتے ہیں، جو ایپلیکیشن کے موجودہ ملٹی ایئیژرال آرکیٹیکچر میں دستی ثریڈ مینجمنٹ کے بغیر مضموم ہوتے ہیں۔
NWPathMonitor کا استعمال کلاس کا ایک مثال بنانے اور pathUpdateHandler کال بیک کو ترتیب دینے سے شروع ہوتا ہے۔ پھر start میٹھڈ کو ایک dispatch queue کے ساتھ بلایا جاتا ہے جہاں closure عمل کرے گا۔ نگرانی cancel میٹھڈ سے روکی جاتی ہے، جو وسائل کو بھی آزاد کرتا ہے۔
import Network
class NetworkMonitor {
private let monitor = NWPathMonitor()
private let queue = DispatchQueue("monitor")
func startMonitoring() {
monitor.pathUpdateHandler = { path in
if path.status == .satisfied {
print("نیٹ ورک دستیاب")
} else {
print("نیٹ ورک غیر دستیاب")
}
}
monitor.start(on: queue)
}
func stopMonitoring() {
monitor.cancel()
}
}
NWPathMonitor کو صرف ایک مخصوص انٹرفیس قسم کی نگرانی کے لیے ترتیب دیا جا سکتا ہے۔ اس کے لیے انیشیالائزر NWPathMonitor(requiredInterfaceType:) کو NWInterface.InterfaceType پیرامیٹر — .wifi، .cellular، .wiredEthernet یا .loopback کے ساتھ استعمال کریں۔ اگر کوئی قسم متعین نہیں کی گئی، تو نگرانی تمام انٹرفیسوں کو کور کرتی ہے۔
عملی مثال: ایک اسٹریمنگ ایپ صرف Wi-Fi کی نگرانی کر سکتا ہے اور صارف کو سیلولر ڈیٹا پر جانے پر انتباہ کر سکتا ہے۔ NWPath میں isConstrained اور isExpensive کی جانچ یہ طے کرنے میں مدد کرتی ہے که کیا موجودہ کنیکشن میتریڈ ہے یا سپیڈ محدود ہے۔
نگرانی کو ایپلیکیشن کے لاؤنچ پر یا فورگراؤنڈ میں آنے پر شروع کرنا چاہیے اور بیک گراؤنڈ میں جانے پر روکنا چاہیے۔ پورے ایپلیکیشن کے لیے ایک NWPathMonitor مثال (singleton) بنانے اور اسے ایک پروٹیکیال یا سروس پرت کے ذریعے مختلف ماڈیولز سے استعمال کرنے کی سفارش کی جاتی ہے۔
NWPath ایک آبجیکٹ ہے جو pathUpdateHandler کو بھیجا جاتا ہے اور نیٹ ورک پاتھ کی موجودہ حالت کی وضاحت کرتا ہے۔ اس میں پانچ اہم خوبیاں ہیں جو زیادہ تر نیٹ ورک نگرانی کے مناظر کو کور کرتی ہیں۔ NWPath.Status — تین حالتوں کا ایک انومریشن: satisfied (دستیاب)، unsatisfied (نادستیاب) اور requiresConnection (کنیکشن کی ضرورت ہے)۔
| خوبی | قسم | تفصیل |
|---|---|---|
| status | NWPath.Status | موجودہ پاتھ کی حالت: satisfied, unsatisfied, requiresConnection |
| availableInterfaces | [NWInterface] | تمام دستیاب نیٹ ورک انٹرفیسوں کی فہرست |
| gateways | [NWEndpoint] | روٹنگ کے لیے استعمال کیے جانے والے گیٹ وے کی فہرست |
| isExpensive | Bool | True اگر کنیکشن میتریڈ ہے (سیلولر ڈیٹا، ذاتی ہوٹ سپوٹ) |
| isConstrained | Bool | True اگر کنیکشن سپیڈ محدود ہے (کم ڈیٹا موڈ) |
isExpensive خوبی ان ایپلیکیشنوں کے لیے ایک اہم فلیگ ہے جو بڑی مقدار میں ڈیٹا کے ساتھ کام کرتے ہیں۔ اگر isExpensive = true ہے، تو ایپلیکیشن کو اسٹریمنگ کا معیار کم کرنا چاہیے، اپ ڈیٹ ڈاؤن لوڈ ملتوی کرنا چاہیے یا صارف کو انتباہ کرنا چاہیے۔ isConstrained اظہار کرتا ہے که کم ڈیٹا موڈ فعال ہے۔
انٹرنیٹ کی دستیابی (نہ کے صرف نیٹ ورک) کی جانچ کرنے کے لیے، usesInterfaceType میٹھڈ کا استعمال کریں۔ اگر آلات بغیر انٹرنیٹ کے Wi-Fi سے منسلک ہے — NWPath satisfied دیکھا سکتا ہے، لیکن حقیقی رسائی موجود نہیں ہے۔ ایسے معاملات میں، NWConnection کے ذریعے اضافی تصدیق کی ضرورت ہے۔
آئیے ایک اعلیٰ NWPathMonitor نفاذ دیکھیں جس میں اخراجات کا نظم، انٹرفیس کی قسمیں اور ایک پابلشر کے ذریعے ViewModel اطلاع شامل ہے۔ مثال نیٹ ورک کی حالت بدلنے پر ری اکٹو اپ ڈیٹس کے لیے Combine فریم ورک کا استعمال کرتا ہے۔
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
}
}
جب کنیکشن منتقل ہو جاتا ہے، تو نہ صرف UI کو مطلع کرنا بلکه موقوف کارروائیاں بھی کرنے کی ضرورت پڑ سکتی ہے — مثال کے طور پر، بعد میں بھیجنے کے لیے ایک درخواست کا مسودہ محفوظ کریں۔ ایک موقوف درخواستوں کی قطار نفاذ کریں جو unsatisfied حالت کے دوران کارروائیوں کو جمع کرتی ہے اور satisfied بحال ہونے پر انہیں بھیج دیتی ہے۔
اس کام کے لیے ڈیلی گیٹ کے ساتھ ReachabilityManager پیٹرن موزوں ہے: NWPathMonitor مینیجر کو مطلع کرتا ہے، مینیجر قطار اور UI کو اپ ڈیٹ کرتا ہے۔ جب حالت بدل کر satisfied ہو جاتی ہے، قطار خودکار صاف ہو جاتی ہے اور UI کو کنیکشن بحالی کا اشارہ ملتا ہے۔
NWPathMonitor سے پہلے، iOS میں نیٹ ورک نگرانی کا معیاری حل Apple کی Reachability لائبریری (دستاویز سے مثال) تھا، جو SystemConfiguration پر تعمیر شدہ تھا۔ بنیادی فرق: Reachability C میں SCNetworkReachability کے ذریعے کام کرتی ہے، جدید نیٹ ورک قسموں کی حمایت نہیں کرتی اور صرف ایک دوائی دستیابی کا جواب دیتی ہے۔
NWPathMonitor ان حدود کو حل کرتا ہے: یہ Swift میں لکھا گیا، VPN، multipath، 5G اور LTE کی حمایت کرتا ہے، ہر انٹرفیس کے بارے میں مفصل معلومات فراہم کرتا ہے اور GCD کے ذریعے غیر ہم زمان کام کرتا ہے۔ Reachability اب بھی ان مناصب میں استعمال ہوتی ہے جو iOS 11 اور اس سے نیچے کی حمایت کرتے ہیں۔
| خوبی | NWPathMonitor | Reachability |
|---|---|---|
| کم از کم ورشن | iOS 12 | iOS 2 |
| زبان | Swift (Network) | C (SystemConfiguration) |
| انٹرفیس کی قسمیں | Wi-Fi, Cellular, Ethernet, VPN | Wi-Fi, WWAN (عام) |
| isExpensive | ہاں | نہیں |
| غیر ہم زمان | GCD (dispatch queue) | RunLoop |
| متعدد انٹرفیس | ہاں (multipath) | نہیں |
اگر آپ کی ایپلیکیشن iOS 11 اور اس سے نیچے کی حمایت کرتی ہے، تو Reachability واحد وظیفہ ہے۔ iOS 12+ مناصب کے لیے، سیدھے NWPathMonitor استعمال کرنے کی سفارش کی جاتی ہے — یہ جدید Swift کوڈ، Combine اور SwiftUI کے ساتھ بہتر انضمام ہوتا ہے۔
Reachability سے NWPathMonitor میں میگریشن سادہ ہے: بس SCNetworkReachability کی کالز کو NWPathMonitor سے بدل دیں، اسی ہینڈلنگ لاجک کو برقرار رکھیں۔ ایک تجرید کی پرت (NetworkMonitorProtocol) ایپلیکیشن کے کاروبار لاجک کو بدلے بغیر نفاذوں کے درمیان سوئیچ کرنے کی اجازت دے گی۔
اکثر پوچھے جانے والے سوالات
NWPathMonitor iOS 12.0، macOS 10.14، watchOS 5.0 اور tvOS 12.0 سے دستیاب ہے۔ پرانے ورشنوں کی حمایت کرنے والے مناصب کے لیے، SystemConfiguration سے Reachability یا #available کے ذریعے مشروط ترتیب کے ساتھ لپٹوپ لائبریریاں استعمال کریں۔
Satisfied کا مطلب ہے کہ ٹرافک کم سے کم ایک انٹرفیس سے گزر سکتا ہے۔ Unsatisfied — کوئی انٹرفیس دستیاب نہیں ہے۔ requiresConnection حالت — پاتھ کو کنیکشن قائم کرنے کی ضرورت ہے (مثال کے طور پر، VPN منسلک نہیں ہے)، اور ٹرافک عارضی طور پر گزر نہیں سکتا۔
NWPath پر usesInterfaceType میٹھڈ استعمال کریں: Wi-Fi کے لیے path.usesInterfaceType(.wifi)، سیلولر ڈیٹا کے لیے path.usesInterfaceType(.cellular)۔ یہ میٹھڈ true واپس کرتا ہے اگر موجودہ ٹرافک متعین انٹرفیس قسم سے گزرتا ہے۔
بیٹری بچانے کے لیے بیک گراؤنڈ میں نگرانی موقوف کرنے کی سفارش کی جاتی ہے۔ applicationDidEnterBackground میں monitor.cancel() کو کال کرنا اور applicationWillEnterForeground میں start کو دبارہ شروع کرنا بجل کی کھپت کم کرتا ہے۔ اہم کارروائیوں کے لیے Background Task استعمال کریں۔
NWPathMonitor کیپٹیو پورٹل کے ساتھ بھی satisfied دیکھا سکتا ہے۔ حقیقی انٹرنیٹ رسائی کا تعین کرنے کے لیے، NWConnection کے ذریعے ایک قابل اعتماد انڈ پائنٹ پر HTTP درخواست کریں۔ اگر ری ڈائیریکٹ ہوتا ہے — پورٹل فعال ہے اور WebView میں اجازت کی ضرورت ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں