Application Support — to katalog w sandboxie aplikacji iOS przeznaczony do przechowywania danych pomocniczych niezbędnych do działania aplikacji, ale nie tworzonych bezpośrednio przez użytkownika. Według Apple File System Basics (2024), ten katalog jest optymalny dla plików konfiguracyjnych, baz SQLite Core Data, buforowanych dokumentów i innych danych, które aplikacja generuje samodzielnie. W przeciwieństwie do Documents Directory, Application Support nie jest wyświetlany w iTunes File Sharing, a użytkownik nie ma do niego bezpośredniego dostępu, co chroni dane pomocnicze przed przypadkowym usunięciem.
Najważniejsze
Application Support — to katalog w sandboxie aplikacji iOS przeznaczony do przechowywania danych, które aplikacja tworzy i wykorzystuje do swojej pracy, ale które nie są dokumentami użytkownika. Jest to główne miejsce dla konfiguracji, baz danych, buforowanych metadanych i innych plików pomocniczych.
iOS wyodrębnia Application Support jako pośredni poziom pomiędzy Documents (dane użytkownika) a Caches (dane tymczasowe). Pliki w Application Support mogą być stosunkowo trwałe, ale użytkownik nie powinien mieć do nich bezpośredniego dostępu — to odróżnia go od Documents Directory.
Według Apple Developer Documentation (2024), Application Support to zalecane miejsce do przechowywania baz SQLite Core Data, plików Realm, konfiguracji w formacie JSON/plist, pobranych materiałów referencyjnych i innych danych, które aplikacja wykorzystuje, ale których użytkownik nie utworzył jawnie.
Ważne: domyślnie Application Support jest włączona do kopii zapasowej iCloud i iTunes. Jeśli aplikacja przechowuje w tym katalogu duże ilości danych, które można odtworzyć (np. pobrane instrukcje), należy ustawić flagę isExcludedFromBackup dla odpowiednich plików.
W Swift ścieżka do Application Support Directory jest uzyskiwana przez FileManager.urls(for: .applicationSupportDirectory). Apple zaleca utworzenie podkatalogu z nazwą aplikacji wewnątrz Application Support w celu izolacji danych.
import Foundation
let fileManager = FileManager.default
guard let appSupportURL = fileManager.urls(
for: .applicationSupportDirectory,
in: .userDomainMask
).first else { return }
// Utwórz podkatalog aplikacji
let bundleID = Bundle.main.bundleIdentifier ?? "com.example.app"
let appDir = appSupportURL.appendingPathComponent(bundleID)
try fileManager.createDirectory(
at: appDir,
withIntermediateDirectories: true
)
Objective-C używa NSSearchPathForDirectoriesInDomains z NSApplicationSupportDirectory. Podobnie jak w Swift, zaleca się utworzenie podkatalogu z nazwą aplikacji.
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSApplicationSupportDirectory,
NSUserDomainMask,
YES
);
NSString *appSupportPath = paths.firstObject;
NSString *appDir = [appSupportPath stringByAppendingPathComponent:@"com.example.app"];
Przy pierwszym uruchomieniu katalog Application Support może nie istnieć — należy go utworzyć za pomocą createDirectory(at:withIntermediateDirectories:). To odróżnia go od Documents Directory, który jest tworzony automatycznie przez system.
Application Support nadaje się do szerokiego zakresu danych, które aplikacja wykorzystuje do swojej pracy. Właściwy wybór danych dla tego katalogu poprawia organizację systemu plików i upraszcza tworzenie kopii zapasowych.
Pliki SQLite Core Data domyślnie są tworzone w Application Support. Realm również zaleca umieszczanie baz danych w tym katalogu. To izoluje dokumenty użytkownika od wewnętrznych baz danych aplikacji.
JSON, plist, pliki XML z ustawieniami aplikacji, Feature Flags, buforowane metadane użytkownika (ale nie tokeny uwierzytelniające — dla nich jest Keychain).
| Typ danych | Application Support | Alternatywa |
|---|---|---|
| SQLite Core Data | Tak (domyślnie) | — |
| Konfiguracje .plist / .json | Tak | UserDefaults (dla prostych) |
| Pobrane materiały referencyjne | Tak | Documents (jeśli dla użytkownika) |
| Logi aplikacji | Warunkowo | Caches (dla logów) |
| Tokeny uwierzytelniania | Nie | Keychain |
Kryterium wyboru: jeśli dane są tworzone i używane przez aplikację, a nie przez użytkownika, i mają być zachowane pomiędzy uruchomieniami — ich miejsce jest w Application Support.
Core Data — jeden z głównych konsumentów Application Support. Podczas tworzenia NSPersistentContainer Core Data automatycznie umieszcza pliki SQLite w Library/Application Support z unikalną nazwą opartą na nazwie modelu.
Zrozumienie, gdzie Core Data przechowuje pliki, jest kluczowe dla migracji, kopii zapasowych i debugowania. Główne pliki: .sqlite (dane), .sqlite-wal (Write-Ahead Log), .sqlite-shm (Shared Memory).
import CoreData
// Utwórz kontener Core Data
let container = NSPersistentContainer(name: "MyAppModel")
// Niestandardowy katalog URL sklepu
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]
Przy użyciu CloudKit synchronizacji Core Data, plik SQLite pozostaje w Application Support, a CloudKit jest używany jako warstwa transportowa. W takim przypadku ważne jest, aby nie wykluczać plików z kopii zapasowej — w przeciwnym razie synchronizacja między urządzeniami może zostać zakłócona.
Różnica między Application Support a Documents — jedna z najważniejszych dla prawidłowej organizacji struktury plików aplikacji iOS. Niewłaściwy wybór może doprowadzić do przypadkowego usunięcia ważnych danych aplikacji przez użytkownika lub, odwrotnie, do niemożności znalezienia własnych plików.
| Parametr | Application Support | Documents Directory |
|---|---|---|
| Dostęp użytkownika | Nie (ukryty) | Przez iTunes File Sharing |
| Typ danych | Dane pomocnicze aplikacji | Dokumenty użytkownika |
| Kopia zapasowa iCloud | Tak (domyślnie) | Tak (domyślnie) |
| Ryzyko usunięcia | Niskie (brak dostępu) | Średnie (dostępne dla użytkownika) |
| Przykład | SQLite Core Data | Wyeksportowany PDF |
Prosta zasada: jeśli użytkownik ma widzieć plik i mieć możliwość jego usunięcia — użyj Documents. Jeśli plik jest potrzebny aplikacji do działania, ale użytkownik nie musi o nim wiedzieć — użyj Application Support. Jeśli dane mogą zostać odtworzone — użyj Caches.
Praca z Application Support wymaga uwzględnienia kilku cech, które odróżniają go od innych katalogów sandboxa. Przestrzeganie tych praktyk pomaga uniknąć utraty danych, problemów z migracją i nieoczekiwanego zachowania aplikacji.
W przeciwieństwie do Documents, Application Support może nie istnieć przy pierwszym uruchomieniu. Użyj createDirectory(at:withIntermediateDirectories:) z parametrem withIntermediateDirectories: true, aby zagwarantować utworzenie całego łańcucha podkatalogów.
Utwórz podkatalog z Bundle Identifier wewnątrz Application Support. To izoluje dane Twojej aplikacji od danych innych aplikacji (chociaż sandbox już zapewnia izolację) i upraszcza migrację przy zmianie dostawcy.
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
}
}
Przestrzeganie tych praktyk gwarantuje, że dane pomocnicze aplikacji są prawidłowo zorganizowane, chronione przed przypadkowym usunięciem przez użytkownika i poprawnie przywrócone z kopii zapasowych.
Często zadawane pytania
Tak, Application Support nie jest tworzone automatycznie podczas instalacji aplikacji. W przeciwieństwie do Documents i Caches, które system tworzy przy pierwszym uruchomieniu, Application Support musi zostać utworzone przez programistę za pomocą FileManager.createDirectory(at:withIntermediateDirectories:). Zwykle robi się to w metodzie application(_:didFinishLaunchingWithOptions:).
Nie, przez standardowy interfejs iOS (Files, iTunes) użytkownik nie ma dostępu do Application Support. Jednak przy usunięciu samej aplikacji cały sandbox, łącznie z Application Support, jest usuwany całkowicie. Kopia zapasowa w iCloud jest przechowywana do momentu przywrócenia lub ręcznego usunięcia.
W przypadku pobranych filmów przeznaczonych dla użytkownika lepiej użyć Documents Directory — aby użytkownik mógł zarządzać tymi plikami przez Files. Jeśli film jest częścią wewnętrznego bufora aplikacji (np. treści offline do nauki), można użyć Application Support z flagą isExcludedFromBackup dla dużych plików.
Dodaj wersjonowanie podkatalogów wewnątrz Application Support. Przy aktualizacji sprawdzaj bieżącą wersję danych i w razie potrzeby utwórz nowy podkatalog, a stary zachowaj do rollbacku. Usuń stary katalog dopiero po potwierdzeniu, że wszyscy użytkownicy pomyślnie przeszli na nową wersję danych.
Pośrednio — tak. Jeśli Application Support zawiera dziesiątki tysięcy małych plików, FileManager.enumerator może spowalniać inicjalizację. Zaleca się ograniczanie liczby plików w Application Support (nie więcej niż 1000) i używanie baz danych (Core Data, Realm) zamiast wielu pojedynczych plików dla danych strukturalnych.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również