URLSession — یہ کیا ہے، نیٹ ورک API اور iOS میں یہ کیسے کام کرتا ہے

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

URLSession iOS اور macOS میں نیٹ ورک کی درخواستوں کے لیے ایک API ہے، جو Foundation فریم ورک کا حصہ ہے اور HTTP، HTTPS، بیک گراؤنڈ ڈاؤن لوڈ اور WebSocket کے ساتھ کام کرنے کے لیے ایک متحد انٹرفیس فراہم کرتا ہے۔ اس نے پرانے NSURLConnection کی جگہ لے لی اور Apple ڈیولپرز کے لیے بنیادی نیٹ ورکنگ ٹول بن گیا۔ Apple Developer Documentation (2025) کے مطابق، URLSession iPhone اور iPad ایپلیکیشنز میں 90% سے زیادہ نیٹ ورک ٹریفک کو ہینڈل کرتا ہے۔

اہم نکات

  • URLSession — نیٹ ورک کی درخواستوں، HTTP، فائل ڈاؤن لوڈ اور WebSocket کے لیے Apple کا مقامی API
  • کام کی اقسام: dataTask (درخواستیں)، downloadTask (ڈاؤن لوڈ)، uploadTask (اپ لوڈ)، webSocketTask
  • سیشن کنفیگریشن رویے کا تعین کرتی ہے: کیشنگ، ٹائم آؤٹ، پراکسی، اسناد
  • غیر مطابقت closures، delegate یا جدید async/await کے ذریعے لاگو کی جاتی ہے
  • بیک گراؤنڈ سیشنز ایپ کے چھوٹا ہونے پر بھی ڈیٹا لوڈ کرنے کی اجازت دیتے ہیں

URLSession کیا ہے؟

URLSession Apple کی طرف سے iOS 7 اور macOS 10.9 میں متعارف کرایا گیا نیٹ ورک آپریشنز کے لیے ایک API ہے۔ اس نے NSURLConnection کی جگہ لی اور نیٹ ورک کے ساتھ کام کرنے کے لیے ایک زیادہ لچکدار اور طاقتور ماڈل فراہم کیا۔ لائبریری HTTP/1.1، HTTP/2، HTTP/3 اور WebSocket کے ساتھ ساتھ ڈیٹا لوڈ کرنے کے لیے بیک گراؤنڈ سیشنز کو سپورٹ کرتی ہے۔

پرانے NSURLConnection پر URLSession کا بنیادی فائدہ ایک ہی سیشن کے ذریعے متعدد بیک وقت کنیکشنز کا سپورٹ، حسب ضرورت کنفیگریشنز اور ڈاؤن لوڈ کو روکنے اور دوبارہ شروع کرنے کی صلاحیت ہے۔ ایک سیشن مشترکہ ترتیبات (کیشنگ، کوکی پالیسی، ٹائم آؤٹ، TLS سرٹیفکیٹ) کے ساتھ نیٹ ورک کے کاموں کے گروپ کو یکجا کرتا ہے۔

iOS میں، URLSession سسٹم DNS کیش، پاور مینجمنٹ اور بیک گراؤنڈ پروسیسز کے ساتھ کام کرتا ہے۔ جب ایپ چھوٹی ہو جاتی ہے، تو سسٹم بیک گراؤنڈ سیشن کے ذریعے ڈیٹا لوڈ کرنا جاری رکھ سکتا ہے اور مکمل ہونے پر، ایک تکمیلی ہینڈلر کے ذریعے ایپ کو مطلع کر سکتا ہے۔ بیک گراؤنڈ سیشنز خاص طور پر بڑی فائلیں ڈاؤن لوڈ کرنے، مواد کو اپ ڈیٹ کرنے اور دستاویزات اور میڈیا ایپلیکیشنز میں ڈیٹا سنکرونائز کرنے کے لیے مفید ہیں۔ بیک گراؤنڈ سیشنز کے ساتھ کام کرنے کے لیے، آپ کو URLSessionDelegate کو لاگو کرنا ہوگا اور سیشن بناتے وقت ایک کنفیگریشن شناخت کنندہ پاس کرنا ہوگا — سسٹم ایپ کے دوبارہ شروع ہونے کے بعد سیشن کو بحال کرنے کے لیے اس شناخت کنندہ کا استعمال کرتا ہے۔

URLSession کا ایک اہم فائدہ HTTP/2 اور HTTP/3 کا سپورٹ ہے۔ HTTP/2 ملٹی پلیکسنگ ایک ہی TCP کنیکشن پر متعدد درخواستیں بھیجنے کی اجازت دیتی ہے، جس سے تاخیر اور سرور کا بوجھ کم ہوتا ہے۔ UDP پر QUIC پروٹوکل پر مبنی HTTP/3، TCP مصافحہ کو ختم کرکے اور بھی تیز تر کنیکشن قیام فراہم کرتا ہے۔

URLSession کا فن تعمیر

URLSession کا فن تعمیر تین اہم اجزاء پر مشتمل ہے: سیشن کنفیگریشن، خود سیشن، اور کام۔ ہر جزو نیٹ ورک کے تعامل کے ایک پہلو کے لیے ذمہ دار ہے اور ان کا مجموعہ نیٹ ورک کے ساتھ کام کرتے وقت ایپلیکیشن کے رویے کا تعین کرتا ہے۔

URLSessionConfiguration

کنفیگریشن سیشن کے پیرامیٹرز طے کرتی ہے — ٹائم آؤٹ سے لے کر کیشنگ پالیسیوں تک۔ تین اقسام ہیں: .default (ڈسک کیش کے ساتھ معیاری)، .ephemeral (کیش اور کوکی محفوظ کیے بغیر) اور .background (بیک گراؤنڈ ڈاؤن لوڈ کے لیے)۔ کنفیگریشن میں، آپ فی میزبان زیادہ سے زیادہ کنیکشنز کی تعداد، درخواست اور وسائل کا ٹائم آؤٹ، TLS پالیسی اور پراکسی سیٹنگز بتا سکتے ہیں۔

URLSessionTask کی اقسام

URLSessionTask تمام نیٹ ورک آپریشنز کے لیے بنیادی کلاس ہے۔ اہم ذیلی کلاسیں یہ ہیں: میموری میں ڈیٹا واپس کرنے والی GET اور POST درخواستوں کے لیے URLSessionDataTask، ڈسک پر فائلیں ڈاؤن لوڈ کرنے کے لیے URLSessionDownloadTask، سرور پر فائلیں اپ لوڈ کرنے کے لیے URLSessionUploadTask اور iOS 13 سے WebSocket کے ساتھ کام کرنے کے لیے URLSessionWebSocketTask۔

URLSession Delegate

سیشن delegate کاموں کی پیشرفت کے بارے میں واقعات وصول کرتا ہے: ڈیٹا وصولی، ڈاؤن لوڈ مکمل ہونا، تصدیق کی غلطیاں، ری ڈائریکٹ۔ URLSessionDelegate اور اس کے ذیلی پروٹوکول تصدیق کے دوران TLS سرٹیفکیٹس کو روکنے، URLCache کے ذریعے جوابی کیشنگ کا انتظام کرنے اور بڑی فائلوں کے ڈاؤن لوڈ کی پیشرفت کی نگرانی کرنے کی اجازت دیتے ہیں۔ متبادل طور پر، سادہ معاملات کے لیے closures (تکمیلی ہینڈلرز) استعمال کیے جا سکتے ہیں جہاں درمیانی واقعہ کی ہینڈلنگ کی ضرورت نہیں ہے۔

URLSession کے ساتھ درخواستیں کیسے کریں

URLSession کے ساتھ بنیادی ورک فلو یوں ہے: ایک کنفیگریشن بنائیں، اس کی بنیاد پر ایک سیشن بنائیں، پھر سیشن کے ذریعے URL درخواست کے ساتھ ایک کام بنائیں اور کام شروع کریں۔ آئیے ایک closure کے ساتھ GET درخواست کی مثال دیکھتے ہیں۔ یہ پیٹرن زیادہ تر iOS ایپلیکیشنز میں REST APIs سے ڈیٹا حاصل کرنے، تصاویر لوڈ کرنے اور کلاؤڈ سروسز کے ساتھ تعامل کے لیے استعمال ہوتا ہے۔

swift
let url = URL(string: "https://api.example.com/users")!
let session = URLSession.shared
let task = session.dataTask(with: url) { data, response, error in
    guard let data = data, error == nil else {
        print("Error: \(error!.localizedDescription)")
        return
    }
    if let json = try? JSONSerialization.jsonObject(with: data) {
        print("JSON: \(json)")
    }
}
task.resume()

مثال سادہ درخواستوں کے لیے .default کنفیگریشن کے ساتھ ایک سنگلٹن URLSession.shared استعمال کرتی ہے۔ dataTask ایک غیر مطابقت پذیر آپریشن بناتا ہے لیکن اسے شروع نہیں کرتا — آپ کو resume() کال کرنا ہوگا۔ درخواست مکمل ہونے کے بعد closure عمل میں آتا ہے اور data، response یا error واپس کرتا ہے۔ اپنی کنفیگریشن کے ساتھ حسب ضرورت سیشن کے لیے، URLSession(configuration:) ابتدائیہ استعمال کریں، جو تمام سیشن کاموں کے لیے کیشنگ پالیسیاں، ٹائم آؤٹ، زیادہ سے زیادہ کنیکشنز، ڈیفالٹ HTTP ہیڈرز اور پراکسی سیٹنگز طے کرنے کی اجازت دیتا ہے۔ یہ طریقہ آپ کو اپنی ایپلیکیشن میں نیٹ ورک کے رویے پر مکمل کنٹرول دیتا ہے۔

URLSession کے ذریعے فائل ڈاؤن لوڈ

URLSession روکنے اور دوبارہ شروع کرنے کی صلاحیت کے ساتھ فائل ڈاؤن لوڈز کے ساتھ ساتھ بیک گراؤنڈ ڈاؤن لوڈز کو سپورٹ کرتا ہے۔ DownloadTask فائل کو عارضی ڈائریکٹری میں محفوظ کرتا ہے اور تکمیلی closure میں آپ کو اسے مستقل مقام پر منتقل کرنا ہوگا۔

swift
let url = URL(string: "https://example.com/file.zip")!
let session = URLSession(configuration: .default)
let task = session.downloadTask(with: url) { location, _, _ in
    guard let location = location else { return }
    let destination = FileManager.default.temporaryDirectory
        .appendingPathComponent("file.zip")
    try? FileManager.default.moveItem(at: location, to: destination)
}
task.resume()

closure میں location پیرامیٹر ایک عارضی فائل کی طرف اشارہ کرتا ہے جسے منتقل کرنے کی ضرورت ہے، ورنہ سسٹم closure سے باہر نکلنے کے بعد اسے حذف کر دے گا۔ پیشرفت کو ٹریک کرنے کے لیے، URLSessionDownloadDelegate کو didWriteData طریقہ کے ساتھ استعمال کریں، جو لکھے گئے بائٹس کی تعداد اور کل فائل سائز فراہم کرتا ہے — یہ ڈیٹا صارف انٹرفیس میں پیشرفت بار ظاہر کرنے کے لیے استعمال کیا جا سکتا ہے۔ downloadTask کے ساتھ بیک گراؤنڈ سیشنز ایپ کے چھوٹا ہونے کے بعد بھی ڈاؤن لوڈ جاری رکھنے کی اجازت دیتے ہیں اور مکمل ہونے پر، سسٹم AppDelegate میں ہینڈلر کو کال کرتا ہے۔

URLSession بمقابلہ Alamofire

Alamofire ایک Swift لائبریری ہے جو URLSession کے اوپر بنائی گئی ہے اور ایک زیادہ اعلانیہ انٹرفیس فراہم کرتی ہے۔ مقامی API اور Alamofire کے درمیان انتخاب پروجیکٹ کی پیچیدگی اور ٹیم کی ترجیحات پر منحصر ہے۔

معیارURLSessionAlamofire
انحصارکوئی نہیں، Foundation میں شاملSPM یا CocoaPods درکار
نحوclosures کے ساتھ لازمیزنجیر کے ساتھ اعلانیہ
JSON ہینڈلنگدستی JSONSerializationCodable کے ساتھ responseDecodable
انٹرسیپٹرزdelegate کے ذریعےRequestInterceptor, EventMonitor
پیشرفتdelegate کے ذریعےdownloadProgress, uploadProgress

سادہ پروجیکٹس کے لیے، URLSession کافی ہے اور کوئی انحصار شامل نہیں کرتا۔ Alamofire ان پروجیکٹس میں جائز ہے جن میں بہت زیادہ نیٹ ورک درخواستیں، پیچیدہ غلطی کا انتظام اور مختصر نحو کی ضرورت ہوتی ہے۔ دونوں ٹیکنالوجیز مشترکہ URLSessionConfiguration بنیاد رکھتی ہیں اور ایک دوسرے کے ساتھ مطابقت رکھتی ہیں۔ انتخاب کرتے وقت، غور کریں کہ URLSession مکمل طور پر Apple کے کنٹرول میں ہے اور iOS کے ساتھ اپ ڈیٹ ہوتی ہے، جبکہ Alamofire کو لائبریری ڈیولپرز کو نئے OS ورژنز کے ساتھ مطابقت برقرار رکھنے کی ضرورت ہوتی ہے۔

URLSession کوڈ کی مثالیں

جدید Swift async/await کو سپورٹ کرتا ہے، جو closures کے مقابلے میں نیٹ ورک کی درخواستوں کو زیادہ پڑھنے کے قابل بناتا ہے۔ آئیے اسی GET درخواست کو غیر مطابقت پذیر نحو کا استعمال کرتے ہوئے دیکھتے ہیں۔

swift
func fetchUsers() async throws -> [User] {
    let url = URL(string: "https://api.example.com/users")!
    let (data, _) = try await URLSession.shared.data(from: url)
    let users = try JSONDecoder().decode([User].self, from: data)
    return users
}

data(from:) طریقہ iOS 15 اور macOS 12 سے دستیاب ہے۔ یہ ایک ٹیپل (Data, URLResponse) واپس کرتا ہے اور نیٹ ورک کے مسائل پر خرابی پھینکتا ہے۔ Codable ماڈل کے ساتھ JSONDecoder خود بخود جواب کو ڈی سیریلائز کرتا ہے — یہ پچھلی مثال کے بوجھل JSONSerialization کی جگہ لیتا ہے۔

JSON باڈی کے ساتھ POST درخواست

JSON باڈی کے ساتھ POST درخواستوں کے لیے، URLRequest استعمال کیا جاتا ہے، جہاں آپ طریقہ، Content-Type ہیڈرز اور Data کے طور پر درخواست کی باڈی کنفیگر کرتے ہیں۔ Async/await اس عمل کو مختصر اور واضح بناتا ہے اور do-catch بلاک کے ذریعے غلطی کا انتظام آسان ہے۔

swift
func createUser(name: String) async throws -> User {
    var request = URLRequest(url: URL(string: "https://api.example.com/users")!)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    let body = try JSONEncoder().encode(["name": name])
    request.httpBody = body
    let (data, _) = try await URLSession.shared.data(for: request)
    return try JSONDecoder().decode(User.self, from: data)
}

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

URLSession NSURLConnection سے کیسے مختلف ہے؟

URLSession NSURLConnection کا جدید متبادل ہے، جو iOS 7 میں متعارف کرایا گیا تھا۔ اہم فرقوں میں سیشنز کے ذریعے متعدد کنیکشنز کا سپورٹ، کاموں کو روکنا اور دوبارہ شروع کرنا، بیک گراؤنڈ ڈاؤن لوڈ اور WebSocket شامل ہیں۔ NSURLConnection فرسودہ ہے اور نئے پروجیکٹس میں استعمال کے لیے تجویز نہیں کیا جاتا۔

URLSession میں ڈاؤن لوڈ کی پیشرفت کیسے ٹریک کریں؟

پیشرفت کو ٹریک کرنے کے لیے، URLSessionDownloadDelegate کو urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite) طریقہ کے ساتھ استعمال کریں۔ متبادل طور پر، dataTask کے لیے آپ URLSessionTaskDelegate کو سبسکرائب کر سکتے ہیں اور didSendBodyData کے ذریعے اپ ڈیٹس حاصل کر سکتے ہیں۔

URLSession کے ساتھ بیک گراؤنڈ ڈاؤن لوڈ کیسے کریں؟

بیک گراؤنڈ ڈاؤن لوڈ .background(withIdentifier:) کنفیگریشن کے ذریعے کنفیگر کیے جاتے ہیں۔ ایپ AppDelegate میں ایک تکمیلی ہینڈلر رجسٹر کرتی ہے اور چھوٹا یا بند ہونے کے بعد بھی نتائج حاصل کرتی ہے۔ سسٹم ڈاؤن لوڈ کا انتظام کرتا ہے اور sessionDidFinishEvents delegate کے ذریعے ایپ کو مطلع کرتا ہے۔

کیا URLSession کو WebSocket کے ساتھ استعمال کیا جا سکتا ہے؟

ہاں، iOS 13 سے URLSession URLSessionWebSocketTask کلاس کے ذریعے WebSocket کو سپورٹ کرتا ہے۔ یہ webSocketTask(with:) طریقہ سے بنایا جاتا ہے اور ٹیکسٹ اور بائنری پیغامات کے سپورٹ کے ساتھ send، receive طریقے فراہم کرتا ہے، نیز کنیکشن کو برقرار رکھنے کے لیے ping/pong فراہم کرتا ہے۔

URLSession میں ٹائم آؤٹ کیسے سیٹ کریں؟

ٹائم آؤٹ URLSessionConfiguration کے ذریعے کنفیگر کیے جاتے ہیں: timeoutIntervalForRequest پراپرٹی (درخواست کے جواب کا انتظار) اور timeoutIntervalForResource (پورے ڈاؤن لوڈ کا زیادہ سے زیادہ وقت)۔ ڈیفالٹ: درخواست کے لیے 60 سیکنڈ اور وسائل کے لیے 7 دن۔

خلاصہ

  • URLSession — نیٹ ورک کی درخواستوں کے لیے Apple کا مقامی API، HTTP، بیک گراؤنڈ ڈاؤن لوڈ اور WebSocket کو سپورٹ کرتا ہے
  • تین کنفیگریشن اقسام (.default, .ephemeral, .background) سیشن کے رویے کا تعین کرتی ہیں
  • چار کام کی اقسام تمام منظرناموں کا احاطہ کرتی ہیں: dataTask, downloadTask, uploadTask, webSocketTask
  • Delegates تصدیق، پیشرفت اور ری ڈائریکٹ کے انتظام کی اجازت دیتے ہیں
  • Async/await iOS 15 سے URLSession کوڈ کو زیادہ پڑھنے کے قابل اور مختصر بناتا ہے
  • URLSession یا Alamofire کا انتخاب پروجیکٹ کے سائز پر منحصر ہے — URLSession سادہ کاموں کے لیے کافی ہے

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

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

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

مزید پڑھیں