Application Support: что это, хранение конфигов и Core Data

Автор: IT Sectr Опубликовано: 2026-07-10 Время чтения: 10 мин

Application Support — это директория в песочнице 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 — это директория в песочнице 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 для соответствующих файлов.

Как получить путь к 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 }

// 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, рекомендуется создать дочернюю директорию с именем приложения.

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

// 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 vs Documents Directory

Различие между Application Support и Documents — одно из самых важных для правильной организации файловой структуры iOS-приложения. Неправильный выбор может привести к тому, что пользователь случайно удалит важные данные приложения или, наоборот, не сможет найти свои файлы.

ПараметрApplication SupportDocuments Directory
Доступ пользователяНет (скрыта)Через iTunes File Sharing
Тип данныхСлужебные данные приложенияПользовательские документы
Бэкап iCloudДа (по умолчанию)Да (по умолчанию)
Риск удаленияНизкий (нет доступа)Средний (доступен пользователю)
ПримерSQLite Core DataЭкспортированный PDF

Простое правило: если пользователь должен видеть файл и иметь возможность его удалить — используй Documents. Если файл нужен приложению для работы, но пользователю о нём знать не обязательно — используй Application Support. Если данные могут быть восстановлены — используй Caches.

Лучшие практики работы с Application Support

Работа с Application Support требует учёта нескольких особенностей, которые отличают её от других директорий песочницы. Соблюдение этих практик помогает избежать потери данных, проблем с миграцией и неожиданного поведения приложения.

Всегда создавай директорию при первом запуске

В отличие от Documents, Application Support может не существовать при первом запуске. Используй createDirectory(at:withIntermediateDirectories:) с параметром withIntermediateDirectories: true, чтобы гарантировать создание всей цепочки поддиректорий.

Используй поддиректорию с Bundle Identifier

Создавай поддиректорию с Bundle Identifier внутри Application Support. Это изолирует данные твоего приложения от данных других приложений (хотя песочница уже обеспечивает изоляцию) и упрощает миграцию при смене поставщика.

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. Однако при удалении самого приложения вся песочница, включая Application Support, удаляется полностью. Резервная копия в iCloud сохраняется до момента восстановления или ручного удаления.

Подходит ли Application Support для хранения скачанных видео?

Для скачанных видео, предназначенных для пользователя, лучше использовать Documents Directory — чтобы пользователь мог управлять этими файлами через Files. Если видео — часть внутреннего кэша приложения (например, офлайн-контент для обучения), можно использовать Application Support с флагом isExcludedFromBackup для больших файлов.

Как мигрировать данные из Application Support при обновлении приложения?

Добавь версионирование поддиректорий внутри Application Support. При обновлении проверяй текущую версию данных и при необходимости создавай новую поддиректорию, а старую сохраняй для rollback. Удали старую директорию только после подтверждения, что все пользователи успешно мигрировали на новую версию данных.

Влияет ли размер 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 создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также