Caches Directory — este un director în sandbox-ul aplicației iOS, destinat stocării datelor temporare care pot fi restaurate sau reîncărcate din rețea. Conform Apple File System Basics (2024), sistemul poate șterge fișierele din Caches Directory în orice moment pentru a elibera spațiu pe disc — aplicația trebuie să gestioneze corect absența acestor fișiere și să le restabilească la nevoie. Spre deosebire de Documents Directory, datele din Caches nu sunt incluse în copiile de rezervă iCloud și iTunes, ceea ce reduce încărcarea stocării în cloud a utilizatorului.
Puncte principale
Caches Directory — este un director în interiorul sandbox-ului aplicației iOS, optimizat pentru stocarea datelor care pot fi restaurate la nevoie. Spre deosebire de Documents Directory, Caches nu este destinat datelor utilizatorului — este o stocare temporară pentru accelerarea funcționării aplicației.
iOS folosește Caches Directory pentru plasarea răspunsurilor de rețea stocate în cache, imaginilor preîncărcate, obiectelor serializate și datelor pe care aplicația le poate restaura. Dezvoltatorul nu trebuie să se bazeze pe stocarea pe termen lung a datelor în acest director.
Conform datelor Apple WWDC 2020, aproximativ 40% din aplicațiile iOS folosesc Caches Directory pentru stocarea imaginilor cache și a datelor de rețea, iar 25% dintre dezvoltatori plasează incorect în Caches date care ar trebui să se afle în Documents sau Application Support, din cauza neînțelegerii diferențelor dintre aceste directoare.
Proprietatea critică a Caches: aplicația trebuie să gestioneze corect situația în care fișierul cache a fost șters de sistem. Dacă după ștergerea cache-ului funcționalitatea aplicației este afectată — înseamnă că datele sunt stocate în directorul greșit.
În Swift, calea către Caches Directory se obține prin metoda standard FileManager cu specificarea .cachesDirectory. Este o operațiune simplă, utilizată practic în fiecare aplicație iOS care lucrează cu date de rețea.
import Foundation
let fileManager = FileManager.default
guard let cachesURL = fileManager.urls(
for: .cachesDirectory,
in: .userDomainMask
).first else { return }
// Salvează JSON-ul cache
let cacheFile = cachesURL.appendingPathComponent("feed_cache.json")
let jsonData = try JSONSerialization.data(
withJSONObject: response,
options: [.prettyPrinted]
)
try jsonData.write(to: cacheFile)
Objective-C folosește NSSearchPathForDirectoriesInDomains cu NSCachesDirectory. Deși Apple recomandă Swift API, codul Objective-C cu Caches Directory rămâne funcțional și suportat.
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSCachesDirectory,
NSUserDomainMask,
YES
);
NSString *cachesPath = paths.firstObject;
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"feed_cache.plist"];
Proiectele Swift ar trebui să prefere API-ul bazat pe URL: este sigur din punct de vedere al tipurilor și se integrează mai bine cu framework-urile moderne precum SwiftUI și Combine.
Caches Directory este optim pentru câteva categorii de date pe care aplicația le folosește pentru a-și accelera funcționarea, dar nu este singura sursă de adevăr. Selectarea corectă a datelor pentru cache influențează direct UX-ul și performanța aplicației.
Răspunsurile JSON de la API, datele fluxurilor de știri, listele de obiecte — tot ce poate aplicația reîncărca de pe server. Folosiți URLCache pentru cache automat al răspunsurilor HTTP sau salvați manual obiecte serializate.
Imaginile încărcate din rețea — cel mai frecvent caz de utilizare a Caches Directory. Bibliotecile precum SDWebImage și Kingfisher salvează implicit imaginile cache exact în Caches.
| Tip de date | Potrivit pentru Caches | Perioada de păstrare |
|---|---|---|
| JSON răspunsuri API | Da | Până la ștergerea de sistem |
| Imagini din rețea | Da | Până la ștergerea de sistem |
| Jurnale de depanare | Condiționat | Mai bine în tmp |
| Salvări de jocuri | Nu | Doar Documents |
| Configurații aplicație | Nu | Application Support |
Dacă datele nu pot fi restaurate — locul lor nu este în Caches. Acesta este cel mai simplu criteriu: imaginați-vă că mâine sistemul șterge toate fișierele din Caches. Dacă aplicația continuă să funcționeze corect — datele sunt stocate corect.
iOS gestionează automat ștergerea Caches Directory, dar declanșatoarele și algoritmii exacti nu sunt documentați de Apple. Se știe că sistemul poate șterge fișierele din Caches când spațiul pe disc este insuficient, precum și la funcționarea funcției Offload Unused Apps.
Procesul de ștergere este transparent pentru aplicație: sistemul șterge fișierele fără notificare. Aplicația trebuie să verifice existența fișierului înainte de citire și să îl creeze din nou la absență. A nu se baza pe stocarea pe termen lung — este cerința cheie la lucrul cu Caches.
Conform articolului Apple "File System Basics" (2024), aplicația nu trebuie să conteze că fișierele din Caches Directory vor fi disponibile între sesiuni. Dezvoltatorilor li se recomandă să implementeze un mecanism de fallback: la absența fișierului cache — încărcați datele din rețea și salvați din nou în Caches.
Un scenariu separat — descărcarea aplicației (Offload). La activarea acestei funcții, iOS șterge aplicația dar păstrează Documents Directory. Caches Directory este șters în acest proces. Utilizatorul care a restaurat aplicația nu va primi datele cache — aplicația trebuie să le încarce din nou.
Diferența dintre Caches și Temporary (tmp) cauzează adesea confuzie printre dezvoltatori. Ambele directoare stochează date temporare, dar cu garanții diferite de durată de viață și scop.
| Caracteristică | Caches Directory | Temporary Directory |
|---|---|---|
| Durata de viață | De la sesiune la sesiune (negarantată) | Doar în cadrul sesiunii |
| Ștergerea de sistem | La spațiu insuficient | La terminarea sesiunii sau repornire |
| Scop | Cache pentru accelerare | Date foarte temporare |
| Exemplu | Imagini cache | Fișier temporar înainte de export |
| Backup | Nu | Nu |
Alegeți Caches dacă datele sunt utile de păstrat între pornirile aplicației, dar pot fi restaurate. Folosiți tmp dacă datele sunt necesare doar în sesiunea curentă și nu au valoare după încheierea aplicației.
Lucrul cu Caches Directory necesită respectarea câtorva reguli care ajută la evitarea pierderii de date, a comportamentului neașteptat al aplicației și a problemelor de performanță.
FileManager.fileExists(atPath:) trebuie apelat înainte de fiecare citire din Caches. Dacă fișierul lipsește — încărcați datele din sursa originală și salvați în cache. Nu presupuneți niciodată că fișierul din Caches există.
Stabiliți dimensiunea maximă a Caches Directory în aplicație. De exemplu, o limită de 50 MB pentru imagini și 10 MB pentru răspunsuri JSON. La depășirea limitei, ștergeți cele mai vechi fișiere după data modificării.
import Foundation
func trimCache(to maxSizeBytes: Int) {
let cachesURL = FileManager.default
.urls(for: .cachesDirectory, in: .userDomainMask)
.first!
guard let enumerator = FileManager.default
.enumerator(
at: cachesURL,
includingPropertiesForKeys: [.fileSizeKey, .contentModificationDateKey]
)
else { return }
// Enumeră și șterge fișierele vechi
// la depășirea limitei de dimensiune
}
Respectarea acestor practici garantează că aplicația funcționează corect la orice acțiuni ale sistemului de ștergere a cache-ului, iar utilizatorul nu se confruntă cu pierderea neașteptată a datelor.
Întrebări frecvente
Nu, iOS nu trimite notificări înainte de ștergerea fișierelor din Caches. Procesul de ștergere este complet transparent pentru aplicație. Singurul mod de a afla despre ștergere — la încercarea de citire a fișierului, FileManager returnează nil sau aruncă o eroare, iar aplicația trebuie să gestioneze această situație.
Acces direct la Caches Directory prin Files sau iTunes utilizatorul nu are. Cu toate acestea, utilizatorul poate șterge cache-ul tuturor aplicațiilor prin Setări > General > Stocare, selectând o aplicație specifică și apăsând "Descarcă aplicația". De asemenea, iOS poate șterge automat cache-ul la spațiu insuficient.
URLCache — este un mecanism încorporat de cache a cererilor HTTP din Foundation. Acesta salvează și încarcă automat răspunsurile cache, folosind Caches Directory în culise. Salvarea manuală oferă mai mult control: puteți alege formatul, cripta datele și gestiona durata de viață a fiecărui fișier individual.
La actualizarea aplicației prin App Store, Caches Directory este păstrat. Cu toate acestea, conținutul poate fi șters de sistem dacă noua actualizare necesită mai mult spațiu pentru instalare. Dezvoltatorul nu trebuie să se bazeze pe păstrarea Caches după actualizare — acesta este un motiv suplimentar pentru implementarea mecanismului de fallback.
Setați URLCache la nil pentru o sesiune NSURLSession specifică sau folosiți politica de cache .reloadIgnoringLocalCacheData. De asemenea, puteți crea o configurație URLSessionConfiguration cu cache gol: sessionConfiguration.urlCache = nil. Acest lucru este util pentru datele care trebuie să fie întotdeauna actualizate.
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