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 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также