File Provider Extension هو آلية iOS تسمح للتطبيقات بتوفير الوصول إلى الملفات من مصادر خارجية من خلال تطبيق الملفات المضمن. وفقًا لـ Apple Developer Documentation, 2024، يتيح File Provider Extension عرض الملفات من التخزين السحابي والخوادم وأنظمة الملفات المخصصة مباشرة في Files.app — دون الحاجة إلى استيرادها محليًا. يحصل المستخدم على واجهة موحدة للعمل مع الملفات بغض النظر عن موقعها الفعلي.
النقاط الرئيسية
File Provider Extension هو إمتداد تطبيق في iOS و macOS يسمح للتطبيق بتوفير الوصول إلى الملفات من مصادر خارجية من خلال تطبيق الملفات النظامي. ظهر في iOS 11 واستبدل آلية Document Provider، مضيفًا دعم المكافأة والبحث والعلامات.
المهمة الرئيسية لـ File Provider Extension هي العمل كجسر بين التخزين الخارجي (خادم سحابي، NAS مؤسسي، FTP) و Files.app. يرى المستخدم الملفات والمجلدات كأنها مخزنة محليًا، وإن كانت البيانات قد تكون موجودة على خادم بعيد. يعمل الإمتداد في الخلفية، مكافئًا المحتوى حسب الحاجة.
وفقًا لـ WWDC 2024، تقوم Apple بتطوير FileProvider API بنشاط: تمت إضافة دعم المكافأة التدريجية، وتحسين الأداء للدليلات الكبيرة، وأصبحت العمليات الدفعية متاحة الآن. هذا يجعل File Provider Extension الطريق المفضل لدمج الملفات الخارجية في نظام Apple البيئي.
المعمارية لـ File Provider Extension تتكون من مكونين: الإمتداد الرئيسي (نوع موفر الملفات) وإمتداد واجهة المستخدم اختياري للمصادقة والتهيئة. يقوم الإمتداد الرئيسي بتنفيذ بروتوكول NSFileProviderExtension ويعالج جميع الطلبات من Files.app.
import FileProvider
class CloudFileProvider: NSFileProviderExtension {
override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
guard let item = storage
.item(for: identifier) else {
throw NSError(domain: NSFileProviderErrorDomain,
code: NSFileProviderError.noSuchItem.rawValue)
}
return item
}
override func urlForItem(with identifier: NSFileProviderItemIdentifier) -> URL {
return fileCoordinator.urlForItem(with: identifier)
}
}
عندما يفتح المستخدم Files.app ويختار موردك، يقوم النظام بتشغيل الإمتداد في عملية خلفية. ليس للإمتداد واجهة مستخدم — إنه عملية بدون واجهة تعالج طلبات القراءة والكتابة وإعادة التسمية وحذف الملفات. تتم جميع العمليات بشكل غير متزامن عبر NSFileProviderManager.
فارق دقيق مهم: File Provider Extension يعيش في عملية منفصلة ويمكن للنظام إنهاؤه عندما تكون الذاكرة منخفضة. لذا، يجب أن يكون المورد قادرًا على استعادة الحالة بعد إعادة التشغيل، من خلال حفظ المعرفات وذاكرة المكافأة في تخزين دائم.
NSFileProviderItem هو بروتوكول يصف ملفًا أو مجلدًا فرديًا في التسلسل الهرمي للمورد. كل عنصر له معرف فريد، واسم، نوع (ملف أو مجلد)، تواريخ الإنشاء والتعديل، الحجم والعلامات (متاح بدون اتصال، قابل للقراءة فقط).
| الخاصية | النوع | الوصف |
|---|---|---|
| itemIdentifier | NSFileProviderItemIdentifier | معرف فريد للعنصر في نظام المورد |
| parentItemIdentifier | NSFileProviderItemIdentifier | معرف المجلد الأصلي (الجذر — .rootContainer) |
| filename | String | اسم الملف بالامتداد |
| typeIdentifier | String (UTType) | معرف النوع الموحد لتحديد نوع المحتوى |
| capabilities | NSFileProviderItemCapabilities | علامات: الحذف، إعادة التسمية، إضافة العلامات |
يدعم البروتوكول أيضًا إمكانيات ممتدة من خلال NSFileProviderItemProtocol: العلامات (علامات ملونة)، الأيقونات، الإصدارات والإجراءات المخصصة. بالنسبة للملفات الكبيرة، يتم تنفيذ دعم النقل القابل للاستئناف من خلال NSFileProviderService.
وفقًا لـ WWDC 2023، توصي Apple باستخدام العمليات (إغلاقات) (NSFileProviderItemFields) لتحديث الخصائص المغيرة فقط بدلاً من الكائن بأكمله. هذا يسرع المكافأة بشكل كبير أثناء التحديثات الدفعية — على سبيل المثال، عندما يتغير حجم مجموعة من الملفات فقط.
NSFileProviderManager هو الفئة المركزية لإدارة دورة حياة الإمتداد. يوفر طرقًا لإشارة النظام بالتغييرات، ومعالجة التعارضات التعاونية، وإدارة التنزيلات. يتبع المدير تلقائيًا العمليات النشطة ويعطي أولوية للملفات المرئية للمستخدم.
class SyncManager {
let providerManager = NSFileProviderManager.default
func signalUpdate(for item: NSFileProviderItemIdentifier) {
providerManager.signalEnumerator(
for: item.parentItemIdentifier
) { error in
if let error = error {
Logger.sync.error(
"Failed to signal: \(error.localizedDescription)"
)
}
}
}
func uploadItem(at url: URL, itemId: NSFileProviderItemIdentifier) {
providerManager.registerURLBasedItem(
with: itemId,
url: url
)
}
}
محرك المكافأة هو المنطق الذي يقوم المطور بتنفيذه بشكل مستقل. لا توفر Apple آلية مكافأة مضمنة — فقط API لإشعار النظام بالتغييرات. يقرر المورد بنفسه كيفية تنزيل الملفات من الخادم وتخزينها مؤقتًا محليًا وحل تعارضات التحرير.
التعارضات: يدعم النظام كشف تعارض الإصدارات من خلال NSFileProviderSyncAnchor. عندما يتم تغيير ملف محليًا وعن بعد في نفس الوقت، يستخدم المورد مرساة المكافأة لتحديد آخر إصدار متكافئ ويحل التعارض باستخدام استراتيجية آخر كاتب يفوز أو بإنشاء نسخة متعارضة.
File Provider Extension يعمل داخل صندوق رمل صارم لـ iOS. ليس للإمتداد إمكانية الوصول المباشر إلى نظام الملفات للتطبيق المضيف، وبالعكس، لا يمكن للتطبيق قراءة ملفات المورد مباشرة. يتم تبادل البيانات بأكمله من خلال API لنظام Files.app.
لا يمكن الوصول إلى ملفات المستخدم إلا من خلال تفاعل صريح: يفتح المستخدم ملفًا من Files.app في تطبيق، ويقوم النظام بإنشاء نسخة مؤقتة من الملف في حاوية معزولة. يعمل التطبيق المستلم مع هذه النسخة، ليس مع الأصل في تخزين المورد.
وفقًا لـ Apple Security Guide, 2024، يجب على المورد تنفيذ تشفير البيانات أثناء النقل (TLS 1.3) ويمكنه إضافة تشفير القرص باختياره للملفات المخزنة مؤقتًا. يتم توثيق مصادقة المستخدم من خلال مكون FileProviderUI منفصل، يعمل خارج صندوق الرمل للإمتداد لإدخال بيانات الاعتماد بأمان.
القيود الرئيسية: لا يمكن للإمتداد تشغيل برمجية اعتباطية — يعالج فقط الطلبات من خلال NSFileProviderManager. أي منطق خارج عمليات الملفات يجب تنفيذه في التطبيق الرئيسي واستدعاؤه من خلال مجموعات التطبيقات أو خدمات XPC.
الأسئلة الشائعة
File Provider Extension هو إمتداد تطبيق لدمج تخزين الملفات الخارجي مع تطبيق الملفات. يسمح بعرض الملفات من الخدمات السحابية و FTP و NAS ومصادر أخرى دون نسخها محليًا.
File Provider (iOS 11+) استبدل Document Provider، مضيفًا المكافأة في الخلفية، دعم البحث عبر Spotlight، العلامات وأداء محسن. Document Provider أصبح مهجورًا منذ iOS 11 وتمت إزالته في iOS 14.
يقوم المطور بتنفيذ المكافأة من خلال NSFileProviderManager. يشير الإمتداد إلى النظام بالتغييرات عبر signalEnumerator، ويطلب النظام قائمة محدثة من العناصر. يتم حل تعارضات الإصدار من خلال NSFileProviderSyncAnchor.
نعم، يمكن File Provider Extension العمل كعملية مستقلة دون تشغيل التطبيق الرئيسي. إنه إمتداد بدون واجهة يقوم iOS بتشغيله عند طلب Files.app. ومع ذلك، عادة ما يتم المصادقة والإعداد الأولي من خلال التطبيق الرئيسي.
يتطلب الإمتداد إمكانية File Provider في Xcode، بالإضافة إلو9 الترخيص com.apple.developer.file-provider. للوصول إلى الشبكة، تتم إضافة إمكانية Network. جميع الحقوق الأخرى مقيدة بشكل صارم بواسطة صندوق رمل iOS.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا