On-Demand Resources: ما هو، آلية الطلب وتخزين الموارد

المؤلف: IT Sectr نُشر: 2026-04-17 وقت القراءة: 9 دق

On-Demand Resources هي تقنية Apple لتحميل محتوى التطبيق المؤجل. بدلاً من تضمين جميع الموارد في حزمة التثبيت، يضعها المطورون على خوادم App Store ويطلبونها حسب الحاجة. وفقاً لدليل Apple ODR، يقلل هذا من حجم التثبيت الأولي ويسمح بإضافة محتوى جديد دون تحديث إصدار التطبيق.

الملخص

  • On-Demand Resources — آلية لتحميل الموارد عند الطلب بعد تثبيت التطبيق
  • الموارد تُخزن على خوادم Apple وتُطلب عبر NSBundleResourceRequest
  • الوسوم تجمع الموارد حسب الكتل الوظيفية للتطبيق
  • التحميل المسبق يسمح بتحميل الموارد مسبقاً لتحسين تجربة المستخدم
  • حصص التخزين محدودة وتتطلب مراقبة من المطور

ما هي On-Demand Resources في iOS

On-Demand Resources (ODR) هو نظام إدارة محتوى مدمج في iOS وtvOS وmacOS. يسمح للمطور بتقسيم موارد التطبيق إلى إلزامية (مضمنة في حزمة التثبيت) وعند الطلب (مخزنة في App Store ويتم تنزيلها عند الحاجة).

المفاهيم الأساسية لـ ODR

يعمل نظام ODR بثلاث كيانات رئيسية: الوسوم وحزم الموارد والطلبات. الوسم هو معرف نصي يجمع مجموعة من الملفات. حزمة الموارد هي مجموعة بيانات مرتبطة بوسم. الطلب هو استدعاء برمجي لـ NSBundleResourceRequest يبدأ تحميل الحزمة.

دورة حياة طلب الموارد

تحميل الموارد يمر بعدة مراحل: تهيئة الطلب مع الوسوم المحددة، التحقق من التوفر في التخزين المحلي، التنزيل من خوادم Apple في حالة الغياب، إعلام التطبيق عند الجاهزية، وتحرير المورد بعد الاستخدام. يدير النظام تلقائياً التخزين المؤقت وإزالة الموارد غير المستخدمة.

المرحلةإجراء النظاموقت التنفيذ
التهيئةإنشاء NSBundleResourceRequest مع وسمفوري
فحص التخزين المؤقتالبحث عن المورد في التخزين المحلي0.1–0.5 ث
التنزيلالتنزيل من CDN Appleيعتمد على الحجم
الإعلاماستدعاء معالج الإكمال أو المفوضفوري
التحريروضع علامة على المورد كقابل للإزالة من قبل النظامعند طلب iOS

كيف يعمل ODR في iOS

آلية ODR تعتمد على خدمة خلفية تدير طلبات الموارد من التخزين السحابي لـ App Store. عندما يطلب التطبيق وسماً، يتحقق النظام من وجود المورد في التخزين المؤقت المحلي. إذا لم يكن موجوداً — يبدأ التنزيل عبر جلسة URL خلفية مع دعم الاستئناف عند انقطاع الاتصال.

إدارة الطلبات عبر NSBundleResourceRequest

swift
import Foundation

class ResourceManager {
    let odrRequest = NSBundleResourceRequest(tags: ["level-3"])

    func loadLevel3() {
        odrRequest.conditionallyBeginAccessingResources { available in
            if available {
                self.startLevel3()
            } else {
                self.odrRequest.beginAccessingResources { error in
                    guard error == nil else { return }
                    self.startLevel3()
                }
            }
        }
    }

    func releaseResources() {
        odrRequest.endAccessingResources()
    }
}

تتحقق طريقة conditionallyBeginAccessingResources من توفر المورد في التخزين المؤقت دون تحميل فوري. إذا كانت علامة التوفر إيجابية — يستمر التطبيق دون تأخير. إذا كان المورد غائباً، يبدأ beginAccessingResources التنزيل مع مؤشر التقدم عبر الخاصية progress.

تحميل الخلفية والأولويات

iOS يدير أولويات تحميل موارد ODR بناءً على نشاط التطبيق الحالي. عندما يكون التطبيق في المقدمة، يتم التحميل بأولوية عالية. في الخلفية، قد يؤخر iOS التحميل أو يوقفه عند انخفاض البطارية.

  • أولوية عالية — تحميل فوري للموارد المطلوبة الآن
  • أولوية منخفضة — تحميل مؤجل للتحميل المسبق والتخزين المؤقت الأولي
  • الخلفية — تحميل فقط مع Wi-Fi نشط وبطارية كافية

أنواع الموارد ووسوم ODR

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

وسم المحتوى في Xcode

في Xcode، يتم تكوين الوسوم من خلال مفتش Resource Tags في علامة تبويب Target Membership. يحدد المطور لكل ملف في المشروع ما إذا كان مدرجاً في الحزمة الرئيسية أو يتم تحميله بواسطة وسم. يمكن أن ينتمي ملف واحد إلى وسوم متعددة، مما يسمح بإعادة استخدام الموارد عبر أقسام مختلفة من التطبيق.

xml
<!-- مثال على تكوين Resource Tags في Info.plist -->
<key>NSBundleResourceRequestTags</key>
<dict>
    <key>level-3</key>
    <array>
        <string>levels/level3.scnassets</string>
        <string>textures/level3_tex.png</string>
    </array>
</dict>

فئات الوسوم حسب العمر الافتراضي

تميز Apple ثلاث فئات من وسوم ODR بناءً على المدة التي يجب أن يبقى فيها المورد على الجهاز. وسوم التثبيت الأولي تُحمل مع التطبيق ولا تُحذف أبداً بواسطة النظام. ترتيب وسوم التحميل المسبق يحدد تسلسل التحميل الخلفي مباشرة بعد التثبيت. الوسوم الرئيسية تُطلب عند الطلب وقد تُحذف بواسطة iOS عند ضيق المساحة.

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

  • وسوم التثبيت الأولي — تُحمل أثناء التثبيت الأول، لا تُحذف بواسطة النظام
  • الوسوم المسبقة التحميل — تُنزل في الخلفية بعد التثبيت لتحسين تجربة المستخدم
  • وسوم عند الطلب — تُطلب برمجياً، قد تُحذف بواسطة iOS عند ضيق المساحة

إعداد On-Demand Resources في Xcode

إعداد ODR في Xcode يشمل ثلاث مراحل: تصنيف الموارد حسب الوسوم، تكوين معلمات التحميل في Info.plist، والتنفيذ البرمجي للطلبات عبر NSBundleResourceRequest. معظم العمل يتم في جانب البناء.

التصنيف في Target Membership

swift
// التحقق من حالة ومراقبة تقدم ODR
func monitorODRProgress(tag: String) {
    let request = NSBundleResourceRequest(tags: [tag])
    let observer = request.progress.observe(\.fractionCompleted) { progress, _ in
        DispatchQueue.main.async {
            let percent = Int(progress.fractionCompleted * 100)
            print("ODR: \(percent)% تم التحميل")
        }
    }
}

تقدم التحميل يتم تتبعه عبر خاصية progress من فئة NSProgress مع دعم مراقبة KVO. يمكن للتطبيق عرض مؤشر تحميل للمستخدم أثناء تنزيل الموارد. بعد اكتمال التنزيل، تصبح الموارد متاحة في الحزمة الرئيسية للتطبيق عبر آليات FileManager وNSDataAsset القياسية.

معلمات الحصص والقيود

حصص ODR تعتمد على إصدار iOS. بدءاً من iOS 13، يمكن للجهاز تخزين ما يصل إلى 20 غيغابايت من الموارد عند الطلب لكل حساب. هذه المساحة مشتركة بين جميع التطبيقات المثبتة على الجهاز — إذا احتل تطبيق واحد مساحة كبيرة، تقل المساحة المتبقية للتطبيقات الأخرى.

مراقبة المساحة المستخدمة تتم عبر NSBundleResourceRequest. يمكن للتطبيق التحقق من مساحة تخزين ODR المتاحة وتحديد أي الموارد سيتم تحميلها أولاً بناءً على ذلك. يُوصى بتنفيذ آلية احتياطية: إذا كانت مساحة تخزين ODR ممتلئة، استخدم موارد منخفضة الجودة من الحزمة الرئيسية.

عندما يتم تجاوز الحصة، يحذف النظام الموارد ذات الوسوم عند الطلب بترتيب الأقل استخداماً مؤخراً، بدءاً من الأقدم. يمكن لمدير الموارد في كود التطبيق تتبع استخدام مساحة تخزين ODR الحالية عبر خاصية NSBundleResourceRequest.

يجب على المطورين مراعاة أن iOS قد يقرر حذف موارد On-Demand في أي وقت — يجب أن يتعامل التطبيق بشكل صحيح مع المواقف التي يصبح فيها المورد الذي تم تحميله سابقاً غير متاح فجأة. يُوصى باعتراض أخطاء الوصول إلى الموارد وإعادة طلبها عبر beginAccessingResources. للموارد الحرجة التي لا يمكن للتطبيق العمل بدونها، استخدم وسوم التثبيت الأولي التي لا تُحذف بواسطة النظام.

مزايا وقيود ODR

On-Demand Resources تمنح المطور أداة مرنة لإدارة حجم التطبيق، لكنها تفرض عدداً من القيود المتعلقة بتوفر الشبكة وسياسات تخزين iOS.

مزايا استخدام ODR

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

قيود التقنية

ODR تتطلب اتصالاً مستمراً بالإنترنت لتحميل الموارد عند الوصول الأول. المستخدمون في المناطق ذات التغطية الضعيفة قد يواجهون تأخيرات وأخطاء في التحميل. بالإضافة إلى ذلك، لا تضمن Apple بقاء الموارد التي تم تنزيلها على الجهاز — عند ضيق المساحة، قد يحذف iOS وسوم On-Demand دون سابق إنذار.

  • الحاجة إلى شبكة — الطلب الأول للمورد يتطلب اتصالاً بالإنترنت
  • الحذف التلقائي — قد يمسح iOS التخزين المؤقت عند ضيق المساحة على الجهاز
  • صعوبة التصحيح — إعادة إنتاج مشاكل التحميل تتطلب محاكاة ظروف شبكة متنوعة
  • حجم الوسم — توصي Apple بعدم تجاوز 512 ميغابايت لكل وسم للحصول على أداء أمثل
  • معالجة الأخطاء — يجب على التطبيق معالجة أعطال التحميل بشكل صحيح وإعادة المحاولة

الأسئلة الشائعة

هل يمكن استخدام ODR لإضافة محتوى ديناميكي دون تحديث التطبيق؟

ODR يسمح بإضافة وتعديل الموارد دون نشر إصدار جديد في App Store. يكفي تحديث الملفات على خادم Apple عبر Xcode وتعيينها لنفس الوسوم. عند الطلب التالي، سيحصل التطبيق على أحدث إصدار من المورد. هذا مناسب للمحتوى الموسمي والعروض الترويجية المؤقتة واختبار A/B للصور والتخطيطات الجديدة.

كيف يدير iOS حذف موارد ODR عند ضيق المساحة؟

النظام يحذف الموارد ذات الوسم عند الطلب عندما يحتاج إلى تحرير مساحة لتطبيقات أخرى. موارد وسوم التثبيت الأولي لا تُحذف. يتم تحديد ترتيب الحذف بواسطة خوارزمية LRU (الأقل استخداماً مؤخراً) — أول ما يُحذف هي الموارد التي لم يتم الوصول إليها لأطول فترة.

ما هو الحد الأقصى لحجم موارد ODR لتطبيق واحد؟

منذ iOS 13، الحد الإجمالي لمساحة تخزين ODR هو 20 غيغابايت لكل مستخدم Apple ID. يجب ألا يتجاوز حجم الوسم الواحد 512 ميغابايت للحصول على أداء تنزيل أمثل. عند تجاوز الحد، تفشل الطلبات مع خطأ NSBundleResourceRequestLowDiskSpaceError.

هل يعمل ODR في وضع عدم الاتصال بعد التحميل الأولي؟

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

ما الفرق بين ODR وتنزيل الملفات البسيط عبر URLSession؟

ODR متكامل مع بنية App Store: الموارد مستضافة على CDN Apple وتُدار بواسطة نظام التخزين المؤقت ولا تتطلب من المطور إعداد خادم خاص. URLSession يتطلب بنية خادم وتحكم في الإصدارات وإدارة يدوية للتخزين المؤقت. ODR أيضاً يتعامل تلقائياً مع استئناف التحميل عند انقطاع الاتصال.

الخلاصة

  • On-Demand Resources — تقنية للتحميل المؤجل للمحتوى في تطبيقات iOS وtvOS
  • النظام يعتمد على الوسوم التي تجمع الموارد والطلبات عبر NSBundleResourceRequest
  • جميع أنواع الملفات مدعومة: الصور والفيديو والصوت والرسوم المتحركة وبيانات المستويات
  • فئات الوسوم — التثبيت الأولي والمسبق التحميل وعند الطلب بسياسات تخزين مختلفة
  • حد التخزين — 20 غيغابايت لكل Apple ID، حتى 512 ميغابايت لكل وسم
  • حجم التثبيت ينخفض بنقل الموارد من الحزمة الرئيسية إلى خوادم Apple
  • توصية — استخدام ODR للألعاب وتطبيقات المحتوى الإعلامي والمشاريع ذات الهيكل متعدد المستويات

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا