نظام الملفات والمستندات في تطوير التطبيقات المحمولة: ما هو، مبادئه وكيف يعمل

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

العمل مع نظام الملفات هو أساس أي تطبيق محمول. تقدم كل منصة نموذج الوصول الخاص بها: Sandbox في iOS يعزل التطبيقات في حاويات منفصلة، بينما Scoped Storage في Android يقيّد الوصول المباشر إلى التخزين المشترك. وفقًا Google Developer Documentation (2026)، استلزم تقديم Scoped Storage مع Android 10 إعادة نظر كاملة في بنية تخزين البيانات. في هذا الدليل، سنغطي FileManager و MediaStore API و Storage Access Framework و DocumentProvider لكلتا المنصتين.

النقاط الرئيسية

  • Sandbox — بيئة iOS معزولة حيث يعمل كل تطبيق فقط في دليله الخاص دون الوصول إلى بيانات التطبيقات الأخرى.
  • Scoped Storage — نموذج Android 10+ الذي يقيّد الوصول المباشر إلى التخزين الخارجي عبر MediaStore API و SAF.
  • FileManager — الفئة الرئيسية في iOS لعمليات الملفات: الإنشاء والقراءة والنسخ والنقل والحذف.
  • Storage Access Framework — آلية نظام Android لاختيار المستندات باستخدام Intent ACTION_OPEN_DOCUMENT.
  • DocumentProvider — مكون Android لنشر ملفات التطبيق في نظام الملفات المشترك عبر SAF.

ما هو نظام الملفات في التطبيقات المحمولة؟

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

الاختلافات المعمارية بين iOS و Android

يستخدم iOS نموذج Sandbox، حيث يوجد كل تطبيق في حاويته الخاصة بأذونات محدودة بصرامة. قبل الإصدار 10، كان Android يوفر وصولاً كاملاً إلى التخزين الخارجي، ولكن مع تقديم Scoped Storage، أصبح النهج أقرب إلى iOS. الفرق الرئيسي هو أن iOS يعزل نظام الملفات تمامًا، بينما يقدم Android عدة مستويات من الوصول: دليل خاص و MediaStore عام ووصول مؤقت عبر SAF.

الأنواع الرئيسية للتخزين

تستخدم التطبيقات المحمولة ثلاثة أنواع من تخزين البيانات. التخزين الخاص — دليل يمكن للتطبيق الوصول إليه فقط للملفات الداخلية والتخزين المؤقت. التخزين المشترك — ملفات الوسائط عبر MediaStore (Android) أو Files App (iOS). التخزين السحابي — iCloud Drive و Google Drive للمزامنة بين الأجهزة. كل نوع له حدوده الخاصة من حيث الحجم وعمر الملف وشروط الوصول.

نوع التخزينiOSAndroid
خاصDocuments, Library, CachesgetFilesDir(), getCacheDir()
وسائط مشتركةPHPhotoLibrary عبر المنتقيMediaStore API (ContentResolver)
مستندات مشتركةFiles App عبر UIDocumentPickerStorage Access Framework (SAF)
سحابيiCloud Drive (UIDocument)Google Drive API
مخبأدليل Caches، يتم مسحه بواسطة النظامgetCacheDir(), getExternalCacheDir()

نظام الملفات في تطوير التطبيقات المحمولة: Sandbox على iOS

Sandbox هي بنية الأمان في iOS التي تعزل كل تطبيق. يمكن للتطبيق القراءة والكتابة فقط داخل صندوق الحماية الخاص به. للوصول إلى جهات الاتصال أو الصور أو الملفات من التطبيقات الأخرى، يجب استخدام منتقيات النظام: UIImagePickerController أو UIDocumentPickerViewController. يتم تكوين الوصول إلى Files App عبر علامة UIFileSharingEnabled في Info.plist. يتطلب نظام الملفات في تطوير التطبيقات المحمولة على iOS فهم بنية الدليل واختيار الموقع الصحيح لكل نوع من البيانات.

هيكل دليل صندوق الحماية

يتكون صندوق الحماية في iOS من عدة أدلة قياسية. Documents — لملفات المستخدم، مضمنة في iCloud Backup. Caches — للبيانات المؤقتة التي قد يحذفها النظام عند انخفاض مساحة التخزين. Temporary — لملفات الجلسة الحالية، يتم مسحها عند إعادة التشغيل. Application Support — لبيانات التطبيق الداخلية المخفية عن المستخدم. اختيار الدليل الخاطئ يؤدي إلى مشاكل: حفظ ذاكرة التخزين المؤقت في Documents يهدر مساحة iCloud وينتهك إرشادات Apple لنظام الملفات.

swift
import Foundation

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

let fileURL = documentsURL.appendingPathComponent("notes.txt")
let text = "Содержимое файла"

// كتابة ذرية مع التشفير
try text.write(
    to: fileURL,
    atomically: true,
    encoding: .utf8
)

FileManager — واجهة API الرئيسية لعمليات الملفات

توفر الفئة FileManager مجموعة كاملة من الطرق لإدارة الملفات على iOS. FileManager.default هو مفردة آمنة للخيوط مناسبة لمعظم العمليات. تغطي طرق مثل fileExists(atPath:) و createDirectory(at:withIntermediateDirectories:attributes:) و copyItem(at:to:) و removeItem(at:) السيناريوهات الأساسية. يجب تنفيذ عمليات الملفات الأكبر من 1 ميغابايت في خيط خلفية عبر DispatchQueue.global(). لدفق كميات كبيرة، استخدم FileHandle بدلاً من تحميل الملف بأكمله في الذاكرة.

swift
func readDocumentsFile(named fileName: String) -> String? {
    guard let docsURL = FileManager.default.urls(
        for: .documentDirectory,
        in: .userDomainMask
    ).first else { return nil }

    let fileURL = docsURL.appendingPathComponent(fileName)
    return try? String(contentsOf: fileURL)
}

نظام الملفات في التطبيقات المحمولة: Scoped Storage على Android

مع إصدار Android 10، قدم Google Scoped Storage — نموذج وصول مقيد إلى نظام الملفات. يمكن للتطبيق القراءة والكتابة بحرية فقط في أدلته الخاصة. للملفات الوسائط (الصور والفيديو والصوت)، يتم استخدام MediaStore API عبر ContentResolver. للمستندات التعسفية، يتم استخدام Storage Access Framework عبر Intent ACTION_OPEN_DOCUMENT. على Android 11+، الوصول المباشر إلى جذر التخزين الخارجي محظور تمامًا، ويجب على جميع المطورين استخدام واجهات API الجديدة.

MediaStore API للعمل مع ملفات الوسائط

MediaStore هو ContentProvider نظامي للوصول إلى ملفات الوسائط على الجهاز. عبر ContentResolver، يطلب التطبيق Uri للملفات بدلاً من المسارات المباشرة. MediaStore.Files — لجميع أنواع الملفات، Images — للصور، Video — للفيديو، Audio — للتسجيلات الصوتية. تتم الكتابة إلى الأدلة المشتركة عبر insert() مع DISPLAY_NAME و MIME_TYPE و RELATIVE_PATH. بعد الإدراج، يتلقى التطبيق Uri يتم من خلاله كتابة البايتات. تلعب أنواع MIME دورًا رئيسيًا — النوع غير الصحيح سيؤدي إلى خطأ عند فتح الملف.

kotlin
val contentValues = ContentValues().apply {
    put(MediaStore.MediaColumns.DISPLAY_NAME, "report.pdf")
    put(MediaStore.MediaColumns.MIME_TYPE, "application/pdf")
    put(MediaStore.MediaColumns.RELATIVE_PATH, "Documents/Reports")
}

val uri = contentResolver.insert(
    MediaStore.Files.getContentUri("external"),
    contentValues
)

uri?.let {
    contentResolver.openOutputStream(it)?.use { stream ->
        stream.write(pdfBytes)
    }
}

Storage Access Framework لاختيار الملفات

يوفر SAF واجهة موحدة لاختيار وإنشاء الملفات دون أذونات وقت التشغيل. Intent ACTION_OPEN_DOCUMENT يفتح مدير الملفات النظامي على Android. بعد الاختيار، يتلقى التطبيق Uri بنمط content:// مع وصول مؤقت عبر FLAG_GRANT_READ_URI_PERMISSION. ACTION_CREATE_DOCUMENT يسمح بحفظ الملفات في أي موقع تخزين خارجي يختاره المستخدم. يعمل SAF على Android 5+ ويتيح الوصول إلى الملفات من موفري الخدمات السحابية المتصلين عبر DocumentsProvider.

kotlin
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
    addCategory(Intent.CATEGORY_OPENABLE)
    type = "*/*"
    putExtra(Intent.EXTRA_MIME_TYPES, arrayOf(
        "application/pdf",
        "text/plain"
    ))
}
startActivityForResult(intent, REQUEST_CODE)

اختيار المستندات في التطبيقات المحمولة: منتقيات النظام

توفر كلتا المنصتين آليات مدمجة للمستخدمين لاختيار الملفات. المستندات في التطبيقات المحمولة تُمرر عبر منتقيات النظام التي تمنح وصولاً مؤقتًا إلى ملف دون أذونات دائمة. على iOS، هذا هو UIDocumentPickerViewController؛ على Android، ACTION_OPEN_DOCUMENT. يمكن اختيار المستندات في التطبيقات المحمولة من كل من التخزين المحلي والخدمات السحابية. يحدد المستخدم الملف صراحةً، ويتلقى التطبيق Uri أو URL مع فترة صلاحية محدودة.

UIDocumentPickerViewController على iOS

UIDocumentPickerViewController يفتح Files App ويسمح باختيار مستند واحد أو أكثر. الأوضاع: استيراد (نسخ إلى صندوق الحماية) وفتح (وصول عبر URL بنطاق أمني). لتصفية الملفات، يتم تمرير مصفوفة من أنواع UTType — على سبيل المثال، .pdf و .plainText. بعد استلام URL، يجب على التطبيق استدعاء startAccessingSecurityScopedResource() قبل القراءة و stopAccessingSecurityScopedResource() بعد الانتهاء. عدم استدعاء stopAccessing يؤدي إلى تسرب موارد النظام. تتطلب المستندات في التطبيقات المحمولة على iOS تحريرًا إلزاميًا للأذونات المؤقتة بعد الانتهاء من العمل مع الملف.

swift
let picker = UIDocumentPickerViewController(
    forOpeningContentTypes: [.pdf, .plainText]
)
picker.allowsMultipleSelection = true
picker.delegate = self
present(picker, animated: true)

// تحرير الوصول في المفوض
func documentPicker(
    _ controller: UIDocumentPickerViewController,
    didPickDocumentsAt urls: [URL]
) {
    guard let url = urls.first else { return }
    url.startAccessingSecurityScopedResource()
    defer { url.stopAccessingSecurityScopedResource() }
}

FileProvider و DocumentProvider على Android

FileProvider هو فئة فرعية من ContentProvider لمشاركة الملفات بشكل آمن بين التطبيقات. يقوم بإنشاء Uri بنمط content:// مؤقت بناءً على ملفات من أدلة XML محددة. تحصل التطبيقات الأخرى على الوصول عبر Intent مع FLAG_GRANT_READ_URI_PERMISSION. DocumentProvider، على عكس FileProvider، ينشر الملفات في SAF ويسمح للتطبيقات الأخرى بتصفح محتويات تطبيقك كجزء من نظام الملفات. لتنفيذ DocumentsProvider، تحتاج إلى تجاوز queryRoots() و queryChildDocuments() و openDocument()، ثم تسجيله في AndroidManifest.xml

iCloud Drive ومزامنة الملفات السحابية

تمنح المزامنة السحابية المستخدمين إمكانية الوصول إلى المستندات على جميع أجهزتهم. نظام الملفات في التطبيقات المحمولة يُعزز بطبقة سحابية: UIDocument على iOS يتتبع التغييرات تلقائيًا ويزامنها عبر iCloud. على Android، تُبنى وظائف مماثلة عبر Google Drive API أو DocumentsProvider مع جذور سحابية. فهم نظام الملفات في تطوير التطبيقات المحمولة أمر بالغ الأهمية لبناء مزامنة موثوقة عبر الأجهزة.

UIDocument — المزامنة على iOS

UIDocument هو فئة مجردة للعمل مع مستندات iCloud. يحفظ التغييرات تلقائيًا، ويقرأ البيانات، ويُعلم المفوض بالتحديثات. عند تعارض الكتابة، يوفر NSFileVersion قائمة بالإصدارات المتاحة — يمكن للمطور اختيار الأحدث أو عرض خيارات حل التعارض على المستخدم. تكوين Ubiquity Container في قدرات المشروع إلزامي لـ iCloud Drive. يمنع NSFileCoordinator و NSFilePresenter سباقات البيانات أثناء الوصول المتزامن من خيوط أو أجهزة متعددة.

النسخ الاحتياطي واستعادة البيانات

يقوم iOS تلقائيًا بتضمين دليل Documents في iCloud Backup. يعمل Android مع Auto Backup for Apps — يحفظ النظام البيانات من getFilesDir() و SharedPreferences وقواعد بيانات SQLite إلى Google Drive. لا يتم تضمين ذاكرة التخزين المؤقت والملفات الخارجية في النسخ الاحتياطية. تسمح كلا المنصتين بتكوين الاستثناءات: على iOS عبر NSURLIsExcludedFromBackupKey، على Android عبر تكوين XML لقواعد النسخ الاحتياطي. تشفير الملفات ذات البيانات الشخصية إلزامي — على iOS استخدم NSDataWritingFileProtectionComplete، على Android استخدم EncryptedFile من مكتبة security-crypto.

المعلمةiOSAndroid
النسخ الاحتياطي الافتراضيDocuments و LibrarygetFilesDir(), SharedPreferences, قواعد البيانات
استثناء الملفاتisExcludedFromBackupKeyقواعد XML للنسخ الاحتياطي (fullBackupContent)
التشفيرNSDataWritingFileProtectionCompleteEncryptedFile (security-crypto)
المزامنة السحابيةUIDocument + iCloudGoogle Drive API + SAF
الاستعادة التلقائيةiCloud Restore بعد التثبيتAuto Backup عند إعادة التثبيت

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

ما هو Sandbox على iOS؟

Sandbox هي بيئة معزولة لكل تطبيق على iOS. لا يمكن للتطبيق الوصول إلى ملفات التطبيقات الأخرى دون استخدام منتقيات النظام مثل UIDocumentPickerViewController.

ما هو Scoped Storage على Android؟

Scoped Storage هو نموذج وصول مقيد إلى نظام الملفات على Android 10+. يقرأ التطبيق مباشرة فقط ملفاته الخاصة، ويستخدم MediaStore API للوسائط و Storage Access Framework للمستندات.

كيفية اختيار ملف على iOS؟

استخدم UIDocumentPickerViewController — منتقي النظام لاختيار المستندات من Files App أو iCloud Drive. بعد الاختيار، تحصل على URL بنطاق أمني مع وصول مؤقت.

كيفية الوصول إلى الملفات على Android 11+؟

للملفات الوسائط، استخدم MediaStore API عبر ContentResolver مع تحديد نوع MIME. للمستندات التعسفية، استخدم Storage Access Framework مع Intent ACTION_OPEN_DOCUMENT.

ما هو FileProvider على Android؟

FileProvider هو فئة فرعية من ContentProvider لمشاركة الملفات بشكل آمن بين التطبيقات عبر Uri بنمط content:// مؤقت مع FLAG_GRANT_READ_URI_PERMISSION.

الملخص

  • Sandbox — نظام الملفات المعزول في iOS حيث يمكن للتطبيق الوصول فقط إلى أدلته الخاصة Documents و Caches و Library.
  • FileManager — واجهة API الرئيسية لعمليات الملفات على iOS. اقرأ الملفات الكبيرة عبر FileHandle في خيط خلفية.
  • Scoped Storage — نموذج نظام الملفات على Android 10+ الذي يستبدل الوصول المباشر إلى التخزين الخارجي بـ MediaStore API و SAF.
  • MediaStore API — ContentProvider نظامي للعمل مع ملفات الوسائط على Android. تتم الكتابة عبر insert() مع ContentValues.
  • Storage Access Framework — آلية عالمية لاختيار المستندات على Android عبر ACTION_OPEN_DOCUMENT و ACTION_CREATE_DOCUMENT.
  • UIDocumentPickerViewController — منتقي النظام في iOS الذي يفتح Files App و iCloud Drive. يعمل مع URLs بنطاق أمني.
  • FileProvider — آلية لمشاركة الملفات بشكل آمن بين تطبيقات Android عبر Uri بنمط content:// مؤقت وأذونات وقت التشغيل.

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

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

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