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 — рекомендоване місце для зберігання Core Data SQLite-баз, 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 }
// 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 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
// 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]
При використанні 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. При оновленні перевіряй поточну версію даних і при необхідності створюй нову піддиректорію, а стару зберігай для rollback. Видали стару директорію тільки після підтвердження, що всі користувачі успішно мігрували на нову версію даних.
Опосередковано — так. Якщо Application Support містить десятки тисяч дрібних файлів, FileManager.enumerator може сповільнювати ініціалізацію. Рекомендується обмежувати кількість файлів в Application Support (не більше 1000) і використовувати бази даних (Core Data, Realm) замість безлічі окремих файлів для структурованих даних.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також