Application Support: تخزين الإعدادات وCore Data

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

Application Support هو دليل في بيئة الحماية (sandbox) لتطبيق iOS مصمم لتخزين البيانات المساعدة اللازمة لعمل التطبيق، ولكنها غير منشأة مباشرة من قبل المستخدم. وفقاً لـ Apple File System Basics (2024)، هذا الدليل مثالي لملفات الإعدادات، وقواعد بيانات SQLite الخاصة بـ Core Data، والوثائق المخزنة مؤقتاً، وغيرها من البيانات التي يولدها التطبيق بنفسه. على عكس دليل Documents، لا يظهر Application Support في iTunes File Sharing وليس للمستخدم وصول مباشر إليه، مما يحمي بيانات الخدمة من الحذف العرضي.

الخلاصة

  • Application Support — دليل للبيانات التي ينشئها التطبيق لعمله الخاص، غير مخصصة للمستخدم.
  • الملفات من Application Support تُنسخ احتياطياً تلقائياً إلى iCloud و iTunes ما لم يتم تعيين علامة الاستثناء.
  • المسار إلى الدليل هو NSApplicationSupportDirectory أو FileManager.urls(for: .applicationSupportDirectory).
  • Core Data بشكل افتراضي تضع قواعد بيانات SQLite في Application Support.
  • المستخدم ليس لديه وصول مباشر إلى Application Support عبر Files أو iTunes.

ما هو Application Support في iOS؟

Application Support هو دليل في بيئة الحماية (sandbox) لتطبيق iOS مصمم لتخزين البيانات التي ينشئها التطبيق ويستخدمها لعمله، ولكنها ليست مستندات مستخدم. هذا هو المكان الرئيسي للإعدادات، وقواعد البيانات، والبيانات الوصفية المخزنة مؤقتاً، وغيرها من الملفات المساعدة.

يصنف iOS Application Support كـ طبقة وسيطة بين Documents (بيانات المستخدم) و Caches (بيانات مؤقتة). يمكن أن تكون الملفات في Application Support دائمة نسبياً، ولكن لا ينبغي أن يكون للمستخدم وصول مباشر إليها — وهذا ما يميزها عن دليل Documents.

وفقاً لـ وثائق مطوري Apple (2024)، Application Support هو المكان الموصى به لتخزين قواعد بيانات SQLite الخاصة بـ Core Data، وملفات Realm، والإعدادات بتنسيق JSON/plist، والمواد المرجعية التي تم تنزيلها، وغيرها من البيانات التي يستخدمها التطبيق ولكن لم ينشئها المستخدم صراحةً.

مهم: بشكل افتراضي، Application Support مشمول في النسخ الاحتياطي لـ iCloud و iTunes. إذا كان التطبيق يخزن كميات كبيرة من البيانات في هذا الدليل التي يمكن إعادة إنشائها (مثل الأدلة التي تم تنزيلها)، فيجب تعيين علامة isExcludedFromBackup للملفات المعنية.

كيفية الحصول على المسار إلى Application Support

في Swift، يتم الحصول على المسار إلى دليل Application Support عبر FileManager.urls(for: .applicationSupportDirectory). توصي Apple بإنشاء دليل فرعي باسم التطبيق داخل Application Support لعزل البيانات.

swift
import Foundation

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

// Create app subdirectory
let bundleID = Bundle.main.bundleIdentifier ?? "com.example.app"
let appDir = appSupportURL.appendingPathComponent(bundleID)
try fileManager.createDirectory(
    at: appDir,
    withIntermediateDirectories: true
)

يستخدم Objective-C NSSearchPathForDirectoriesInDomains مع NSApplicationSupportDirectory. كما هو الحال مع Swift، يُنصح بإنشاء دليل فرعي باسم التطبيق.

objective-c
@import Foundation;

NSArray *paths = NSSearchPathForDirectoriesInDomains(
    NSApplicationSupportDirectory,
    NSUserDomainMask,
    YES
);
NSString *appSupportPath = paths.firstObject;
NSString *appDir = [appSupportPath stringByAppendingPathComponent:@"com.example.app"];

عند التشغيل الأول، قد لا يكون دليل Application Support موجوداً — يجب إنشاؤه باستخدام createDirectory(at:withIntermediateDirectories:). هذا يختلف عن دليل Documents الذي ينشئه النظام تلقائياً.

ما البيانات التي تخزنها في Application Support

Application Support مناسب لمجموعة واسعة من البيانات التي يستخدمها التطبيق لعمله. اختيار البيانات الصحيحة لهذا الدليل يحسن تنظيم نظام الملفات ويبسط النسخ الاحتياطي.

قواعد بيانات Core Data و Realm

ملفات SQLite الخاصة بـ Core Data تُنشأ في Application Support بشكل افتراضي. توصي Realm أيضاً بوضع قواعد البيانات في هذا الدليل. هذا يعزل مستندات المستخدم عن قواعد البيانات الداخلية للتطبيق.

ملفات الإعدادات

ملفات JSON و plist و XML بإعدادات التطبيق، و Feature Flags، والبيانات الوصفية المخزنة مؤقتاً عن المستخدم (ولكن ليس رموز المصادقة — استخدم Keychain لها).

نوع البياناتApplication Supportالبديل
SQLite Core Dataنعم (افتراضي)
إعدادات .plist / .jsonنعمUserDefaults (للبسيطة)
مواد مرجعية تم تنزيلهانعمDocuments (إذا كانت للمستخدم)
سجلات التطبيقبشروطCaches (للسجلات)
رموز المصادقةلاKeychain

معيار الاختيار: إذا كانت البيانات منشأة ومستخدمة من قبل التطبيق، وليس المستخدم، ويجب أن تبقى بين جلسات التشغيل — مكانها في Application Support.

Core Data و Application Support

Core Data هو أحد المستهلكين الرئيسيين لـ Application Support. عند إنشاء NSPersistentContainer، تضع Core Data تلقائياً ملفات SQLite في Library/Application Support باسم فريد بناءً على اسم النموذج.

فهم أين تخزن Core Data الملفات أمر بالغ الأهمية لـ الترحيل (migrations)، والنسخ الاحتياطي، وتصحيح الأخطاء. الملفات الرئيسية: .sqlite (البيانات)، .sqlite-wal (سجل الكتابة المسبقة)، .sqlite-shm (الذاكرة المشتركة).

swift
import CoreData

// Create Core Data container
let container = NSPersistentContainer(name: "MyAppModel")

// Custom store URL directory
guard let appSupportURL = FileManager.default
    .urls(for: .applicationSupportDirectory,
        in: .userDomainMask).first else { return }

let storeURL = appSupportURL
    .appendingPathComponent("MyAppModel.sqlite")
let description = NSPersistentStoreDescription(url: storeURL)
container.persistentStoreDescriptions = [description]

عند استخدام مزامنة Core Data مع CloudKit، يبقى ملف SQLite في Application Support، ويعمل CloudKit كطبقة نقل. في هذه الحالة، من المهم عدم استثناء الملفات من النسخ الاحتياطي — وإلا فقد تتعطل المزامنة بين الأجهزة.

Application Support مقابل دليل Documents

الفرق بين Application Support و Documents هو أحد أهم الاختلافات لتنظيم هيكل ملفات تطبيق iOS بشكل صحيح. الاختيار غير الصحيح قد يؤدي إلى حذف المستخدم لبيانات مهمة عن طريق الخطأ أو، على العكس، عدم قدرته على العثور على ملفاته.

المعاملApplication Supportدليل Documents
وصول المستخدملا (مخفي)عبر iTunes File Sharing
نوع البياناتبيانات خدمة التطبيقمستندات المستخدم
النسخ الاحتياطي iCloudنعم (افتراضي)نعم (افتراضي)
خطر الحذفمنخفض (لا وصول)متوسط (يمكن للمستخدم الوصول)
مثالSQLite Core DataPDF مصدر

قاعدة بسيطة: إذا كان يجب على المستخدم رؤية الملف والقدرة على حذفه — استخدم Documents. إذا كان الملف مطلوباً لعمل التطبيق ولكن لا يحتاج المستخدم إلى معرفته — استخدم Application Support. إذا كان يمكن إعادة إنشاء البيانات — استخدم Caches.

أفضل الممارسات للعمل مع Application Support

العمل مع Application Support يتطلب مراعاة عدة ميزات تميزه عن أدلة الحماية الأخرى. اتباع هذه الممارسات يساعد في تجنب فقدان البيانات، ومشاكل الترحيل، والسلوك غير المتوقع للتطبيق.

دائماً أنشئ الدليل عند التشغيل الأول

على عكس Documents، قد لا يكون Application Support موجوداً عند التشغيل الأول. استخدم createDirectory(at:withIntermediateDirectories:) مع المعامل withIntermediateDirectories: true لضمان إنشاء سلسلة الأدلة الفرعية بأكملها.

استخدم دليلاً فرعياً مع Bundle Identifier

أنشئ دليلاً فرعياً مع Bundle Identifier داخل Application Support. هذا يعزل بيانات تطبيقك عن بيانات التطبيقات الأخرى (على الرغم من أن بيئة الحماية توفر بالفعل عزلاً) ويبسط الترحيل عند تغيير المزود.

swift
import Foundation

enum AppSupport {
    static func ensureDirectory() throws -> URL {
        let fm = FileManager.default
        let baseURL = try fm.url(
            for: .applicationSupportDirectory,
            in: .userDomainMask,
            appropriateFor: nil,
            create: true
        )
        let appDir = baseURL
            .appendingPathComponent(Bundle.main.bundleIdentifier ?? "default")
        try fm.createDirectory(at: appDir, withIntermediateDirectories: true)
        return appDir
    }
}

اتباع هذه الممارسات يضمن أن بيانات خدمة التطبيق منظمة بشكل صحيح، ومحمية من الحذف العرضي من قبل المستخدم، ويتم استعادتها بشكل صحيح من النسخ الاحتياطية.

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

هل أحتاج إلى إنشاء دليل Application Support يدوياً؟

نعم، Application Support لا يُنشأ تلقائياً عند تثبيت التطبيق. على عكس Documents و Caches، التي ينشئها النظام عند التشغيل الأول، يجب إنشاء Application Support بواسطة المطور باستخدام FileManager.createDirectory(at:withIntermediateDirectories:). يتم ذلك عادةً في طريقة application(_:didFinishLaunchingWithOptions:).

هل يمكن للمستخدم حذف البيانات من Application Support عن طريق الخطأ؟

لا، من خلال واجهة iOS القياسية (Files, iTunes) ليس للمستخدم وصول إلى Application Support. ومع ذلك، عند حذف التطبيق نفسه، يتم حذف بيئة الحماية بأكملها، بما في ذلك Application Support، بالكامل. تبقى النسخة الاحتياطية في iCloud حتى الاستعادة أو الحذف اليدوي.

هل Application Support مناسب لتخزين الفيديوهات التي تم تنزيلها؟

للفيديوهات التي تم تنزيلها والمخصصة لـ المستخدم، من الأفضل استخدام دليل Documents ليتمكن المستخدم من إدارة هذه الملفات عبر Files. إذا كان الفيديو جزءاً من ذاكرة التخزين المؤقت الداخلية للتطبيق (مثل محتوى تدريبي بدون اتصال)، يمكن استخدام Application Support مع علامة isExcludedFromBackup للملفات الكبيرة.

كيفية ترحيل البيانات من Application Support عند تحديث التطبيق؟

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

هل يؤثر حجم Application Support على سرعة بدء تشغيل التطبيق؟

بشكل غير مباشر — نعم. إذا كان Application Support يحتوي على عشرات الآلاف من الملفات الصغيرة، فقد يؤدي FileManager.enumerator إلى إبطاء التهيئة. يُنصح بتحديد عدد الملفات في Application Support (لا يزيد عن 1000) واستخدام قواعد البيانات (Core Data, Realm) بدلاً من العديد من الملفات الفردية للبيانات المنظمة.

الملخص

  • Application Support — دليل لبيانات خدمة التطبيق غير المخصصة للوصول المباشر من المستخدم.
  • المسار إلى الدليل هو FileManager.urls(for: .applicationSupportDirectory) أو NSSearchPathForDirectoriesInDomains مع NSApplicationSupportDirectory.
  • يجب إنشاء الدليل يدوياً عند أول تشغيل للتطبيق.
  • Core Data بشكل افتراضي تضع قواعد بيانات SQLite في Application Support.
  • المستخدم ليس لديه وصول إلى Application Support عبر Files أو iTunes.
  • الملفات من Application Support تُنسخ احتياطياً إلى iCloud ما لم يتم تعيين isExcludedFromBackup.
  • أنشئ دليلاً فرعياً مع Bundle Identifier لعزل البيانات وتبسيط الترحيل.

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

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

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

اقرأ أيضًا