Table of Contents

لماذا مهام أساسية تتعلق بالاستجابة للنظام الدولي لمراقبة المناخ

ويتوقع المستعملون أن يكون جهاز المراقبة الجوية الكهربائية الضوئية سلسا، وينبغي أن تكون التفاعلات فورية، وأن يكون المحتوى جديدا في اللحظة التي يفتح فيها التطبيق، ويتطلب تحقيق ذلك القيام بأعمال تنزيلية لا تحتاج إلى أن تحدث في الملعب، وتسمح المهام الأساسية بتطبيق عمليات مثل تزامن البيانات، أو المحتوى المسبق، أو التنظيف دون إعاقة واجهة المستعملين.

والمفتاح هو استخدام الطريقة الصحيحة لتنفيذ الخلفية لكل عملية، وإطاعة القواعد الصارمة التي وضعها مكتب خدمات الرقابة الداخلية بشأن تنفيذ الخلفية، والقصد من ذلك هو إعطاء الأولوية لتطبيق المستخدم الحالي، وقتل عمليات المعلومات الأساسية عندما تتطلبها قيود الذاكرة أو القوى، ولذلك فإن فهم إطار المهام الأساسية الذي بدأ العمل به في نظام iOS 13 أمر أساسي لبناء تطبيق عصري حسن الأداء.

فهم المعلومات الأساسية

ويوفر النظام عدة آليات للعمل في مجال المعلومات الأساسية، تكون كل منها مناسبة لمختلف حالات الاستخدام، أما إطار BackgroundTasks] فهو النهج الموصى به للمهام القابلة للتأجيل التي لا تحتاج إلى أن تحدث في لحظة دقيقة، وهو يعمل من خلال الاضطلاع بمهام الجدول الزمني للنظام في الأوقات المثلى، مع مراعاة عوامل مثل الربط الشبكي، ومستوى البطاريات، وأنماط مشاركة المستعملين.

وتوجد أساليب أخرى لتنفيذ الخلفية بالنسبة لسيناريوهات محددة:

  • Background fetch] - a short opportunity (approximately 30 seconds) to download small amounts of content periodically.
  • Background processing] - a longer window ( minutes) for heavier tasks like database maintenance or asset pruning.
  • الإخطارات عن بعد ] - الاستيقاظ من تطبيق تجهيز الحمولات مع العلم .
  • URLSession background transfers] - تحميل أو تحميل البيانات حتى لو تم تعليق التطبيق أو إنهاؤه.
  • VoIP / audio / location] - الوسائط المتخصصة التي تبقي التطبيق لفترات أطول.

وبالنسبة للعمل المتعلق بالخلفية العامة الغرض الذي يمكن تحديده دون الحاجة الملحة إلى استخدامه، فإن " بيغ تاسك شيدولر " ] هو الخيار الأفضل، وهو يعزز الجدولة ويقلل من خطر تعرضه للقتل على يد النظام ويحسن حياة البطاريات مقارنة بالنهج القديمة مثل .]

العناصر الرئيسية لإطار عمل النقاط الأساسية

  • BGProcessingTask] - يقصد به المهام التي تستغرق وقتاً ملحوظاً، مثل القيام بمزامنة كاملة، أو تنظيف ملفات مزودة بالكاميرات، أو تحديث قاعدة بيانات محلية، ويعطي النظام هذه المهام ميزانية زمنية أكبر (دقيقة) ويحدد مواعيدها عندما تكون الظروف مواتية (مثلاً، جهاز على شبكة وي-Fi، والشحن).
  • BGAppRefreshTask - مصممة لتنقية قصيرة، عادة ما تستمر بضع ثوان، وتستخدمها عندما يحتاج الطلب إلى تحديث بيانات UI أو جلب كميات صغيرة من المحتوى بحيث يُظهر في المرة القادمة التي يفتح فيها المستخدم التطبيق معلومات جديدة، ويحاول تشغيل هذه المهام قبل أن يبدأ المستخدم تشغيله.
  • BGTaskScheduler] - المدير المركزي الذي يسجل هوية المُحددات ويقدم الطلبات ويُسيطر على مُعالجك عندما تبدأ المهمة، ويعالج أيضاً مسألة انتهاء الخدمة وإعادة جدولتها.

ويتقاسم نوعا العمل دورة حياة مماثلة: السجل، الجدول الزمني، المعالج، وإعادة الجدولة، ويقرر النظام بالضبط متى ينفذ المهمة؛ ولا يمكن أن تقدم سوى تلميح عن طريق .

تنفيذ مهام أساسية - دليل الخطوة -

ولإدماج مهام المعلومات الأساسية في تطبيق نظام المعلومات الخاص بك، يجب أن تستكملوا عدة خطوات: تمكين القدرات، وتسجيل محددات المهام، وتحديد مواعيد العمل، ومعالجة التنفيذ، وإدارة الصلاحية، وريثما نعبر كل مرحلة من مراحلها بأمثلة محددة.

1 - تمكين طرائق القدرة على العمل

In Xcode, navigate to your target’s Signing " Capabilities tab and add the Background Modes[FT:3]. check at least Background processing and/or [FT

2 - تحديد المهام المتعلقة بالسجلات

ويجب أن يكون لكل مهمة من مهام المعلومات الأساسية سلسلة فريدة من نوعها لتحديد الهوية، عادة في شكل معكوس من أشكال النظم العالمية لسواتل الملاحة (مثلاً، [(FLT:3])) وتسجل هذه المواصفات في وقت مبكر من دورة إطلاق التطبيق، مثل دورة إطلاقه في [().

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
 BGTaskScheduler.shared.register(forTaskWithIdentifier: "com.example.myapp.refresh", using: nil) { task in
 self.handleAppRefresh(task: task as! BGAppRefreshTask)
 }
 BGTaskScheduler.shared.register(forTaskWithIdentifier: "com.example.myapp.cleanup", using: nil) { task in
 self.handleDatabaseCleanup(task: task as! BGProcessingTask)
 }
 return true
}

الإقفال يلتقط هدف المهمة، داخله تُطلق على مُعالجك، تذكر أن تُلقي المهمة على النوع المناسب من الخرسانة.

3 - المهام المتعلقة بالمعلومات الأساسية المدرجة في الجدول الزمني

وينبغي أن يحدث تقديم الطلبات عندما يذهب التطبيق إلى الخلفية أو عندما تنشأ حاجة متكررة.

func scheduleAppRefresh() {
 let request = BGAppRefreshTaskRequest(identifier: "com.example.myapp.refresh")
 request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60) // at least 15 minutes from now
 do {
 try BGTaskScheduler.shared.submit(request)
 } catch {
 print("Could not schedule app refresh: \(error.localizedDescription)")
 }
}

func scheduleDatabaseCleanup() {
 let request = BGProcessingTaskRequest(identifier: "com.example.myapp.cleanup")
 request.earliestBeginDate = Date(timeIntervalSinceNow: 60 * 60) // at least 1 hour
 request.requiresNetworkConnectivity = true // only run when network is available
 request.requiresExternalPower = true // only run when device is charging
 do {
 try BGTaskScheduler.shared.submit(request)
 } catch {
 print("Could not schedule cleanup: \(error.localizedDescription)")
 }
}

(ج) أن تدعو هذه الأساليب إلى تحديد مواعيدها في أماكن مناسبة: مثلاً بعد نجاح مهمة المعلومات الأساسية (لإعادة جدولة المسار التالي) أو عندما يعلق المستخدم الطلب، ويمكن أن تدعوها أيضاً استجابة لإجراءات المستعملين التي تشير إلى الحاجة إلى تحديثات دورية.

4 - تنفيذ المهام الموكلة

عندما يقرر النظام إدارة مهمة خلفية، يستدعي المعالج الذي سجلته، داخل المعالج يجب أن:

  • وضع معالج انتهاء الخدمة الذي يلغي العمل الجاري ويعتبر المهمة غير كاملة إذا انقضى الوقت.
  • (ج) أداء العمل الفعلي (مثلاً، جلب الشبكة، وعمليات قاعدة البيانات).
  • Call ] once work endes (or after failure).
  • (ب) تحديد موعد انتهاء المهمة (ما لم يكن الغرض من المهمة هو أن تكون مهمة واحدة).
func handleAppRefresh(task: BGAppRefreshTask) {
 // Reschedule the next refresh immediately.
 scheduleAppRefresh()

 // Set an expiration handler that will be called if the system needs to reclaim time.
 task.expirationHandler = {
 // Cancel any ongoing operations, clean up resources.
 // Do NOT call setTaskCompleted here; the system will mark it as expired.
 }

 // Perform background work (e.g., fetch new data from server).
 fetchLatestData { success in
 // After the work completes (or errors), inform the scheduler.
 task.setTaskCompleted(success: success)
 }
}

بالنسبة لـ (بي جي) في حالة (توسينج تاك) النمط متطابق لكن ميزانية الوقت أكبر يمكنك أيضاً أن تقوم بعمل أثقل مثل خلط متجر البيانات الأساسية أو إعادة إنتاج الصور

5- اختبار المهام الأساسية

وتصعب اختبار المهام الأساسية بشكل ملحوظ لأن النظام يقرر متى يديرها، ويستخدم التقنيات التالية لتحفيز التنفيذ:

  • Use the Xcode debugger: launch the app, then pause and use the command (via lldb or a “Simulate Background Fetch” menu option in the simulator).
  • وبالنسبة لـ BGProcessingTask، استخدمي ] الدعوة بعد التسجيل مباشرة، ثم وضعي التطبيق في الخلفية، ويمكن للنظام أن يديره في غضون دقائق قليلة.
  • Use the ] approach in a debug build: call and resubmit to trigger scheduling logs.
  • رصد تنفيذ المهمة بوضع نقاط انفصال في معالجك وفحص الاسطوانات لسجلات الدخول

أفضل الممارسات لتنفيذ المهام الأساسية

تتبع هذه المبادئ التوجيهية سوف تساعد تطبيقك على البقاء مستجيباً، و حفظ البطارية، و تمرير استعراض "آب ستور".

المهام التي يمكن أن تصمم

ويمكن وقف المهام الأساسية في أي وقت، وضمان أن يكون عملكم مُجدياً - إذ يؤديه عدة مرات ينتج نفس النتيجة التي ينتجها تشغيله مرة واحدة، مثلاً استخدام المنطق التصاعدي بدلاً من الإدخال فقط، وتتبع ما تم تجهيزه باستخدام المصابيح أو المعاوضات، بحيث يكون التقدم الجزئي آمناً.

احترام مناولة المواصلات

إنّ مُعالجة الإنتهاء هي فرصتك الأخيرة لإيقاف العمل ببراعة، ولا ينبغي أن تتجاهله في أيّ ظرف من الظروف، وإذا أُوقف النظام، فقد كلّ العمل غير المنجز، وفي المُعالج، ألغى أيّ مهام جارية في الشبكة، وأطلقوا الأقفال، وحافظوا على ولاية نقطة التفتيش لكي يستأنف الركض التالي.

لا تتخطى الشيدول

طلب مهام أساسية فقط عندما تحتاج حقا إلى تحديث المحتوى أو الصيانة، وكل عرض يستهلك موارد النظام لحفظ الكتب، ويمكن أن يؤدي الإفراط في التشريد إلى إبطال النظام الخاص بطلبكم أو رفض المهام، ووجود كوادر جيدة لـ BGAppRefreshTask هو كل 15 إلى 30 دقيقة على الأكثر؛ وقد يدير شركة BGProcessingTask يوميا أو أسبوعيا.

استخدام المضيقات الحكيمة

ولا تقدم شركة BGProcessingTaskRequest عروضا و، ولا تضع هذه العروض إلا عند الضرورة، وإذا كان من الممكن أن تُنفَّذ مهمتكم، تغفل احتياجات الشبكة - سيكون للنظام مرونة أكثر في تحديد مواعيده وقد يمضي في وقت أقرب، وبالمثل، يتطلب الأمر تأخيرا في السلطة الخارجية حتى يتم تركيب الجهاز، وهو أمر لا يناسب سوى العمل الثقيل لوحدة منع الحمل/العمل.

حافظ على ضوء العمل في BGAppRefreshTask

هذه المهام لها بضع ثوان من وقت الحائط قبل انتهاء الصلاحية، لا تُقدم سوى ما يلزم لتحديث حالتك، فالعمليات الثقيلة مثل نقل قاعدة البيانات أو عمليات التحميل الكبيرة تنتمي إلى شركة BGProcessingTask.

اختبار على الأجهزة الحقيقية

المحفز لا يستنسخ بشكل كامل سلوك تحديد مواعيد المهمة، اختبار جهاز مادي ببطارية مختلفة، شبكة، شروط شحن، استخدام لوج الطاقة في جهاز اكس كود

خطف يدوي وجدولة

وإذا فشلت مهمة أساسية (مثلاً خطأ الشبكة)، ينبغي أن تعيد جدولتها لفترة لاحقة، وأن تستخدم التخلف المكثف أو فترة إعادة التشغيل الثابتة، ولا تتواصل الاتصال دون إعادة الجدولة، لأن النظام قد يتوقف عن منح التنفيذ بالكامل.

الشلالات المشتركة والاضطرابات

وهنا تُواجه قضايا متكررة عند تنفيذ مهام المعلومات الأساسية وكيفية حلها.

المهمة لا تُدير أبداً

الأسباب المحتملة:

  • القدرة المفقودة - التحقق من أن طرق المعلومات الأساسية مُتاحة.
  • Identifier mismatch — ensure the string used in ] matches the one in the Info.plist or in .
  • المهمة لم تُقدم مجدداً بعد انتهاء المهمة (أو فشل)، يجب أن تحددها مرة أخرى للرحلات المقبلة.
  • وقد يؤدي التأخير في النظام - أي النظام إلى تأجيل تنفيذ نظام المعلومات الأساسية إذا كان الجهاز تحت حمولة ثقيلة أو متدنيا على البطارية أو في مود السلطة المنخفضة، تحقق من حالة الجهاز.

To debug, enable logging: set ] logging through in a debug build. then observe the console for messages about scheduling and execution.

المهام المُنفَقَة في وقت لاحق

إذا كانت مهمتك تصل إلى معالج الصلاحية، فهذا يعني أنك تحاول أن تفعل الكثير في الوقت المسموح به، ويمكن للتأقلم مع الأدوات (محدد الوقت) أن يكشف عن الاختناقات، ونقل العمليات الثقيلة إلى شركة BGProcessingTask، أو كسر العمل إلى قطيع أصغر وتتبع التقدم.

تحذيرات الذاكرة أو الطفح الجلدي

:: القيام بمهام أساسية في بيئة مقيدة، والقيام بعناية بفرز ومعالجة أشياء كبيرة، واستخدام مجمعات الإجازات الآلية للحلقات التي تخلق العديد من الأشياء المؤقتة، وإذا ما تحطمت الطلبات، والتحقق من سجلات التحطم من أجل الإنهاء المنخفض الحدوث.

التقنيات المتقدمة والاعتبارات العالمية الحقيقية

وللعمليات التي تحتاج إلى توازن الاستجابة مع الأعمال الأساسية، النظر في الجمع بين مهام المعلومات الأساسية وغيرها من خصائص النظام المتكامل.

الجمع بين المهام الأساسية والإخطارات المتعلقة بالدفع

(ج) استخدام الإخطارات عن بعد مع مفتاح ، وذلك يفيق التطبيق في الخلفية الخاصة بنوافذ التنفيذ القصيرة (النموذج إلى BGAppRefreshTask) وللتحديثات القابلة للتأجيل، اللجوء إلى مهام المعلومات الأساسية المقررة، وهذا النهج الهجين يكفل محتوى جديدا مع احترام حياة البطارية.

التواؤم مع كلودكيت أو البيانات الأساسية

عند القيام بمزامنة خلفية مع كلود كيت، استخدمي أساليب الإحضار الخلفية إلى جانب BGAppRefreshTask. For Core Data, leverage persistent history tracking so that background imports do not conflict with foreground reads.

رصد أداء المهام

Use the Energy Log in Xcode (Window ⁇ Organizer ⁇ Energy ⁇ select app ⁇ open Energy Log) to see how often background tasks run, their duration, and their impact on batT. Aim to keep each task’s execution time below the system’s typical budget:30re seconds for BGAppR.

المراجع الخارجية

وللدراسة المتعمقة، يرجى الرجوع إلى هذه الموارد الموثوقة:

خاتمة

تنفيذ مهام أساسية مع BGTaskScheduler و]BGProcessingTask / BGAppRefreshask مع مراعاة القيود المادية التي يبديها المستخدمون