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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

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