iCloud Drive هو تخزين الملفات السحابي من Apple، المدمج في iOS وmacOS وiPadOS لمزامنة المستندات بين أجهزة المستخدم. وفقًا لـ Apple, 2024، يستخدم iCloud Drive خدمة CloudKit كخلفية لتخزين الملفات والمزامنة التلقائية: التغييرات التي تُجرى على iPhone تنعكس فورًا على Mac وiPad دون أي إجراء من المستخدم. يمكن للمطورين دمج iCloud Drive في التطبيقات عبر NSDocumentPickerViewController وواجهة Ubiquity API.
أهم النقاط
iCloud Drive هي خدمة التخزين السحابي للملفات من Apple، توفر مخزنًا موحدًا للمستندات لجميع أجهزة المستخدم المسجّلة بنفس Apple ID. أُطلقت الخدمة في عام 2014 مع iOS 8 وOS X Yosemite كبديل لخدمة iCloud Documents.
يتميز iCloud Drive عن غيره من خدمات التخزين السحابي (Google Drive، Dropbox) بالتكامل العميق مع نظام التشغيل: تظهر الملفات مباشرةً في Finder على macOS وفي تطبيق الملفات على iOS، دون الحاجة إلى تثبيت تطبيق إضافي. يزامن النظام المحتوى تلقائيًا في الخلفية، مع التبديل بين شبكة Wi-Fi والشبكة الخلوية.
وفقًا لـ Apple Platform Overview, 2024، يدعم iCloud Drive إصدارات الملفات حتى 30 يومًا، والمشاركة المجلدات عبر iCloud Sharing، والتكامل مع البحث النظامي Spotlight. يحصل المطورون على الوصول إلى التخزين عبر واجهات NSFileCoordinator وحاويات Ubiquity.
Ubiquity — مصطلح من Apple يدل على قدرة البيانات على «الوجود في كل مكان» (من الكلمة الإنجليزية ubiquitous). في سياق iCloud Drive، هي آلية تسمح للملفات بالمزامنة تلقائيًا بين جميع أجهزة المستخدم عبر الخلفية السحابية CloudKit.
| المكوّن | الوصف | الدور |
|---|---|---|
| Ubiquity container | دليل خاص بالتطبيق | يخزن الملفات للمزامنة |
| CloudKit | خدمة خلفية من Apple | يضمن التخزين والمزامنة |
| NSMetadataQuery | استعلام نظامي | يتتبع حالة ملفات Ubiquity |
| NSFileVersion | إدارة الإصدارات | يحل تعارضات التغييرات |
Ubiquity container — دليل داخل بيئة Sandbox الخاصة بالتطبيق، مُعلَّم للمزامنة. تُرفع الملفات الموضوعة في هذا الدليل تلقائيًا إلى iCloud Drive وتُوزَّع على الأجهزة الأخرى. يُضبط الوصول إلى الحاوية عبر Capabilities في Xcode.
يتتبع النظام حالة كل ملف عبر NSMetadataQuery: قد يكون الملف محليًا (محمَّلاً على الجهاز)، أو بعيدًا (في السحابة فقط)، أو قيد التحميل. يمكن للمطور طلب تحميل الملف برمجيًا أو التحقق من توفره قبل فتحه.
يبدأ دمج iCloud Drive بإضافة قدرة iCloud capability في Xcode وتفعيل خدمة iCloud Documents. بعد ذلك يحصل التطبيق على الوصول إلى Ubiquity container — دليل خاص يُرجع مساره عبر FileManager.
import UIKit
class DocumentManager {
func ubiquityURL() -> URL? {
return FileManager.default
.url(forUbiquityContainer: nil)
}
func saveToICloud(data: Data, filename: String) {
guard let containerURL = ubiquityURL() else { return }
let fileURL = containerURL
.appendingPathComponent(filename)
do {
try data.write(to: fileURL)
Logger.storage.info(
"Saved \(filename) to iCloud Drive"
)
} catch {
Logger.storage.error(
"Save failed: \(error.localizedDescription)"
)
}
}
func listICloudFiles() {
let query = NSMetadataQuery()
query.searchScopes = [NSMetadataQueryUbiquitousDocumentsScope]
query.start()
}
}
يوفر NSDocumentPickerViewController واجهة نظامية لاختيار واستيراد الملفات من iCloud Drive. يرى المستخدم متصفح ملفات قياسيًا مع دعم البحث والفرز والاختيار المتعدد. بعد اختيار الملف، يحصل التطبيق على عنوان URL الخاص به ويمكنه التعامل معه عبر NSFileCoordinator.
قاعدة مهمة: عند التعامل مع ملفات iCloud Drive يجب استخدام NSFileCoordinator للقراءة والكتابة. يضمن ذلك عدم تعديل الملف بواسطة عملية أخرى (مثل المزامنة) أثناء العملية. قد يؤدي إهمال التنسيق إلى تلف البيانات.
تنشأ تعارضات الإصدارات عندما يُعدَّل الملف على جهازين في الوقت نفسه قبل اكتمال المزامنة. يكتشف iOS هذه الحالات تلقائيًا عبر NSFileVersion وينشئ إصدارات متعارضة يجب على المستخدم أو التطبيق حلها.
func resolveConflicts(for fileURL: URL) {
let conflictVersions = NSFileVersion
.unresolvedConflictVersionsOfItem(at: fileURL) ?? []
for version in conflictVersions {
do {
let conflictData = try Data(contentsOf: version.url)
let resolved = mergeData(
original: try Data(contentsOf: fileURL),
conflict: conflictData
)
try resolved.write(to: fileURL)
version.remove()
} catch {
Logger.sync.error(
"Conflict resolution failed: \(error)"
)
}
}
}
يحفظ NSFileVersion سجل تغييرات الملف حتى 30 يومًا. تحتوي كل نسخة على عنوان URL وتاريخ الإنشاء ومعرّف الجهاز الذي أنشأها. يضع النظام علامة تلقائيًا على الإصدارات كمتضاربة عندما يرسل جهازان تغييرات بنفس المعرّف الأساسي.
استراتيجيات الحل: يمكن للتطبيق دمج التغييرات تلقائيًا (للتنسيقات المدعومة)، أو عرض اختيار الإصدار على المستخدم، أو استخدام استراتيجية «الكاتب الأخير» (last-writer-wins). توصي Apple باستخدام الدمج التلقائي للبيانات النصية والمنظمة، وعرض الإصدارات المتعارضة للمستخدم بالنسبة للتنسيقات الثنائية.
تبلغ مساحة التخزين المجانية في iCloud 5 جيجابايت، موزعة بين جميع خدمات المستخدم: النسخ الاحتياطية والصور والبريد وiCloud Drive. تبدأ الباقات المدفوعة من 50 جيجابايت وتصل إلى 12 تيرابايت. من المهم مراعاة هذه الحدود للتطبيقات ذات التبادل المكثف للملفات.
تحسين التخزين: يوفر iOS آلية إخراج الملفات (eviction) — عندما تنفد المساحة المحلية، يمكن للنظام حذف النسخ المخزنة مؤقتًا من ملفات iCloud Drive، مع الإبقاء على البيانات الوصفية فقط. عند محاولة فتح مثل هذا الملف، يقوم النظام بتحميله تلقائيًا من السحابة. يمكن للمطور التحكم في هذه العملية عبر NSFileCoordinator والتحقق من حالة الملف عبر NSMetadataUbiquitousItemDownloadingStatusKey.
وفقًا لـ WWDC 2022، توصي Apple بالممارسات التالية لتحسين iCloud Drive: تخزين مستندات المستخدم فقط في Ubiquity container، وليس ذاكرة التخزين المؤقت للتطبيق؛ واستخدام التحميل غير المتزامن مع مؤشر تقدم؛ وإعطاء المستخدم معلومات عن حجم الملفات قبل التحميل؛ وتنفيذ دعم استئناف التحميل للملفات الكبيرة.
ملاحظة جوهرية: حذف ملف من Ubiquity container يؤدي إلى حذفه من جميع أجهزة المستخدم. بالنسبة للملفات المؤقتة استخدم دليل Documents المحلي بدلاً من Ubiquity container. ضع في الاعتبار أيضًا أن المزامنة ليست فورية — قد يتراوح التأخير من عدة ثوانٍ إلى دقائق اعتمادًا على حجم الملف والشبكة.
الأسئلة الشائعة
iCloud Drive هو تخزين الملفات السحابي من Apple الذي يزامن المستندات بين iPhone وiPad وMac وPC. وهو مدمج في Finder وتطبيق الملفات، مما يتيح العمل مع المستندات دون تطبيقات إضافية.
تعمل المزامنة عبر CloudKit: تُرفع الملفات من Ubiquity container الخاص بالتطبيق تلقائيًا إلى السحابة وتُوزَّع على أجهزة المستخدم الأخرى. يستخدم النظام NSMetadataQuery لتتبع الحالة وNSFileCoordinator للوصول الآمن.
أضف قدرة iCloud capability في Xcode، وفعّل خدمة iCloud Documents، واستخدم FileManager.url(forUbiquityContainer:) للحصول على مسار الدليل المُزامَن. لاختيار الملفات استخدم NSDocumentPickerViewController.
ينشئ iOS إصدارات متعارضة عبر NSFileVersion. يمكن للمطور دمج التغييرات تلقائيًا أو عرض الاختيار على المستخدم. يحفظ النظام الإصدارات حتى 30 يومًا ويضع علامة تلقائيًا على التعارضات عند التغييرات المتزامنة من أجهزة مختلفة.
يُقدم مجانًا 5 جيجابايت لجميع خدمات iCloud. الباقات المدفوعة: 50 جيجابايت، 200 جيجابايت، 2 تيرابايت، 6 تيرابايت و12 تيرابايت. بالنسبة للملفات الكبيرة نفّذ دعم استئناف التحميل وتحقق من المساحة المتاحة قبل الكتابة.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.