Application Support — دایرکتوری در sandbox برنامه iOS است که برای ذخیره دادههای کمکی لازم برای عملکرد برنامه طراحی شده است، اما مستقیماً توسط کاربر ایجاد نمیشود. طبق Apple File System Basics (2024)، این دایرکتوری برای فایلهای پیکربندی، پایگاههای داده SQLite Core Data، اسناد ذخیرهشده در حافظه پنهان و سایر دادههایی که برنامه به طور مستقل تولید میکند، بهینه است. برخلاف Documents Directory، Application Support در iTunes File Sharing نمایش داده نمیشود و کاربر دسترسی مستقیم به آن ندارد، که از دادههای سرویس در برابر حذف تصادفی محافظت میکند.
نکات کلیدی
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 را برای فایلهای مربوطه تنظیم کنید.
در Swift، مسیر Application Support Directory از طریق 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 }
// ایجاد زیردایرکتوری برنامه
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 Directory که توسط سیستم به طور خودکار ایجاد میشود متمایز میکند.
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 فایلها را کجا ذخیره میکند برای مهاجرتها، پشتیبانگیری و اشکالزدایی حیاتی است. فایلهای اصلی: .sqlite (دادهها)، .sqlite-wal (Write-Ahead Log)، .sqlite-shm (Shared Memory).
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 — یکی از مهمترین موارد برای سازماندهی صحیح ساختار فایل برنامه iOS است. انتخاب نادرست میتواند منجر به حذف تصادفی دادههای مهم برنامه توسط کاربر یا برعکس، ناتوانی در یافتن فایلهای خود شود.
| پارامتر | Application Support | Documents Directory |
|---|---|---|
| دسترسی کاربر | خیر (مخفی) | از طریق iTunes File Sharing |
| نوع داده | دادههای سرویس برنامه | اسناد کاربر |
| پشتیبان iCloud | بله (پیشفرض) | بله (پیشفرض) |
| ریسک حذف | کم (بدون دسترسی) | متوسط (در دسترس کاربر) |
| مثال | SQLite Core Data | PDF صادرشده |
قاعده ساده: اگر کاربر باید فایل را ببیند و بتواند آن را حذف کند — از Documents استفاده کنید. اگر فایل برای کار برنامه لازم است اما کاربر نیازی به دانستن درباره آن ندارد — از Application Support استفاده کنید. اگر دادهها قابل بازیابی هستند — از Caches استفاده کنید.
کار با Application Support نیاز به در نظر گرفتن چند ویژگی دارد که آن را از سایر دایرکتوریهای sandbox متمایز میکند. رعایت این روشها به جلوگیری از از دست رفتن دادهها، مشکلات مهاجرت و رفتار غیرمنتظره برنامه کمک میکند.
برخلاف Documents، Application Support ممکن است در اولین راهاندازی وجود نداشته باشد. از createDirectory(at:withIntermediateDirectories:) با پارامتر withIntermediateDirectories: true استفاده کنید تا ایجاد کل زنجیره زیردایرکتوریها تضمین شود.
یک زیردایرکتوری با Bundle Identifier در داخل Application Support ایجاد کنید. این کار دادههای برنامه شما را از دادههای سایر برنامهها جدا میکند (اگرچه sandbox قبلاً ایزولهسازی را فراهم میکند) و مهاجرت را در هنگام تغییر ارائهدهنده ساده میکند.
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 دسترسی ندارد. با این حال، هنگام حذف خود برنامه، کل sandbox از جمله Application Support به طور کامل حذف میشود. پشتیبان در iCloud تا زمان بازیابی یا حذف دستی حفظ میشود.
برای ویدیوهای دانلودشده که برای کاربر در نظر گرفته شدهاند، بهتر است از Documents Directory استفاده کنید — تا کاربر بتواند این فایلها را از طریق Files مدیریت کند. اگر ویدیو بخشی از حافظه پنهان داخلی برنامه است (مثلاً محتوای آموزشی آفلاین)، میتوان از Application Support با پرچم isExcludedFromBackup برای فایلهای بزرگ استفاده کرد.
نسخهبندی زیردایرکتوریها را در داخل Application Support اضافه کنید. هنگام بهروزرسانی، نسخه فعلی دادهها را بررسی کنید و در صورت نیاز یک زیردایرکتوری جدید ایجاد کنید، زیردایرکتوری قدیمی را برای بازگشت نگه دارید. دایرکتوری قدیمی را فقط پس از تأیید اینکه همه کاربران با موفقیت به نسخه جدید دادهها مهاجرت کردهاند حذف کنید.
به طور غیرمستقیم — بله. اگر Application Support حاوی دهها هزار فایل کوچک باشد، FileManager.enumerator میتواند مقداردهی اولیه را کند کند. توصیه میشود تعداد فایلها در Application Support محدود شود (بیش از 1000) و به جای فایلهای جداگانه متعدد برای دادههای ساختاریافته از پایگاههای داده (Core Data، Realm) استفاده شود.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید