Application Support هو دليل في بيئة الحماية (sandbox) لتطبيق iOS مصمم لتخزين البيانات المساعدة اللازمة لعمل التطبيق، ولكنها غير منشأة مباشرة من قبل المستخدم. وفقاً لـ Apple File System Basics (2024)، هذا الدليل مثالي لملفات الإعدادات، وقواعد بيانات SQLite الخاصة بـ Core Data، والوثائق المخزنة مؤقتاً، وغيرها من البيانات التي يولدها التطبيق بنفسه. على عكس دليل Documents، لا يظهر Application Support في iTunes File Sharing وليس للمستخدم وصول مباشر إليه، مما يحمي بيانات الخدمة من الحذف العرضي.
الخلاصة
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 للملفات المعنية.
في Swift، يتم الحصول على المسار إلى دليل Application Support عبر FileManager.urls(for: .applicationSupportDirectory). توصي Apple بإنشاء دليل فرعي باسم التطبيق داخل Application Support لعزل البيانات.
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، يُنصح بإنشاء دليل فرعي باسم التطبيق.
@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 مناسب لمجموعة واسعة من البيانات التي يستخدمها التطبيق لعمله. اختيار البيانات الصحيحة لهذا الدليل يحسن تنظيم نظام الملفات ويبسط النسخ الاحتياطي.
ملفات 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. عند إنشاء NSPersistentContainer، تضع Core Data تلقائياً ملفات SQLite في Library/Application Support باسم فريد بناءً على اسم النموذج.
فهم أين تخزن Core Data الملفات أمر بالغ الأهمية لـ الترحيل (migrations)، والنسخ الاحتياطي، وتصحيح الأخطاء. الملفات الرئيسية: .sqlite (البيانات)، .sqlite-wal (سجل الكتابة المسبقة)، .sqlite-shm (الذاكرة المشتركة).
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 هو أحد أهم الاختلافات لتنظيم هيكل ملفات تطبيق iOS بشكل صحيح. الاختيار غير الصحيح قد يؤدي إلى حذف المستخدم لبيانات مهمة عن طريق الخطأ أو، على العكس، عدم قدرته على العثور على ملفاته.
| المعامل | Application Support | دليل Documents |
|---|---|---|
| وصول المستخدم | لا (مخفي) | عبر iTunes File Sharing |
| نوع البيانات | بيانات خدمة التطبيق | مستندات المستخدم |
| النسخ الاحتياطي iCloud | نعم (افتراضي) | نعم (افتراضي) |
| خطر الحذف | منخفض (لا وصول) | متوسط (يمكن للمستخدم الوصول) |
| مثال | SQLite Core Data | PDF مصدر |
قاعدة بسيطة: إذا كان يجب على المستخدم رؤية الملف والقدرة على حذفه — استخدم Documents. إذا كان الملف مطلوباً لعمل التطبيق ولكن لا يحتاج المستخدم إلى معرفته — استخدم Application Support. إذا كان يمكن إعادة إنشاء البيانات — استخدم Caches.
العمل مع Application Support يتطلب مراعاة عدة ميزات تميزه عن أدلة الحماية الأخرى. اتباع هذه الممارسات يساعد في تجنب فقدان البيانات، ومشاكل الترحيل، والسلوك غير المتوقع للتطبيق.
على عكس Documents، قد لا يكون Application Support موجوداً عند التشغيل الأول. استخدم createDirectory(at:withIntermediateDirectories:) مع المعامل withIntermediateDirectories: true لضمان إنشاء سلسلة الأدلة الفرعية بأكملها.
أنشئ دليلاً فرعياً مع Bundle Identifier داخل Application Support. هذا يعزل بيانات تطبيقك عن بيانات التطبيقات الأخرى (على الرغم من أن بيئة الحماية توفر بالفعل عزلاً) ويبسط الترحيل عند تغيير المزود.
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 لا يُنشأ تلقائياً عند تثبيت التطبيق. على عكس Documents و Caches، التي ينشئها النظام عند التشغيل الأول، يجب إنشاء Application Support بواسطة المطور باستخدام FileManager.createDirectory(at:withIntermediateDirectories:). يتم ذلك عادةً في طريقة application(_:didFinishLaunchingWithOptions:).
لا، من خلال واجهة iOS القياسية (Files, iTunes) ليس للمستخدم وصول إلى Application Support. ومع ذلك، عند حذف التطبيق نفسه، يتم حذف بيئة الحماية بأكملها، بما في ذلك Application Support، بالكامل. تبقى النسخة الاحتياطية في iCloud حتى الاستعادة أو الحذف اليدوي.
للفيديوهات التي تم تنزيلها والمخصصة لـ المستخدم، من الأفضل استخدام دليل Documents ليتمكن المستخدم من إدارة هذه الملفات عبر Files. إذا كان الفيديو جزءاً من ذاكرة التخزين المؤقت الداخلية للتطبيق (مثل محتوى تدريبي بدون اتصال)، يمكن استخدام Application Support مع علامة isExcludedFromBackup للملفات الكبيرة.
أضف إصدارات (versioning) للأدلة الفرعية داخل Application Support. عند التحديث، تحقق من الإصدار الحالي للبيانات وأنشئ دليلاً فرعياً جديداً إذا لزم الأمر، مع الاحتفاظ بالقديم للرجوع إليه. احذف الدليل القديم فقط بعد التأكد من أن جميع المستخدمين قد هاجروا بنجاح إلى الإصدار الجديد من البيانات.
بشكل غير مباشر — نعم. إذا كان Application Support يحتوي على عشرات الآلاف من الملفات الصغيرة، فقد يؤدي FileManager.enumerator إلى إبطاء التهيئة. يُنصح بتحديد عدد الملفات في Application Support (لا يزيد عن 1000) واستخدام قواعد البيانات (Core Data, Realm) بدلاً من العديد من الملفات الفردية للبيانات المنظمة.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا