Alamofire iOS اور macOS کے لیے ایک مشہور HTTP لائبریری ہے، جو Swift میں لکھی گئی ہے اور URLSession کے اوپر بنائی گئی ہے۔ یہ نیٹ ورک کی درخواستوں، JSON پروسیسنگ، فائل اپ لوڈ اور تصدیقی انتظام کے لیے اعلانیہ نحو فراہم کرتی ہے۔ Alamofire GitHub ذخیرہ (2025) کے مطابق، Alamofire کے 42,000 سے زیادہ ستارے ہیں اور دنیا بھر میں ہزاروں iOS پروجیکٹس میں استعمال ہوتا ہے۔
اہم نکات
Alamofire Swift کے لیے ایک HTTP کلائنٹ ہے جسے Alamofire Software Foundation (اصل میں 2014 میں Mattt Thompson) نے بنایا ہے۔ لائبریری نچلی سطح کی URLSession تفصیلات کو تجریدی شکل دیتی ہے، نیٹ ورک مواصلات کے لیے ایک صاف اور واضح API فراہم کرتی ہے۔
Alamofire کا بنیادی فلسفہ سلسلہ وار نحو ہے، جہاں درخواست کے پیرامیٹرز (URL، طریقہ، ہیڈرز، پیرامیٹرز، انکوڈر) ترتیب وار کالوں کے ذریعے منتقل ہوتے ہیں۔ یہ کوڈ کو زیادہ پڑھنے کے قابل بناتا ہے اور غلط URLRequest ترتیب سے متعلق غلطیوں کے امکان کو کم کرتا ہے۔ اعلانیہ طریقہ کار کنکشن سیٹ اپ کی تفصیلات کے بجائے اس بات پر توجہ مرکوز کرنے کی اجازت دیتا ہے کہ کیا کرنے کی ضرورت ہے۔ ڈویلپر مطلوبہ نتیجہ بیان کرتا ہے اور لائبریری نچلی سطح کے نیٹ ورک کے کام کو سنبھالتی ہے۔
لائبریری 2014 سے فعال طور پر برقرار ہے اور سات بڑے ورژنز سے گزری ہے۔ Alamofire 5، 2025–2026 تک موجودہ، Combine، async/await، جوابی کنورٹرز، ڈیبگنگ کے لیے EventMonitor اور درخواستوں کو روکنے کے لیے RequestInterceptor کی حمایت شامل کرتا ہے۔ ہر بڑا ورژن اہم بہتری لایا: Alamofire 4 نے Codable سپورٹ شامل کیا، Alamofire 5 نے Combine Publishers اور ایک بہتر درخواست روکنے کا نظام شامل کیا۔
Alamofire ماحولیاتی نظام میں اضافی لائبریریاں شامل ہیں: AlamofireImage تصویر لوڈنگ اور کیشنگ کے لیے، AlamofireNetworkActivityIndicator iOS اسٹیٹس بار میں نیٹ ورک انڈیکیٹر کے لیے، اور AlamofireObjectMapper ObjectMapper کے ساتھ انضمام کے لیے۔ یہ اجزاء Alamofire کو صرف HTTP کلائنٹ نہیں بلکہ ایک مکمل نیٹ ورک اسٹیک بناتے ہیں۔
Alamofire Swift Package Manager (تجویز کردہ)، CocoaPods یا Carthage کے ذریعے انسٹال کیا جاتا ہے۔ Xcode میں، صرف File → Add Packages مینو کھولیں، ذخیرہ کا URL چسپاں کریں اور ورژن بتائیں۔
// Swift Package Manager — Package.swift میں شامل کریں
dependencies: [
.package(url: "https://github.com/Alamofire/Alamofire.git",
from: "5.9.0")
]
// فائل میں درآمد کریں
import Alamofire
انسٹالیشن کے بعد، Alamofire اضافی ترتیب کے بغیر AF نام کی جگہ (Alamofire کا مخفف) کے ذریعے عالمی طور پر دستیاب ہے۔ زیادہ تر پروجیکٹ اپنی ترتیب کے ساتھ Session سیٹ کرکے شروع ہوتے ہیں — یہ بیس URL، ڈیفالٹ ہیڈرز، ٹائم آؤٹ اور TLS سرٹیفکیٹ ہینڈلرز سیٹ کرنے کی اجازت دیتا ہے۔
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 30
let session = Session(configuration: configuration)
Session(configuration:) کے ذریعے حسب ضرورت سیشن بنانا ضروری ہے جب ایپلیکیشن کے مختلف حصوں کے لیے منفرد ترتیب درکار ہو — مثال کے طور پر، جارحانہ کیشنگ کے ساتھ تصویر ڈاؤن لوڈ کے لیے علیحدہ سیشن اور تصدیق کے ساتھ API درخواستوں کے لیے دوسرا سیشن۔ Alamofire Session نہ صرف ترتیب بلکہ interceptor، serverTrustManager، cachedResponseHandler اور redirectHandler کو بھی قبول کرتا ہے، درخواست کے تمام مراحل میں نیٹ ورک کے رویے پر مکمل کنٹرول فراہم کرتا ہے۔
Alamofire iOS ایپلیکیشنز میں زیادہ تر نیٹ ورک تعامل کے منظرناموں کا احاطہ کرنے والے افعال کی ایک وسیع رینج فراہم کرتا ہے۔ آئیے اہم خصوصیات پر نظر ڈالتے ہیں۔
بنیادی درخواست کے نحو میں طریقہ، URL، پیرامیٹرز اور انکوڈنگ شامل ہے۔ HTTPMethod enum کے ذریعے تمام معیاری HTTP طریقے تعاون یافتہ ہیں: get، post، put، patch، delete۔ پیرامیٹرز کو URL پیرامیٹرز (URLEncoding)، JSON باڈی (JSONEncoding) یا ملٹی پارٹ فارم ڈیٹا (MultipartFormData) کے طور پر انکوڈ کیا جا سکتا ہے۔
AF.request("https://api.example.com/users", method: .post,
parameters: ["name": "Alex", "role": "developer"])
.validate()
.responseDecodable(of: User.self) { response in
switch response.result {
case .success(let user):
print("صارف کے ذریعہ تخلیق کردہ: \(user)")
case .failure(let error):
print("غلطی: \(error)")
}
}
validate() طریقہ خود بخود اسٹیٹس کوڈ (200–299) اور مواد کی قسم چیک کرتا ہے، غیر متوقع جواب پر غلطی لوٹاتا ہے، دستی statusCode چیک کو ختم کرتا ہے۔ responseDecodable JSON کو Swift ڈھانچے میں خودکار طور پر تبدیل کرنے کے لیے Decodable پروٹوکول استعمال کرتا ہے — یہ دستی JSONSerialization کو ختم کرتا ہے اور REST APIs کے ساتھ کام کرتے وقت بوائلرپلیٹ کوڈ کو کم کرتا ہے۔
Alamofire کئی قسم کے جوابی ہینڈلرز کو سپورٹ کرتا ہے: response (خام ڈیٹا)، responseJSON (لغت/صف)، responseString (متن)، responseData (Data)، اور responseDecodable (Decodable ماڈل)۔ جوابی کنورٹرز حسب ضرورت ہو سکتے ہیں — protobuf، گرافک فارمیٹس یا حسب ضرورت پروٹوکول کے لیے۔
سرور پر ڈیٹا اپ لوڈ کرنے کے لیے upload استعمال ہوتا ہے، جو Data، File اور MultipartFormData کو سپورٹ کرتا ہے۔ بڑی فائلوں کا ڈاؤن لوڈ کنکشن میں تعطل کے بعد resumeData کے ذریعے دوبارہ شروع کرنے کی صلاحیت کے ساتھ download کے ذریعے کیا جاتا ہے۔ دونوں آپریشنز صارف انٹرفیس میں ڈسپلے کرنے کے لیے 0 سے 1 کے کسری اقدار کے ساتھ uploadProgress اور downloadProgress کے ذریعے پیشرفت سے باخبر رہنے کی حمایت کرتے ہیں۔
Alamofire کے ساتھ ملٹی پارٹ اپ لوڈ خاص طور پر آسان ہے: upload(multipartFormData:) طریقہ ایک closure قبول کرتا ہے جہاں append کے ذریعے فارم کے حصے شامل کیے جاتے ہیں۔ ہر حصہ ڈیٹا، فائل یا سٹریم کے ساتھ ساتھ اپنا نام اور mime قسم رکھ سکتا ہے۔ Alamofire خود بخود ملٹی پارٹ حدود کا حساب لگاتا ہے اور درست Content-Type ہیڈر سیٹ کرتا ہے، ڈویلپر کو دستی طور پر درخواست کا باڈی بنانے سے بچاتا ہے۔ بڑی فائلوں کے لیے، پوری فائل کو میموری میں لوڈ کرنے کے بجائے سٹریم فراہم کنندگان استعمال کرنے کی سفارش کی جاتی ہے — یہ محدود وسائل والے موبائل آلات پر میموری کی حد سے تجاوز کو روکتا ہے۔ ایک عام منظر نامہ صارف کے اوتار کو پروفائل ڈیٹا کے ساتھ ایک ہی ملٹی پارٹ درخواست میں بھیجنا ہے، جو HTTP کالز کی تعداد کو کم کرتا ہے اور سرور سائڈ پروسیسنگ کو آسان بناتا ہے۔
Alamofire کا مقامی URLSession سے موازنہ آرکیٹیکچرل فیصلے لینے میں مدد کرتا ہے۔ Alamofire URLSession کو تبدیل نہیں کرتا — یہ اس کے اوپر بنتا ہے اور اسی ترتیب، کیشنگ اور بیک گراؤنڈ ٹاسک میکانزم کو استعمال کرتا ہے۔ URLSession کی تمام خصوصیات Alamofire کے ذریعے قابل رسائی ہیں، لیکن زیادہ آسان اعلانیہ نحو کے ساتھ۔
| معیار | Alamofire | URLSession |
|---|---|---|
| نحو | اعلانیہ، سلسلہ وار | حکمی، closures |
| JSON ڈی کوڈنگ | خودکار (responseDecodable) | دستی (JSONSerialization/JSONDecoder) |
| توثیق | validate() — بلٹ ان | دستی statusCode چیک |
| پیشرفت | uploadProgress، downloadProgress | URLSessionTaskDelegate کے ذریعے |
| انٹرسیپٹرز | RequestInterceptor، EventMonitor | منتظم، ذیلی کلاسیں |
| انحصار | انسٹالیشن درکار (SPM، CocoaPods) | کوئی نہیں، Foundation میں بلٹ ان |
بڑے پروجیکٹس میں، Alamofire نیٹ ورک درخواست کوڈ کو 30–50% کم کرتا ہے اور غلطی کے انتظام کو آسان بناتا ہے۔ چھوٹے پروجیکٹس میں یا جب بائنری سائز سخت پابندی ہو، بیرونی انحصار کی عدم موجودگی کی وجہ سے مقامی URLSession ترجیح دی جاتی ہے۔
جدید Alamofire 5 publishDecodable خصوصیت کے ذریعے Combine کے ساتھ ضم ہوتا ہے، جو ایک Publisher لوٹاتا ہے، غلطی کے انتظام اور ڈیٹا کی تبدیلی کے ساتھ رد عمل والی درخواستوں کی زنجیریں بنانے کی اجازت دیتا ہے۔ async/await کے لیے، value لاحقہ والے طریقے دستیاب ہیں — مثال کے طور پر، AF.request(url).serializingDecodable(User.self).value، نحو کو انتہائی مختصر بناتا ہے اور مقامی URLSession کے ساتھ کام کرنے کی یاد دلاتا ہے۔ async/await استعمال کرتے وقت، closures کی ضرورت نہیں رہتی اور غلطی کا انتظام معیاری Swift do-catch بلاکس کے ذریعے کیا جاتا ہے، طویل مدت میں کوڈ کی دیکھ بھال اور پڑھنے کی اہلیت کو آسان بناتا ہے۔
آئیے ایک زیادہ پیچیدہ مثال دیکھتے ہیں — ایک انٹرسیپٹر کے ساتھ درخواست جو خود بخود اجازت نامہ ٹوکن شامل کرتی ہے اور 401 غلطی پر دوبارہ کوشش کرتی ہے۔ یہ JWT تصدیق استعمال کرنے والی ایپلیکیشنز کے لیے ایک عام منظر نامہ ہے۔
class AuthInterceptor: RequestInterceptor {
func adapt(_ urlRequest: URLRequest,
for session: Session,
completion: @escaping (Result<URLRequest, Error>) -> Void) {
var request = urlRequest
request.setValue("Bearer \(TokenManager.shared.token)",
forHTTPHeaderField: "Authorization")
completion(.success(request))
}
func retry(_ request: Request,
for session: Session,
dueTo error: Error,
completion: @escaping (RetryResult) -> Void) {
guard let response = request.response,
response.statusCode == 401
else { return completion(.doNotRetry) }
TokenManager.shared.refreshToken { success in
completion(success ? .retry : .doNotRetry)
}
}
}
AuthInterceptor دو پروٹوکول نافذ کرتا ہے: adapt (ہر درخواست میں ٹوکن شامل کرتا ہے) اور retry (401 غلطی پر ٹوکن کی تجدید کی کوشش کرتا ہے)۔ retry طریقہ جوابی اسٹیٹس کوڈ چیک کرتا ہے اور اگر 401 موصول ہوتا ہے، TokenManager کے ذریعے نیا ٹوکن درخواست کرتا ہے۔ کامیاب تجدید کے بعد، درخواست خود بخود دوبارہ کوشش کرتی ہے۔
سیشن کے ساتھ انٹرسیپٹر کا استعمال:
let session = Session(interceptor: AuthInterceptor())
session.request("https://api.example.com/profile")
.responseDecodable(of: Profile.self) { response in
print(response.result)
}
اس سیشن کے ذریعے تمام درخواستیں خود بخود AuthInterceptor سے گزرتی ہیں — ہیڈرز میں ٹوکن شامل کیا جاتا ہے اور 401 پر تجدید اور دوبارہ کوشش کی جاتی ہے۔ یہ ہر درخواست میں تصدیقی کوڈ کی نقل کو ختم کرتا ہے اور ٹوکن مینجمنٹ منطق کو مرکزی بناتا ہے۔
اکثر پوچھے گئے سوالات
Alamofire اعلانیہ نحو، بلٹ ان توثیق، خودکار JSON ڈی کوڈنگ اور انٹرسیپٹرز کے ساتھ URLSession پر ایک ریپر ہے۔ URLSession بغیر انحصار کے Apple کا مقامی API ہے لیکن اسی کاموں کے لیے زیادہ کوڈ درکار ہے۔ Alamofire نیٹ ورک کوڈ کے حجم کو 30–50% کم کرتا ہے۔
تجویز کردہ طریقہ Swift Package Manager ہے: Xcode میں، File → Add Packages منتخب کریں، URL https://github.com/Alamofire/Alamofire.git درج کریں اور ورژن 5.9.0 یا اس سے اوپر بتائیں۔ متبادل طور پر CocoaPods کے ذریعے: pod 'Alamofire', '~> 5.9'۔
ہاں، Alamofire 5.5 سے async/await کی حمایت شامل کی گئی۔ request، upload اور download طریقے await نحو کے ساتھ استعمال کیے جا سکتے ہیں۔ متبادل طور پر، Alamofire Publisher کے ذریعے اقدار شائع کرکے Combine کے ساتھ ضم ہوتا ہے۔
Alamofire uploadProgress اور downloadProgress طریقے فراہم کرتا ہے، جو Progress آبجیکٹ کے ساتھ closure قبول کرتے ہیں۔ پیشرفت fractionCompleted، completedUnitCount اور totalUnitCount لوٹاتی ہے، جو پیشرفت بار کے ذریعے UI میں ڈسپلے کرنے کے لیے آسان ہے۔
ہاں، Alamofire معیاری URLSessionConfiguration.background کے ذریعے بیک گراؤنڈ سیشنز کو سپورٹ کرتا ہے۔ آپ کو مناسب ترتیب کے ساتھ Session بنانا ہوگا اور AppDelegate میں ایک تکمیلی ہینڈلر رجسٹر کرنا ہوگا۔ DownloadRequest ایپلیکیشن کے چھوٹے ہونے کے بعد بھی کام جاری رکھے گا۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں