Background Modes iOS کی قابل اعلان صلاحیتوں کا ایک سیٹ ہے جو ایپ کو پس منظر میں جانے کے بعد کوڈ جاری رکھنے کی اجازت دیتا ہے۔ ہر موڈ ایک مخصوص قسم کے کام سے مطابقت کرتا ہے: آڈیو، جیولوکیشن، VoIP، Bluetooth، fetch اور processing۔ Apple، 2026 کے مطابق، Background Modes کا غلط استعمال App Store جائزہ میں ایپ مسترد کی ایک عام وجہ ہے۔
اهم نکات
Background Modes Xcode پروجیکٹ کی صلاحیتیں ہیں جو پس منظر میں مخصوص قسم کے آپریشن کرنے کے ایپ کے ارادے کا اعلان کرتی ہیں۔ Android کے برخلاف، جہاں ایپ پس منظر میں کوئی بھی Service شروع کر سکتا ہے، iOS کو Info.plist میں موڈ کے واضح اعلان کی ضرورت ہے۔ ہر موڈ کے سخت استعمال قواعد ہیں اور Apple جائزے کے دوران اسے تصدیق کرتا ہے۔
جب ایپ پس منظر میں جاتا ہے، iOS اسے 3–5 سیکنڈ میں معطل کر دیتا ہے۔ اگر ایپ Background Mode کا اعلان کرتا ہے اور متبقہ API (مثال کے طور آڈیو کے لیے AVAudioSession) کو فعالی سے استعمال کرتا ہے، سسٹم اسے ایک خاص عمل کے موڈ میں رکھتا ہے۔ ایپ میمری میں رہتا ہے اور موڈ کی قسم سے محدود کوڈ چلا سکتا ہے۔
iOS مندرجہ ذیل Background Modes کو سپورٹ کرتا ہے: آڈیو، مقام، VoIP، Bluetooth LE (BLE آلات)، Background Fetch (متوقع تازہ کاریاں)، Background Processing (طویل کام)، External Accessory Communication، Push to Talk (PTT) اور HealthKit۔ ہر موڈ کو ایپ تفصیل میں جواز کی ضرورت ہے۔
| موڈ | Info.plist کلید | مقصد | iOS ورشن |
|---|---|---|---|
| Audio | audio | پس منظر آڈیو، AirPlay | 4.0+ |
| Location | location | مقام کا ٹریکنگ | 4.0+ |
| VoIP | voip | VoIP پش اطلاعات | 4.0+ |
| BLE | bluetooth-central | BLE آلات کے ساتھ کام | 7.0+ |
| Fetch | fetch | متوقع ڈیٹا ڈاؤن لوڈ | 7.0+ |
| Processing | processing | طویل پس منظر کام | 13.0+ |
| Push to Talk | push-to-talk | پش-ٹو-ٹاک آواز | 16.0+ |
آڈیو پس منظر موڈ سب سے عام موڈ ہے، جو موسیقی پلیرز، پاڈکاسٹ ایپ اور آڈیو سروسز استعمال کرتے ہیں۔ ایپ آڈیو پلے بیک جاری رکھ سکتا ہے، کنٹرول سینٹر کے ذریعے کنٹرول کیا جا سکتا ہے اور لاک اسکرین پر ظاہر ہو سکتا ہے۔ اسے فعال کرنے کے لیے .playback زمرے کے ساتھ AVAudioSession ترتیب دےنا کافی ہے۔
پس منظر میں آڈیو کے کام کرنے کے لیے، AVAudioSession کو ترتیب دےنا اور فعال کرنا ضروری ہے۔ .playback زمرہ سسٹم کو بتاتا ہے کہ ایپ آڈیو چلا رہا ہے اور پس منظر میں فعال رہنا چاہیے۔ اس ترتیب کے بغیر، ایپ کو چھوٹا کرنے کے 5–10 سیکنڈ بعد آڈیو رک جائے گا۔
import AVFoundation
func configureAudioSession() {
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(
.playback,
mode: .default,
options: []
)
try session.setActive(true)
} catch {
print("آڈیو سیشن کی غلطی: \(error)")
}
}
کنٹرول سینٹر اور لاک اسکرین کے ساتھ انضمام کے لیے MPRemoteCommandCenter ترتیب دےنا ضروری ہے۔ یہ چلائیں، روکیں، اگلا اور پځھلا ٹریک کے حکموں کو سنبھالتا ہے۔ میٹا ڈیٹا ظاہر کرنے کے لیے MPNowPlayingInfoProperty کو اپڈیٹ کرنا بھی ضروری ہے: ٹریک کا نام، فنکار، آرٹ ورک اور پلے بیک کی ترقی۔
iOS 14 سے شروع کرتے ہوئے، آڈیو پس منظر موڈ ویڈیو کے لیے Picture in Picture کو بھی سپورٹ کرتا ہے۔ ایپ چھوٹا ہونے پر تیرتے ہوئے وینڈو میں ویڈیو دیڤائے جاری رکھ سکتا ہے۔ فعال کرنے کے لیے AVPlayerLayer کے ساتھ AVPictureInPictureController استعمال کریں۔ یہ موڈ صرف اس وقت کام کرتا ہے جب ایپ آڈیو ٹریک چلا رہا ہو۔
مقام پس منظر موڈ ایپ کو پس منظر میں مقام کی تازہ کاریاں حاصل کرنے کی اجازت دیتا ہے۔ یہ نیویگیشن ایپس، فٹنس ٹریکرز، ڈلیوری ایپس اور سوشل نیٹورکس میں استعمال ہوتا ہے۔ اس موڈ کے بغیر، ایپ پس منظر میں جاتے وقت صرف ایک بار مقام حاصل کرتا ہے، اس کے بعد تازہ کاریاں رک جاتی ہیں۔
CLLocationManager کئی ٹریکنگ حکمت عملیں کو سپورٹ کرتا ہے: اہم تبدیلی مقام، معیاری مقام کا ٹریکنگ اور علاقہ کی نگرانی۔ زیادہ سے زیادہ دروستی کے ساتھ پس منظر میں کام کے لیے، allowsBackgroundLocationUpdates = true اور pausesLocationUpdatesAutomatically = false استعمال کریں۔
پس منظر میں مسلسل مقام کا ٹریکنگ سب سے زیادہ قابلیت کھانے والے مناظر میں سے ایک ہے۔ iOS خود بخود حرکت کی رفتار کے مطابق تازہ کاریوں کی فریکونسی کو کم کرتا ہے: چلتے وقت ہر 10–30 سیکنڈ بعد، گاڑی چلاتے وقت ہر 1–5 سیکنڈ بعد۔ نیویگیشن کے لیے، desiredAccuracy = kCLLocationAccuracyBestForNavigation استعمال کریں۔
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.activityType = .fitness
locationManager.startUpdatingLocation()
significant-change location موڈ مقام پس منظر موڈ کے بغیر کام کرتا ہے — سسٹم ایپ کو صرف اس وقت جگاتا ہے جب نقاط میں اہم تبدیلی آتی ہے (عموماً 500 میٹر یا زیادہ)۔ اسے مسلسل GPS کی ضرورت نہیں ہے، بیٹری بچاتا ہے۔ موسم کی ایپ کے لیے موزوں ہے جو صاحب استعمال کے حرکت کرنے پر ڈیٹا اپڈیٹ کرتی ہیں۔
Bluetooth LE پس منظر موڈ ایپ کو پس منظر میں BLE آلات کے ساتھ باتچیت کرنے کی اجازت دیتا ہے۔ یہ فٹنس بینڈ، طبی سینسرز، سمارٹ ہوم آلات اور بیکن نیویگیشن میں استعمال ہوتا ہے۔ موڈ دو ذیلی قسموں میں تقسیم ہوتا ہے: bluetooth-central (ایپ آلات سے منسلک ہوتا ہے) اور bluetooth-peripheral (ایپ ایک آلہ کے طور پر کام کرتا ہے)۔
Central کے طور پر کام کرنے والا ایپ پس منظر میں BLE آلات کو اسکین کر سکتا ہے اور ان سے منسلک ہو سکتا ہے۔ ایسا کرنے کے لیے، Background Modes میں bluetooth-central متعین کریں اور CBCentralManagerScanOptionAllowDuplicatesKey اختیار کے ساتھ CBCentralManager.scanForPeripherals کو کال کریں۔ پس منظر میں، اسکیننگ کم فریکونسی پر چلتا ہے — سسٹم قابلیت بچانے کے لیے دریافت میں تاخیر کر سکتا ہے۔
Peripheral کے طور پر کام کرنے والا ایپ خدمات کا اشتہار دے سکتا ہے اور دوسرے آلات کی درخواستوں کا جواب دے سکتا ہے۔ bluetooth-peripheral موڈ ایپ کو پس منظر میں بھی دوسرے BLE آلات کو نظر آنے کی اجازت دیتا ہے۔ یہ HealthKit ایپ اور IoT حلوں میں استعمال ہوتا ہے۔
iBeacon نگرانی بغیر اضافی اتcازتوں کے پس منظر میں کام کرتی ہے — سسٹم خود Beacon علاقوں میں داخل اور اخراج کا ٹریک رکھتا ہے۔ لیکن Beacon کے مواد (proximity UUID، major، minor) کو اسکین کرنے کے لیے Bluetooth اجازت اور bluetooth-central Background Mode کی ضرورت ہے۔ نگرانی کے لیے CLBeaconRegion کے ساتھ CLLocationManager استعمال کریں۔
VoIP پس منظر موڈ صوتی مواصلات کے ایپ (Skype، Zoom، WhatsApp) کے لیے ڈیزائن کیا گیا ہے۔ یہ موڈ ایپ کو آنے والی کالز وصول کرنے کے لیے سرور سے منسلک رہنے کی اجازت دیتا ہے۔ iOS 8 سے شروع کرتے ہوئے، VoIP کے لیے PushKit استعمال ہوتا ہے — ایک فریم ورک جو APNs کو شامل کیے بغیر VoIP سرور سے پش اطلاعات کو سنبھالتا ہے۔
PushKit واحد میکانزم ہے جو ڈاؤنڈ پر VoIP اطلاعات کی ترسیل کی ضمانت دیتا ہے۔ جب PushKit اطلاع موصول ہوتی ہے، سسٹم ایپ کو جگاتا ہے، چاہے وہ ختم کر دیا گیا ہو۔ ایپ کو 30 سیکنڈ میں سرور کے ساتھ رابطہ قائم کرنا چاہیے اور آنے والی کال کے لیے مقامی اطلاع ظاہر کرنا چاہیے۔
import PushKit
class VoIPHandler: NSObject, PKPushRegistryDelegate {
func pushRegistry(
_ registry: PKPushRegistry,
didReceiveIncomingPushWith payload: PKPushPayload,
for type: PKPushType,
completion: @escaping () -> Void
) {
let caller = payload.dictionaryPayload["caller"] as! String
reportIncomingCall(from: caller)
completion()
}
}
PushKit کو عام اطلاعات کے لیے استعمال نہیں کیا جا سکتا — صرف VoIP، watchOS مواصلات اور فائل فراہم کنندگان کے لیے۔ Apple جائزے کے دوران اسے تصدیق کرتا ہے۔ غیر جائز استعمال ایپ مسترد کا سبب بنتا ہے۔ iOS 13 سے شروع کرتے ہوئے، PushKit صرف اطلاع پہنچاتا ہے — کال کی سکرین ظاہر کرنے کے لیے CXProvider (CallKit) کو کال کرنا لازمی ہے۔
Background Fetch اور Background Processing پس منظر مواد کی تازہ کاری اور طویل کاموں کے لیے موڈ ہیں۔ Fetch مختصر متوقع تازہ کاری (30 سیکنڈ تک) کے لیے، Processing شرائط (Wi-Fi، چارجنگ) کے ساتھ طویل کاموں (10 منٹ تک) کے لیے ہے۔ Processing صرف iOS 13+ پر دستیاب ہے۔
Fetch موڈ سسٹم کو نئے مواد ڈاؤن لوڈ کرنے کے لیے وقتا بہ وقت ایپ جگانے کی اجازت دیتا ہے۔ سسٹم صاحب استعمال کے رویہ کا تجزیہ کرتا ہے اور موزوں وقت کا انتخاب کرتا ہے۔ ایپ کو 30 سیکنڈ میں completion handler کو کال کرنا چاہیے۔ Fetch خبروں کی ایپس، سوشل میڈیا فیڈز اور موسم کے لیے موزوں ہے۔
BGProcessingTask ان کاموں کے لیے ڈیزائن کی گئی ہے جو صاحب استعمال کی شمولیت کے بغیر چل سکتے ہیں: کیش صفائی، بڑے ڈیٹابیس ہم آہنگی، میڈیا فائل پروسیسنگ۔ سسٹم کام کو صرف مواتر حالات میں شروع کرتا ہے — ڈاؤنڈ چارج ہو رہا ہو، Wi-Fi سے منسلک ہو، کم بیجلی موڈ میں نہ ہو۔ 10 منٹ تک دستیاب ہے۔
BGProcessingTask کے لیے، requiresExternalPower اور requiresNetworkConnectivity کی وضاحت کرنا ضروری ہے۔ اگر شرائط پوری نہیں ہوتیں تو سسٹم عمل کو لامتعین مدت کے لیے ملتوی کر سکتا ہے۔ BGAppRefreshTask کے برخلاف، جسے دن میں کم سے کم ایک بار چلنا چاہیے، Processing کو ہفتے تک چلایا نہ جا سکتا ہے اگر ڈاؤنڈ شازہ ہی چارج کیا جاتا ہے۔
Apple ایپ جائزے کے دوران Background Modes کے استعمال کی سختی سے جانچ کرتا ہے۔ بنیادی قاعدہ: ہر فعال موڈ کو ایپ کی فنکشنالٹی سے جواز دیا جانا چاہیے۔ اگر ایپ Location Mode کا اعلان کرتا ہے لیکن جیولوکیشن استعمال نہیں کرتا، تو اسے صلاحیت ہٹانے کی ضرورت کے ساتھ مسترد کر دیا جائے گا۔
سب سے عام خلافتیں: Location Mode واضح ضرورت کے بغیر (ایپ اشتہار دیڤانے کے لیے “ہمیشہ” رسائی کا مطالبہ کرتا ہے)، پس منظر آڈیو پلے بیک کے بغیر Audio Mode، PushKit کے بغیر VoIP، Bluetooth آلات کے بغیر BLE Mode۔ Apple اپڈیٹ کے مرحلے پر بھی ایپ کو مسترد کر سکتا ہے اگر موڈ مزید استعمال نہیں ہوتا۔
جائزے کے لیے جمع کرتے وقت، نوٹس میں ہر موڈ کے لیے مخصوص جواز فراہم کریں۔ مثال کے طور پر، “Location Background Mode کو فٹنس فیچر میں صاحب استعمال کے راستے کو ٹریک کرنے کے لیے استعمال کیا جاتا ہے”۔ وضاحت کے بغیر، جائزہ لنے والا شخص ایپ کو مسترد کر سکتا ہے۔ خفیہ فنکشنز (VoIP) کے لیے، Apple ایک ٹیسٹ اکاؤنٹ کی طلب کر سکتا ہے۔
موڈ کا کم از کم ضروری سیٹ استعمال کریں۔ اگر آپکے ایپ کو ہر گھنٹے ایک بار پس منظر ڈیٹا ڈاؤن لوڈ کی ضرورت ہے — Location Mode فعال نہ کریں، Fetch یا BGAppRefreshTask استعمال کریں۔ اضافی موڈ نہ صرف مسترد کینے کا سبب بنتے ہیں بلکہ منفی تاثر بھی ڈالتے ہیں: صاحب استعمال ترتیبات میں دیکھتا ہے کہ ایپ پس منظر میں جیولوکیشن استعمال کرتا ہے۔
اکثر پوچے جانے والے سوالات
تعداد کی کوئی حد نہیں ہے، لیکن ہر موڈ کو ایپ کی فنکشنالٹی سے جواز دیا جانا چاہیے۔ ضرورت کے بغیر تمام موڈ کو فعال کرنا جائزے کے دوران مسترد کی ایک یقینی وجہ ہے۔ عملی حد فی ایپ 2–3 موڈ ہے، ورنہ صاحب استعمال بہت سارے اجازت کے مطالبات دیکھے گا۔
UIApplication.shared.applicationState استعمال کریں — ایپ چیک کر سکتا ہے کہ وہ پس منظر میں ہے (state == .background)۔ رویۇں کو بدلنے کے لیے UIApplication.didEnterBackgroundNotification اور willEnterForegroundNotification اطلاعات کو بھی دیڤا جا سکتا ہے۔
Audio — سپیکر یا ہیڈفون سے آواز چلانا۔ AirPlay — Apple TV اور دوسرے AirPlay آلات پر آڈیو اور ویڈیو کا سٹریمنگ۔ عمل میں، Audio Mode دونوں مناظر کا احاطہ کرتا ہے کیونکہ AirPlay آڈیو سیشن استعمال کرتا ہے۔ iOS 7+ سے علاوہ ایک علیحدہ AirPlay موڈ کی ضرورت نہیں ہے۔
ہاں، اس کے لیے requestAlwaysAuthorization کے بجائے requestWhenInUseAuthorization() استعمال کریں۔ ایپ صرف اگری پس منظر میں مقام حاصل کرے گا۔ اگر پس منظر میں مختصر ٹریکنگ کی ضرورت ہو تو startUpdatingLocation() کو کال کریں اور willResignActive میں اسے روکیں۔
ہر موڈ بجلی کی کھپت میں اضافہ کرتا ہے۔ Location Mode سب سے زیادہ بجلی کھانے والا موڈ ہے، مسلسل ٹریکنگ سے بیٹری کی زندگی 30–50% تک کم ہو سکتی ہے۔ Audio Mode متوسط (15–20%) ہے۔ Fetch اور Processing حد ادنی ہیں (2–5%)۔ BLE Mode Bluetooth LE کی قابلیت کی کارکردگی کے سبب کم (5–10%) ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں