Application Support — este un director în sandbox-ul aplicației iOS, destinat stocării datelor auxiliare necesare pentru funcționarea aplicației, dar care nu sunt create direct de utilizator. Conform Apple File System Basics (2024), acest director este optim pentru fișiere de configurare, baze de date SQLite Core Data, documente stocate în cache și alte date pe care aplicația le generează independent. Spre deosebire de Documents Directory, Application Support nu este afișat în iTunes File Sharing și utilizatorul nu are acces direct la el, ceea ce protejează datele de serviciu împotriva ștergerii accidentale.
Principalele puncte
Application Support — este un director în sandbox-ul aplicației iOS, destinat stocării datelor pe care aplicația le creează și le utilizează pentru funcționarea sa, dar care nu sunt documente de utilizator. Este locul principal pentru configurații, baze de date, metadate stocate în cache și alte fișiere auxiliare.
iOS diferențiază Application Support ca nivel intermediar între Documents (date utilizator) și Caches (date temporare). Fișierele din Application Support pot fi relativ permanente, dar utilizatorul nu ar trebui să aibă acces direct la ele — aceasta o diferențiază de Documents Directory.
Conform Apple Developer Documentation (2024), Application Support este locul recomandat pentru stocarea bazelor de date SQLite Core Data, fișierelor Realm, configurațiilor în format JSON/plist, materialelor de referință descărcate și altor date pe care aplicația le utilizează, dar pe care utilizatorul nu le-a creat în mod explicit.
Important: în mod implicit, Application Support este inclusă în backup-ul iCloud și iTunes. Dacă aplicația stochează volume mari de date care pot fi restaurate în acest director (de exemplu, ghiduri descărcate), este necesar să se seteze flag-ul isExcludedFromBackup pentru fișierele respective.
În Swift, calea către Application Support Directory se obține prin FileManager.urls(for: .applicationSupportDirectory). Apple recomandă crearea unui subdirector cu numele aplicației în interiorul Application Support pentru izolarea datelor.
import Foundation
let fileManager = FileManager.default
guard let appSupportURL = fileManager.urls(
for: .applicationSupportDirectory,
in: .userDomainMask
).first else { return }
// Crează subdirectorul aplicației
let bundleID = Bundle.main.bundleIdentifier ?? "com.example.app"
let appDir = appSupportURL.appendingPathComponent(bundleID)
try fileManager.createDirectory(
at: appDir,
withIntermediateDirectories: true
)
Objective-C utilizează NSSearchPathForDirectoriesInDomains cu NSApplicationSupportDirectory. La fel ca în Swift, se recomandă crearea unui subdirector cu numele aplicației.
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSApplicationSupportDirectory,
NSUserDomainMask,
YES
);
NSString *appSupportPath = paths.firstObject;
NSString *appDir = [appSupportPath stringByAppendingPathComponent:@"com.example.app"];
La prima lansare, directorul Application Support poate să nu existe — trebuie creat folosind createDirectory(at:withIntermediateDirectories:). Aceasta îl diferențiază de Documents Directory, care este creat automat de sistem.
Application Support este potrivit pentru o gamă largă de date pe care aplicația le utilizează pentru funcționarea sa. Alegerea corectă a datelor pentru acest director îmbunătățește organizarea sistemului de fișiere și simplifică backup-ul.
Fișierele SQLite Core Data sunt create implicit în Application Support. Realm recomandă, de asemenea, plasarea bazelor de date în acest director. Aceasta izolează documentele utilizatorului de bazele de date interne ale aplicației.
JSON, plist, fișiere XML cu setări ale aplicației, Feature Flags, metadate stocate în cache despre utilizator (dar nu token-uri de autentificare — pentru acestea este Keychain).
| Tip de date | Application Support | Alternativă |
|---|---|---|
| SQLite Core Data | Da (implicit) | — |
| Configurații .plist / .json | Da | UserDefaults (pentru simple) |
| Materiale de referință descărcate | Da | Documents (dacă pentru utilizator) |
| Jurnale aplicației | Condiționat | Caches (pentru jurnale) |
| Token-uri de autentificare | Nu | Keychain |
Criteriul de selecție: dacă datele sunt create și utilizate de aplicație, nu de utilizator, și trebuie păstrate între lansări — locul lor este în Application Support.
Core Data — unul dintre principalii consumatori ai Application Support. La crearea NSPersistentContainer, Core Data plasează automat fișierele SQLite în Library/Application Support cu un nume unic bazat pe numele modelului.
Înțelegerea locului unde Core Data stochează fișierele este critică pentru migrări, backup și depanare. Fișierele principale: .sqlite (date), .sqlite-wal (Write-Ahead Log), .sqlite-shm (Shared Memory).
import CoreData
// Crează containerul Core Data
let container = NSPersistentContainer(name: "MyAppModel")
// Director URL personalizat al magazinului
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]
La utilizarea sincronizării CloudKit pentru Core Data, fișierul SQLite rămâne în Application Support, iar CloudKit este utilizat ca strat de transport. În acest caz, este important să nu se excludă fișierele din backup — altfel sincronizarea între dispozitive poate fi afectată.
Diferența dintre Application Support și Documents — una dintre cele mai importante pentru organizarea corectă a structurii de fișiere a aplicației iOS. Alegerea greșită poate duce la ștergerea accidentală a datelor importante ale aplicației de către utilizator sau, dimpotrivă, la imposibilitatea de a-și găsi propriile fișiere.
| Parametru | Application Support | Documents Directory |
|---|---|---|
| Acces utilizator | Nu (ascuns) | Prin iTunes File Sharing |
| Tip de date | Date de serviciu ale aplicației | Documente utilizator |
| Backup iCloud | Da (implicit) | Da (implicit) |
| Risc de ștergere | Scăzut (fără acces) | Mediu (accesibil utilizatorului) |
| Exemplu | SQLite Core Data | PDF exportat |
Regulă simplă: dacă utilizatorul trebuie să vadă fișierul și să poată să îl șteargă — folosește Documents. Dacă fișierul este necesar aplicației pentru funcționare, dar utilizatorul nu trebuie să știe despre el — folosește Application Support. Dacă datele pot fi restaurate — folosește Caches.
Lucrul cu Application Support necesită luarea în considerare a câtorva caracteristici care îl diferențiază de alte directoare din sandbox. Respectarea acestor practici ajută la evitarea pierderii de date, a problemelor de migrare și a comportamentului neașteptat al aplicației.
Spre deosebire de Documents, Application Support poate să nu existe la prima lansare. Folosește createDirectory(at:withIntermediateDirectories:) cu parametrul withIntermediateDirectories: true pentru a garanta crearea întregului lanț de subdirectoare.
Crează un subdirector cu Bundle Identifier în interiorul Application Support. Aceasta izolează datele aplicației tale de datele altor aplicații (deși sandbox-ul asigură deja izolarea) și simplifică migrarea la schimbarea furnizorului.
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
}
}
Respectarea acestor practici garantează că datele de serviciu ale aplicației sunt organizate corect, protejate împotriva ștergerii accidentale de către utilizator și restaurate corect din backup-uri.
Întrebări frecvente
Da, Application Support nu se creează automat la instalarea aplicației. Spre deosebire de Documents și Caches, pe care sistemul le creează la prima lansare, Application Support trebuie creat de dezvoltator folosind FileManager.createDirectory(at:withIntermediateDirectories:). Acest lucru se face de obicei în metoda application(_:didFinishLaunchingWithOptions:).
Nu, prin interfața standard iOS (Files, iTunes) utilizatorul nu are acces la Application Support. Cu toate acestea, la ștergerea aplicației în sine, întregul sandbox, inclusiv Application Support, este șters complet. Backup-ul în iCloud se păstrează până la restaurare sau ștergere manuală.
Pentru videoclipurile descărcate destinate utilizatorului, este mai bine să folosești Documents Directory — pentru ca utilizatorul să poată gestiona aceste fișiere prin Files. Dacă videoclipul face parte din cache-ul intern al aplicației (de exemplu, conținut offline pentru învățare), se poate folosi Application Support cu flag-ul isExcludedFromBackup pentru fișierele mari.
Adaugă versionarea subdirectoarelor în interiorul Application Support. La actualizare, verifică versiunea curentă a datelor și, dacă este necesar, creează un nou subdirector, păstrându-l pe cel vechi pentru rollback. Șterge directorul vechi doar după confirmarea că toți utilizatorii au migrat cu succes la noua versiune de date.
Indirect — da. Dacă Application Support conține zeci de mii de fișiere mici, FileManager.enumerator poate încetini inițializarea. Se recomandă limitarea numărului de fișiere în Application Support (nu mai mult de 1000) și utilizarea bazelor de date (Core Data, Realm) în locul mai multor fișiere separate pentru date structurate.
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și