BGTaskScheduler iOS 13 اور بعد کے ایپلیکیشنز میں پس منظر کے کاموں کو شیڈول اور انجام دینے کے لیے Apple کا ایک فریم ورک ہے۔ اس نے متروک Background Fetch اور performFetch کی جگہ لے لی، پس منظر کے آپریشنز کے لیے ایک متحد API فراہم کیا۔ Apple Developer Documentation, 2026 کے مطابق، فریم ورک دو قسم کے کام شامل کرتا ہے: طویل آپریشنز کے لیے BGProcessingTask اور مختصر مواد کی تازہ کاری کے لیے BGAppRefreshTask۔
اہم نکات
BGTaskScheduler Apple کا ایک سسٹم فریم ورک ہے جو iOS 13 میں متعارف کرایا گیا اور پس منظر کے کاموں کے نفاذ کو مرکزی طور پر منظم کرتا ہے۔ اس کے آنے سے پہلے، ڈویلپرز UIApplication backgroundTasks، performFetch اور appDelegate میں ایونٹ ہینڈلنگ استعمال کرتے تھے، جس سے کوڈ کی بکھراؤ اور غیر متوقع رویہ پیدا ہوتا تھا۔
فریم ورک موخر شیڈولنگ کے اصول پر کام کرتا ہے: ایپلیکیشن منفرد شناخت کنندگان کے ساتھ کام رجسٹر کرتی ہے، اور iOS خود انہیں انجام دینے کا بہترین لمحہ طے کرتا ہے۔ سسٹم بیٹری کی سطح، صارف کی سرگرمی، نیٹ ورک کی حالت اور دیگر عوامل کو مدنظر رکھتا ہے۔
اہم صلاحیتوں میں مختصر اور طویل دونوں پس منظر کے آپریشنز کے ساتھ کام کرنا شامل ہے۔ Android میں AlarmManager کے برعکس، BGTaskScheduler درست نفاذ کے وقت کی ضمانت نہیں دیتا — سسٹم ناموافق حالات میں کام میں تاخیر کرنے کا حق محفوظ رکھتا ہے۔
BGTaskScheduler ہینڈلر پر مبنی فن تعمیر استعمال کرتا ہے۔ ایپلیکیشن ہر کام کی قسم کے لیے ایک ہینڈلر رجسٹر کرتی ہے، اور سسٹم اسے کال کرتا ہے جب مناسب وقت آتا ہے۔ فریم ورک خود کام کو براہ راست انجام نہیں دیتا — یہ صرف ایپلیکیشن کو مطلع کرتا ہے کہ اسے چلانے کا وقت آگیا ہے۔
رجسٹریشن Info.plist میں BGTaskSchedulerPermittedIdentifiers صف کے ذریعے کام کے شناخت کنندہ کا اعلان کرکے شروع ہوتی ہے۔ پھر ایپلیکیشن کوڈ میں، registerHandler(forTaskWithIdentifier:) طریقہ ایک ہینڈلر بندش کے ساتھ کال کیا جاتا ہے۔
import BackgroundTasks
let taskID = "com.example.app.refresh"
BGTaskScheduler.shared.registerHandler(
forTaskWithIdentifier: taskID,
using: DispatchQueue.global()
) { task in
task.expirationHandler = {
// زبردستی ختم کرنے پر بلایا جاتا ہے
}
processBackgroundTask(task as! BGAppRefreshTask)
}
رجسٹریشن کے بعد، ایپلیکیشن کو submitTaskRequest کے ذریعے واضح طور پر کام کے نفاذ کی درخواست کرنی ہوتی ہے۔ درخواست میں کام کا شناخت کنندہ اور ممکنہ ابتدائی تاریخ شامل ہوتی ہے۔ سسٹم درخواست کو محفوظ کرتا ہے اور جب حالات مناسب سمجھتا ہے تو اسے پروسیس کرتا ہے۔
let request = BGAppRefreshTaskRequest(
identifier: taskID
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 3600)
do {
try BGTaskScheduler.shared.submit(request)
} catch {
print("شیڈولنگ کی خرابی: \(error)")
}
BGTaskScheduler دو اہم اقسام کے کام فراہم کرتا ہے، ہر ایک اپنے استعمال کے معاملے کے لیے ڈیزائن کیا گیا ہے۔ صحیح قسم کا انتخاب سسٹم کے ذریعے کامیاب کام کے نفاذ کے امکان کو براہ راست متاثر کرتا ہے۔
BGAppRefreshTask مختصر پس منظر میں مواد کی تازہ کاری کے لیے ڈیزائن کیا گیا ہے: نیا ڈیٹا لوڈ کرنا، سرور کے ساتھ مطابقت پذیر ہونا، ویجٹ اپ ڈیٹ کرنا۔ نفاذ کا وقت 30 سیکنڈ تک محدود ہے، جس کے بعد سسٹم کام کو زبردستی ختم کر دیتا ہے۔ اس قسم کا کام BGProcessingTask سے زیادہ کثرت سے چلتا ہے اور اس کی ترجیح زیادہ ہوتی ہے۔
BGProcessingTask طویل آپریشنز کے لیے ڈیزائن کیا گیا ہے: میڈیا فائلوں کی پروسیسنگ، Core Data انڈیکسنگ، بیک اپ بنانا۔ کام کئی منٹ تک چل سکتا ہے، لیکن سسٹم اسے کم کثرت سے اور صرف سازگار حالات میں شروع کرتا ہے — بجلی سے منسلک، مستحکم Wi-Fi اور ڈیوائس پر کم بوجھ۔
| پیرامیٹر | BGAppRefreshTask | BGProcessingTask |
|---|---|---|
| وقت کی حد | 30 سیکنڈ | کئی منٹ |
| شروع ہونے کی تعدد | اعلی | کم |
| شرائط | کوئی بھی | بجلی + Wi-Fi |
| بجلی درکار | نہیں | سفارش کردہ |
| مثال | فیڈ اپ ڈیٹ | ویڈیو پروسیسنگ |
درست رجسٹریشن BGTaskScheduler کے کام کرنے کے لیے ایک لازمی شرط ہے۔ اگر کوئی کام Info.plist میں رجسٹر نہیں ہے، تو سسٹم اسے انجام دینے کی کسی بھی درخواست کو نظر انداز کر دے گا۔
Info.plist فائل میں سٹرنگ شناخت کنندگان کی فہرست کے ساتھ BGTaskSchedulerPermittedIdentifiers صف شامل ہونی چاہیے۔ ہر شناخت کنندہ ایپلیکیشن کے اندر منفرد ہونا چاہیے۔ Apple ریورس ڈومین نوٹیشن استعمال کرنے کی سفارش کرتا ہے۔
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
<string>com.example.app.refresh</string>
<string>com.example.app.processing</string>
</array>
کام شیڈول کرنے کے لیے submitTaskRequest طریقہ استعمال کریں۔ اگر کسی کام کی مزید ضرورت نہیں ہے، تو اسے cancelTaskRequest یا cancelAllTaskRequests کے ذریعے منسوخ کیا جا سکتا ہے۔ سسٹم ایپلیکیشن حذف ہونے یا ڈیٹا ری سیٹ ہونے پر بھی خود بخود کاموں کو منسوخ کرتا ہے۔
BGTaskScheduler getPendingTaskRequests کے ذریعے شیڈول شدہ کاموں کی حالت کو ٹریک کرنے کی صلاحیت فراہم کرتا ہے۔ یہ طریقہ ان کی قسم، شناخت کنندہ اور earliestBeginDate کے بارے میں معلومات کے ساتھ تمام فعال درخواستوں کی فہرست لوٹاتا ہے۔ ہر درخواست کے لیے، آپ چیک کر سکتے ہیں کہ آیا یہ پہلے ہی مکمل ہو چکی ہے یا منسوخ ہو چکی ہے، اور دوبارہ شیڈول کرنے کا فیصلہ کر سکتے ہیں۔
یہ نوٹ کرنا ضروری ہے کہ سسٹم پس منظر کے کام کی کامیابی کے بارے میں براہ راست کال بیک فراہم نہیں کرتا — ہینڈلر کو خود کام کی خصوصیات کے ذریعے نتیجہ کی اطلاع دینی چاہیے۔ setTaskCompleted کسی کام کو کامیابی سے مکمل ہونے کے طور پر نشان زد کرنے کی اجازت دیتا ہے، جس کے بعد سسٹم اس قسم کا اگلا شیڈول شدہ کام شروع کر سکتا ہے۔ اگر کوئی کام setTaskCompleted کو کال نہیں کرتا ہے، تو سسٹم اسے ٹائم آؤٹ یا زبردستی ختم ہونے پر مکمل سمجھتا ہے۔
تشخیص کے لیے، ہینڈلر میں OSLog استعمال کرنے اور Mac پر Console.app کے ذریعے لاگ دیکھنے کی سفارش کی جاتی ہے۔ Apple MetricKit ٹول بھی فراہم کرتا ہے پس منظر کے کام کی کارکردگی کے تجزیہ کے لیے — یہ نفاذ کے وقت، توانائی کی کھپت اور شروع ہونے کی تعدد کے بارے میں ڈیٹا اکٹھا کرتا ہے جو اصلاح کے لیے استعمال کیا جا سکتا ہے۔
// مخصوص کام منسوخ کریں
BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: taskID)
// تمام کام منسوخ کریں
BGTaskScheduler.shared.cancelAllTaskRequests()
// شیڈول شدہ کام چیک کریں
BGTaskScheduler.shared.getPendingTaskRequests { requests in
print("\(requests.count) کام شیڈول کیے گئے")
}
BGTaskScheduler پس منظر کے کام پر سخت حدود عائد کرتا ہے۔ سسٹم ناموافق حالات میں کام کو غیر معینہ مدت تک موخر کر سکتا ہے۔ ڈویلپرز کو سمجھنا چاہیے کہ فریم ورک ریئل ٹائم کاموں کے لیے نہیں ہے۔
اہم حدود میں شامل ہیں: سسٹم مخصوص وقت پر کام کے نفاذ کی ضمانت نہیں دیتا، بیک وقت کاموں کی زیادہ سے زیادہ تعداد محدود ہے، اور توانائی کی کھپت کو سختی سے کنٹرول کیا جاتا ہے۔ ایک کے بعد ایک کئی کام چلانے سے وہ ضم یا منسوخ ہو سکتے ہیں۔
نفاذ کے امکان کو بڑھانے کے لیے، BGProcessingTask کے لیے 1 گھنٹے سے پہلے اور BGAppRefreshTask کے لیے 15 منٹ سے پہلے earliestBeginDate سیٹ نہ کرنے کی سفارش کی جاتی ہے۔ expirationHandler کو ہینڈل کرنا بھی ضروری ہے — اگر کوئی کام اپنی وقت کی حد کو پورا نہیں کر سکتا، تو سسٹم مناسب ختم کرنے کے لیے اس ہینڈلر کو کال کرتا ہے۔ مسلسل پس منظر کے کام کے چکر کو برقرار رکھنے کے لیے ہینڈلر کے اندر ہی دوبارہ شیڈولنگ کی جانی چاہیے۔
ایک اور اہم حد نیٹ ورک کی درخواستوں سے متعلق ہے۔ BGTaskScheduler کام کے نفاذ کے دوران فعال نیٹ ورک کنکشن کی ضمانت نہیں دیتا۔ ایپلیکیشن کو NWPathMonitor کے ذریعے آزادانہ طور پر نیٹ ورک کی دستیابی چیک کرنی چاہیے اور کنکشن نہ ہونے پر پروسیسنگ موخر کرنی چاہیے۔ یہ Android JobScheduler سے مختلف ہے، جو کسی مخصوص قسم کے نیٹ ورک سے منسلک ہونے پر ہی کام کو فعال کر سکتا ہے۔ عملی طور پر، ڈویلپرز اکثر قابل اعتماد ڈیٹا لوڈنگ کے لیے BGTaskScheduler کو NSURLSession کے پس منظر URL سیشنز کے ساتھ جوڑتے ہیں۔
macOS Catalina سے شروع ہو کر، BGTaskScheduler Mac پر بھی دستیاب ہے۔ یہ Apple Silicon پر چلنے والی UIKit ایپلیکیشنز کے لیے کراس پلیٹ فارم پس منظر کے کام بنانے کی اجازت دیتا ہے۔ watchOS پر، فریم ورک محدود فعالیت رکھتا ہے — صرف مختصر BGAppRefreshTask کمپلیکیشنز کو اپ ڈیٹ کرنے اور iPhone کے ساتھ ڈیٹا سنک کرنے کے لیے دستیاب ہیں۔ ڈویلپرز کو پس منظر کے فن تعمیر کی منصوبہ بندی کرتے وقت پلیٹ فارم کے فرق کو مدنظر رکھنا چاہیے۔
Apple BGTaskScheduler کو ڈیبگ کرنے کے لیے کئی ٹولز فراہم کرتا ہے۔ lldb میں کمانڈ e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] سسٹم کی حدود کو نظرانداز کرتے ہوئے پس منظر کے کام کو زبردستی شروع کرتی ہے۔ Xcode کے Debug مینو میں Simulate Background Fetch فلیگ ہے جو ایک مختصر پس منظر اپ ڈیٹ کو ایمولیٹ کرتا ہے۔ کارکردگی کے تجزیہ کے لیے MetricKit استعمال کیا جاتا ہے — یہ ہر کام کے شروع ہونے کی تعدد، نفاذ کی مدت اور توانائی کی کھپت کے بارے میں معلومات اکٹھا کرتا ہے۔ یہ ڈیٹا شیڈولنگ فریکوئنسی کو بہتر بنانے اور صحیح کام کی قسم منتخب کرنے میں مدد کرتا ہے۔
عملی طور پر، BGTaskScheduler ویجٹ ڈیٹا کو اپ ڈیٹ کرنے، iCloud سنک، مواد کے ساتھ پش نوٹیفیکیشنز پروسیس کرنے اور Spotlight تلاش کے لیے انڈیکسنگ کے لیے موزوں ہے۔ یہ ریئل ٹائم تجزیہ، چیٹ ایپلیکیشنز یا کسی بھی ایسے کام کے لیے موزوں نہیں ہے جس میں فوری نفاذ کی ضرورت ہو۔
BGTaskScheduler کے گہرائی سے مطالعہ کے لیے، Apple سرکاری WWDC دستاویزات کی سفارش کرتا ہے: "Advances in Background Tasks" سیشن (2020) متروک APIs سے منتقلی کا احاطہ کرتا ہے، اور "Background Tasks in Practice" (2021) میں حقیقی استعمال کے معاملات شامل ہیں۔ Energy Efficiency Guide سیکشن بھی مفید ہے، جس میں بیان کیا گیا ہے کہ فریم ورک Apple کی مجموعی توانائی بچانے کی حکمت عملی میں کیسے فٹ بیٹھتا ہے۔ کوڈ کی مثالیں GitHub پر سرکاری Apple Developer ریپوزٹری میں iOS اور macOS کے لیے مکمل پروجیکٹس کے ساتھ دستیاب ہیں۔
اکثر پوچھے گئے سوالات
Background Fetch فی ایپلیکیشن ایک پس منظر کے کام تک محدود تھا اور اس میں ترجیحی طریقہ کار نہیں تھا۔ BGTaskScheduler مختلف اقسام کے متعدد کاموں کو سپورٹ کرتا ہے، ایک متحد API اور خودکار توانائی کا انتظام فراہم کرتا ہے۔
Apple رجسٹرڈ شناخت کنندگان کی تعداد پر کوئی واضح حد مقرر نہیں کرتا، لیکن عملی طور پر 5–10 سے زیادہ کام استعمال نہ کرنے کی سفارش کی جاتی ہے۔ بڑی تعداد سسٹم وسائل کے مقابلے کی وجہ سے ہر مخصوص کام کے مکمل ہونے کے امکان کو کم کرتی ہے۔
ڈیبگنگ کے لیے، lldb میں کمانڈ e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] استعمال کریں۔ یہ سسٹم کی حدود کو نظرانداز کرتے ہوئے کام کو زبردستی شروع کرتا ہے۔ Debug مینو میں Xcode Simulate Background Fetch فلیگ بھی دستیاب ہے۔
ہاں، BGTaskScheduler ایک عمل شروع کر سکتا ہے چاہے ایپلیکیشن صارف کے ذریعے زبردستی بند کر دی گئی ہو۔ تاہم، سسٹم اضافی تاخیر کا اطلاق کر سکتا ہے، اور تمام کام کی اقسام اس منظر نامے میں نفاذ کی ضمانت نہیں دیتیں۔
سسٹم expirationHandler کو کال کرتا ہے، کام کو سگنل دیتا ہے کہ اسے ختم ہونے کی ضرورت ہے۔ اگر ایپلیکیشن اس سگنل کو نظر انداز کرتی ہے اور کام جاری رکھتی ہے، تو iOS عمل کو زبردستی ختم کر دیتا ہے۔ اس کے بعد، سسٹم ایپلیکیشن کے تمام پس منظر کے کاموں کی ترجیح کم کر سکتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں