Documents Directory: ما هو، الغرض منه والوصول إلى الملفات

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

Documents Directory هو دليل في بيئة الحماية (sandbox) لتطبيق iOS مصمم لتخزين بيانات المستخدم التي يجب أن تستمر بين جلسات التطبيق وتكون متاحة للمستخدم عبر iTunes File Sharing و iCloud. وفقاً لـ Apple File System Programming Guide (2024)، يتم تضمين محتويات هذا الدليل تلقائياً في النسخ الاحتياطية لـ iCloud و iTunes، لذلك يجب على المطور أن يختار بوعي أي البيانات يضعها في Documents. على عكس Caches Directory، لا يتم حذف الملفات في Documents بواسطة النظام عند ضيق المساحة — تقع مسؤولية إدارة الحجم على التطبيق.

الخلاصة

  • Documents Directory هو الدليل الرئيسي لملفات المستخدم التي يجب أن تستمر وتكون متاحة عبر iTunes.
  • يتم نسخ احتياطي بيانات Documents تلقائياً إلى iCloud و iTunes — ضع ذلك في الاعتبار عند تصميم التخزين الخاص بك.
  • النظام لا يحذف الملفات من Documents عند تنظيف ذاكرة التخزين المؤقت — المطور مسؤول عن تحرير المساحة.
  • يتم الحصول على المسار إلى الدليل عبر NSSearchPathForDirectoriesInDomains مع NSDocumentDirectory أو عبر FileManager.urls.
  • للملفات الكبيرة التي يمكن استعادتها، استخدم Caches Directory — لتجنب إهدار المساحة في نسخة iCloud الاحتياطية.

ما هو Documents Directory في iOS؟

Documents Directory هو دليل داخل بيئة الحماية (sandbox) لتطبيق iOS مصمم لتخزين بيانات المستخدم التي يجب أن تستمر بين جلسات التشغيل وتكون متاحة للمستخدم. يحصل كل تطبيق على sandbox معزول خاص به، و Documents هو أحد الأدلة الرئيسية إلى جانب Caches و tmp و Library.

يستخدم iOS sandbox صارماً: لا يمكن للتطبيق الوصول إلى نظام الملفات للتطبيقات الأخرى أو إلى أدلة النظام دون أذونات خاصة. Documents Directory هو الدليل الوحيد الذي يمكن للمستخدم عرض محتوياته عبر iTunes File Sharing (عند تمكين مفتاح UIFileSharingEnabled في Info.plist).

وفقاً لـ Apple WWDC 2023، أكثر من 85% من التطبيقات في App Store تستخدم Documents Directory لتخزين نوع واحد على الأقل من بيانات المستخدم — من ملفات PDF المصدرة إلى ملفات الألعاب المحفوظة والصور المصدرة.

من المهم أن يفهم المطور: الملفات في Documents يتم تضمينها تلقائياً في النسخ الاحتياطية لـ iCloud و iTunes. إذا كان التطبيق يخزن كميات كبيرة من البيانات القابلة للاستعادة في Documents (مثل ذاكرة تخزين الصور المؤقتة أو الملفات المؤقتة)، فإن ذلك يؤدي إلى استهلاك غير ضروري لمساحة تخزين iCloud الخاصة بالمستخدم.

كيفية الحصول على المسار إلى Documents Directory

في Swift، يتم الحصول على المسار إلى Documents Directory عبر FileManager. توصي Apple باستخدام API القائم على URL بدلاً من النصوص للحصول على توافق أفضل مع إمكانيات iOS الحديثة.

swift
import Foundation

let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
    for: .documentDirectory,
    in: .userDomainMask
).first else { return }

// إنشاء ملف في Documents
let fileURL = documentsURL.appendingPathComponent("report.pdf")
let data = Data("Hello, world!".utf8)
try data.write(to: fileURL)

يستخدم Objective-C NSSearchPathForDirectoriesInDomains — وهو نهج أقدم ولكن لا يزال مدعوماً، ويعيد مساراً نصياً بدلاً من URL.

objective-c
@import Foundation;

NSArray *paths = NSSearchPathForDirectoriesInDomains(
    NSDocumentDirectory,
    NSUserDomainMask,
    YES
);
NSString *documentsPath = paths.firstObject;
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"report.pdf"];

يجب أن تستخدم المشاريع الحديثة في Swift FileManager.urls، لأن هذه الطريقة تعيد URL بدلاً من نص، مما يقلل من خطر أخطاء ترميز المسارات ويجعل الكود أكثر أماناً من حيث الأنواع.

ما البيانات التي يجب تخزينها في Documents

Documents Directory مخصص للبيانات التي أنشأها المستخدم أو التي يحتاجها المستخدم بشكل صريح. تسلط Apple الضوء على عدة فئات مناسبة لهذا الدليل.

مستندات وملفات المستخدم

الملفات التي يقوم المستخدم بإنشائها أو استيرادها — مستندات نصية، PDF، صور، تقارير مصدرة، ملفات نسخ احتياطي. هذه البيانات لها قيمة مباشرة للمستخدم، وفقدانها سيكون أمراً بالغ الأهمية.

حفظ الألعاب وحالة التطبيق

حفظ الألعاب، ملفات حالة التطبيق، المشاريع المصدرة — كل ما يتوقع المستخدم استعادته بعد إعادة تثبيت التطبيق. ومع ذلك، للبيانات الحرجة يُوصى باستخدام iCloud Key-Value Storage أو Core Data مع مزامنة iCloud.

نوع البياناتمناسب لـ Documentsبديل
PDF والمستندات النصيةنعم
ذاكرة تخزين الصور المؤقتةلاCaches Directory
حفظ الألعابنعمiCloud KVS
سجلات وبيانات التصحيحلاCaches أو tmp
تقارير مصدرةنعم

المعيار الرئيسي: إذا كان يمكن إعادة تنزيل البيانات من الشبكة أو إعادة إنشائها — فهي تنتمي إلى Caches، وليس Documents. كل غيغابايت في Documents هو غيغابايت في نسخة iCloud الاحتياطية للمستخدم.

النسخ الاحتياطي والمزامنة

iOS يتضمن تلقائياً محتويات Documents Directory في النسخ الاحتياطية عند توصيل الجهاز بـ iTunes أو عند المزامنة مع iCloud. لا يمكن تعطيل هذا السلوك على مستوى الدليل — فقط لكل ملف عبر الخاصية NSURLIsExcludedFromBackupKey.

بدءاً من iOS 5.0، بدأت Apple في رفض التطبيقات التي تخزن كميات كبيرة من البيانات القابلة للاستعادة في Documents. توصية Apple: الملفات التي يمكن إعادة تنزيلها يجب تخزينها في Caches Directory مع علامة استثناء النسخ الاحتياطي.

swift
import Foundation

let documentsURL = FileManager.default
    .urls(for: .documentDirectory, in: .userDomainMask)
    .first!

// استبعاد الملف من النسخة الاحتياطية لـ iCloud
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true

var fileURL = documentsURL.appendingPathComponent("cached_data.json")
try fileURL.setResourceValues(resourceValues)

تعمل مزامنة iCloud عبر NSUbiquitousContainer إذا كان التطبيق يستخدم iCloud Documents. في هذه الحالة، يتم مزامنة الملفات من Documents Directory تلقائياً بين أجهزة المستخدم. للتطبيقات بدون iCloud، تقتصر المزامنة على النسخ الاحتياطي.

Documents Directory مقابل Caches Directory

الفرق بين Documents و Caches هو واحد من أكثر المفاهيم الخاطئة شيوعاً بين مطوري iOS المبتدئين. الفرق الرئيسي: يمكن للنظام حذف الملفات من Caches في أي وقت لتحرير المساحة، لكنه لا يلمس Documents أبداً دون علم المستخدم.

الخاصيةDocuments DirectoryCaches Directory
النسخ الاحتياطي iCloudنعم (افتراضياً)لا
الحذف بواسطة النظامأبداًعند ضيق المساحة
iTunes File Sharingنعم (عند تمكين العلامة)لا
الغرضبيانات المستخدمذاكرة تخزين مؤقت، بيانات مؤقتة
استعادة البياناتتتطلب استعادةيمكن إعادة تنزيلها

وفقاً لـ Apple Developer Documentation (2024)، الاستخدام غير الصحيح لـ Documents Directory هو أحد الأسباب الشائعة لرفض التطبيقات أثناء المراجعة: إذا كان التطبيق يخزن أكثر من بضعة ميغابايت من البيانات القابلة للاستعادة في Documents، توصي Apple بنقلها إلى Caches أو تطبيق NSURLIsExcludedFromBackupKey.

قاعدة عملية: إذا كان المستخدم سينزعج من فقدان الملف — خزنه في Documents. إذا كان الملف يمكن إعادة تنزيله أو إعادة إنشائه — خزنه في Caches.

أفضل الممارسات للعمل مع Documents

طور مطورو iOS ذوو الخبرة عدة قواعد تساعد في تجنب المشكلات مع Documents Directory في جميع مراحل دورة حياة التطبيق — من التطوير إلى النشر في App Store.

مراقبة حجم الدليل

بانتظام تحقق من حجم Documents Directory عبر FileManager.enumerator(at:includingPropertiesForKeys:). إذا تجاوز الحجم 100 ميغابايت لبيانات غير مستخدم — فهذا سبب لإعادة النظر في بنية التخزين.

استثناء الملفات القابلة للاستعادة من النسخ الاحتياطي

لأي ملفات يمكن إعادة تنزيلها من الشبكة، قم بتعيين isExcludedFromBackup = true. هذا يقلل من الحمل على تخزين iCloud الخاص بالمستخدم ويقلل من خطر رفض التطبيق في App Review.

الترحيل أثناء التحديثات

عند تغيير تنسيق البيانات في Documents، خطط للترحيل: لا تحذف الملفات القديمة حتى تتأكد من إنشاء الملفات الجديدة بشكل صحيح. استخدم أدلة فرعية خاصة بالإصدار.

swift
import Foundation

let documentsURL = FileManager.default
    .urls(for: .documentDirectory, in: .userDomainMask)
    .first!

let versionDir = documentsURL.appendingPathComponent("v2")
try FileManager.default.createDirectory(
    at: versionDir,
    withIntermediateDirectories: true
)

اتباع هذه الممارسات يقلل من خطر فقدان بيانات المستخدم، ويقلل من حجم النسخة الاحتياطية لـ iCloud، ويبسط مراجعة App Store.

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

هل يمكن للمستخدم الوصول إلى Documents Directory بدون iTunes؟

نعم، عبر Files — تطبيق iOS المدمج بدءاً من الإصدار 11. عند تمكين مفتاح UIFileSharingEnabled في Info.plist، تظهر محتويات Documents Directory في تطبيق الملفات في قسم "على iPhone الخاص بي". يمكن للمستخدم عرض الملفات ونسخها وحذفها.

ماذا يحدث لـ Documents Directory عند حذف التطبيق؟

يتم حذف sandbox التطبيق بالكامل، بما في ذلك Documents Directory و Caches و tmp و Library، من الجهاز بالكامل. تبقى النسخ الاحتياطية في iCloud محفوظة حتى الاستعادة أو الحذف اليدوي. عند إعادة التثبيت، يبدأ التطبيق بـ sandbox نظيف.

كيفية التحقق من حجم Documents Directory في الكود؟

استخدم FileManager.enumerator لاجتياز جميع الملفات في الدليل وجمع أحجامها. لكل ملف، احصل على الخاصية .fileSize عبر resourceValues(forKeys:). بدلاً من ذلك، استخدم URLResourceKey.fileSizeKey و .directoryEnumerationResults.

هل يمكنني تخزين قاعدة بيانات Core Data SQLite في Documents؟

افتراضياً، Core Data تنشئ ملف SQLite في Library/Application Support، وليس في Documents. لا يُنصح بنقل قاعدة البيانات إلى Documents — سيتم تضمينها في iTunes File Sharing ويمكن للمستخدم حذفها أو تعديلها عن طريق الخطأ. الاستثناء هو إذا كان التطبيق يعطي المستخدم حق الوصول إلى البيانات بشكل صريح عبر Core Data.

ما هو UIFileSharingEnabled وكيفية تمكينه؟

UIFileSharingEnabled (Application supports iTunes file sharing) هو مفتاح منطقي في Info.plist. عند تعيينه إلى YES، يمكن للمستخدمين نسخ الملفات من Documents Directory عبر iTunes و Files. أضف المفتاح إلى Info.plist: UIFileSharingEnabled = YES. قم بتمكينه فقط إذا كان التطبيق يقوم بالفعل بإنشاء مستندات مستخدم.

الملخص

  • Documents Directory هو المكان الرئيسي لبيانات المستخدم في تطبيق iOS التي يجب أن تستمر ويتم نسخها احتياطياً.
  • يتم الحصول على المسار إلى الدليل عبر FileManager.urls(for: .documentDirectory) في Swift أو NSSearchPathForDirectoriesInDomains في Objective-C.
  • جميع الملفات من Documents يتم تضمينها في النسخ الاحتياطية لـ iCloud و iTunes افتراضياً — استخدم isExcludedFromBackup للاستثناء.
  • النظام لا يحذف الملفات من Documents تلقائياً، على عكس Caches Directory.
  • للبيانات القابلة للاستعادة (ذاكرة تخزين مؤقت، ملفات مؤقتة) استخدم Caches Directory، وليس Documents.
  • مفتاح UIFileSharingEnabled يوفر الوصول إلى Documents عبر iTunes وتطبيق الملفات — استخدمه بوعي.
  • راقب بانتظام حجم Documents Directory: تجاوز 100 ميغابايت لبيانات غير حرجة هو مشكلة معمارية.

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

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

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

اقرأ أيضًا