Application Support: چیست، ذخیره‌سازی تنظیمات و Core Data

نویسنده: IT Sectr منتشر شده: 2026-07-10 زمان مطالعه: 10 دقیقه

Application Support — دایرکتوری در sandbox برنامه iOS است که برای ذخیره داده‌های کمکی لازم برای عملکرد برنامه طراحی شده است، اما مستقیماً توسط کاربر ایجاد نمی‌شود. طبق Apple File System Basics (2024)، این دایرکتوری برای فایل‌های پیکربندی، پایگاه‌های داده SQLite Core Data، اسناد ذخیره‌شده در حافظه پنهان و سایر داده‌هایی که برنامه به طور مستقل تولید می‌کند، بهینه است. برخلاف Documents Directory، 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 Directory متمایز می‌کند.

طبق Apple Developer Documentation (2024)، Application Support مکان توصیه‌شده برای ذخیره پایگاه‌های داده SQLite Core Data، فایل‌های Realm، تنظیمات در قالب JSON/plist، مطالب مرجع دانلودشده و سایر داده‌هایی است که برنامه استفاده می‌کند اما کاربر به صراحت ایجاد نکرده است.

مهم: به طور پیش‌فرض، Application Support در پشتیبان‌گیری iCloud و iTunes شامل می‌شود. اگر برنامه حجم زیادی از داده‌های قابل بازیابی را در این دایرکتوری ذخیره می‌کند (مثلاً راهنماهای دانلودشده)، باید پرچم isExcludedFromBackup را برای فایل‌های مربوطه تنظیم کنید.

چگونه مسیر Application Support را دریافت کنیم

در Swift، مسیر Application Support Directory از طریق 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 }

// ایجاد زیردایرکتوری برنامه
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 Directory که توسط سیستم به طور خودکار ایجاد می‌شود متمایز می‌کند.

چه داده‌هایی را در 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 فایل‌ها را کجا ذخیره می‌کند برای مهاجرت‌ها، پشتیبان‌گیری و اشکال‌زدایی حیاتی است. فایل‌های اصلی: .sqlite (داده‌ها)، .sqlite-wal (Write-Ahead Log)، .sqlite-shm (Shared Memory).

swift
import CoreData

// ایجاد کنتینر Core Data
let container = NSPersistentContainer(name: "MyAppModel")

// دایرکتوری URL سفارشگاه سفارشی
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]

هنگام استفاده از همگام‌سازی CloudKit برای Core Data، فایل SQLite در Application Support باقی می‌ماند و CloudKit به عنوان لایه انتقال استفاده می‌شود. در این صورت مهم است که فایل‌ها را از پشتیبان‌گیری حذف نکنید — در غیر این صورت همگام‌سازی بین دستگاه‌ها ممکن است مختل شود.

Application Support در مقابل Documents Directory

تفاوت بین Application Support و Documents — یکی از مهم‌ترین موارد برای سازماندهی صحیح ساختار فایل برنامه iOS است. انتخاب نادرست می‌تواند منجر به حذف تصادفی داده‌های مهم برنامه توسط کاربر یا برعکس، ناتوانی در یافتن فایل‌های خود شود.

پارامترApplication SupportDocuments Directory
دسترسی کاربرخیر (مخفی)از طریق iTunes File Sharing
نوع دادهداده‌های سرویس برنامهاسناد کاربر
پشتیبان iCloudبله (پیش‌فرض)بله (پیش‌فرض)
ریسک حذفکم (بدون دسترسی)متوسط (در دسترس کاربر)
مثالSQLite Core DataPDF صادرشده

قاعده ساده: اگر کاربر باید فایل را ببیند و بتواند آن را حذف کند — از Documents استفاده کنید. اگر فایل برای کار برنامه لازم است اما کاربر نیازی به دانستن درباره آن ندارد — از Application Support استفاده کنید. اگر داده‌ها قابل بازیابی هستند — از Caches استفاده کنید.

بهترین روش‌های کار با Application Support

کار با Application Support نیاز به در نظر گرفتن چند ویژگی دارد که آن را از سایر دایرکتوری‌های sandbox متمایز می‌کند. رعایت این روش‌ها به جلوگیری از از دست رفتن داده‌ها، مشکلات مهاجرت و رفتار غیرمنتظره برنامه کمک می‌کند.

همیشه دایرکتوری را در اولین راه‌اندازی ایجاد کنید

برخلاف Documents، Application Support ممکن است در اولین راه‌اندازی وجود نداشته باشد. از createDirectory(at:withIntermediateDirectories:) با پارامتر withIntermediateDirectories: true استفاده کنید تا ایجاد کل زنجیره زیردایرکتوری‌ها تضمین شود.

از زیردایرکتوری با Bundle Identifier استفاده کنید

یک زیردایرکتوری با Bundle Identifier در داخل Application Support ایجاد کنید. این کار داده‌های برنامه شما را از داده‌های سایر برنامه‌ها جدا می‌کند (اگرچه sandbox قبلاً ایزوله‌سازی را فراهم می‌کند) و مهاجرت را در هنگام تغییر ارائه‌دهنده ساده می‌کند.

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 Directory را به صورت دستی ایجاد کرد؟

بله، Application Support به طور خودکار هنگام نصب برنامه ایجاد نمی‌شود. برخلاف Documents و Caches که سیستم در اولین راه‌اندازی ایجاد می‌کند، Application Support باید توسط توسعه‌دهنده با استفاده از FileManager.createDirectory(at:withIntermediateDirectories:) ایجاد شود. این کار معمولاً در متد application(_:didFinishLaunchingWithOptions:) انجام می‌شود.

آیا کاربر می‌تواند به طور تصادفی داده‌های Application Support را حذف کند؟

خیر، از طریق رابط استاندارد iOS (Files، iTunes) کاربر به Application Support دسترسی ندارد. با این حال، هنگام حذف خود برنامه، کل sandbox از جمله Application Support به طور کامل حذف می‌شود. پشتیبان در iCloud تا زمان بازیابی یا حذف دستی حفظ می‌شود.

آیا Application Support برای ذخیره ویدیوهای دانلودشده مناسب است؟

برای ویدیوهای دانلودشده که برای کاربر در نظر گرفته شده‌اند، بهتر است از Documents Directory استفاده کنید — تا کاربر بتواند این فایل‌ها را از طریق Files مدیریت کند. اگر ویدیو بخشی از حافظه پنهان داخلی برنامه است (مثلاً محتوای آموزشی آفلاین)، می‌توان از Application Support با پرچم isExcludedFromBackup برای فایل‌های بزرگ استفاده کرد.

چگونه داده‌ها را از Application Support هنگام به‌روزرسانی برنامه مهاجرت دهیم؟

نسخه‌بندی زیردایرکتوری‌ها را در داخل 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 از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید