Application Support — е директория в пясъчника на iOS приложението, предназначена за съхранение на помощни данни, необходими за работата на приложението, но които не се създават директно от потребителя. Според Apple File System Basics (2024), тази директория е оптимална за конфигурационни файлове, SQLite бази данни на Core Data, кеширани документи и други данни, които приложението генерира самостоятелно. За разлика от Documents Directory, Application Support не се показва в iTunes File Sharing и потребителят няма пряк достъп до нея, което защитава служебните данни от случайно изтриване.
Основни точки
Application Support — е директория в пясъчника на 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 изисква вземане предвид на няколко характеристики, които я различават от другите директории в пясъчника. Спазването на тези практики помага да се избегне загуба на данни, проблеми с миграция и неочаквано поведение на приложението.
За разлика от 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 Directory — за да може потребителят да управлява тези файлове чрез Files. Ако видеоклипът е част от вътрешния кеш на приложението (напр. офлайн учебно съдържание), може да се използва Application Support с флаг isExcludedFromBackup за големи файлове.
Добавете версиониране на поддиректориите вътре в Application Support. При актуализация проверете текущата версия на данните и при необходимост създайте нова поддиректория, като запазите старата за връщане назад. Изтрийте старата директория само след потвърждение, че всички потребители са мигрирали успешно към новата версия на данните.
Косвено — да. Ако Application Support съдържа десетки хиляди малки файлове, FileManager.enumerator може да забави инициализацията. Препоръчва се ограничаване на броя файлове в Application Support (не повече от 1000) и използване на бази данни (Core Data, Realm) вместо множество отделни файлове за структурирани данни.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също