Temporary Directory (tmp) — este un director în sandboxul aplicației iOS pentru stocarea datelor foarte scurte, care sunt necesare doar în cadrul sesiunii curente a aplicației. Conform Apple File System Programming Guide (2024), sistemul poate șterge tmp la fiecare încheiere a aplicației sau la repornirea dispozitivului. Spre deosebire de Caches Directory, fișierele temporare din tmp nu sunt destinate stocării între lansări — dezvoltatorul trebuie să le șteargă explicit după utilizare pentru a nu ocupa spațiu pe disc.
Principalele
Temporary Directory (cunoscut și ca tmp) — este un director în interiorul sandboxului aplicației iOS, destinat stocării datelor a căror durată de viață este limitată la sesiunea curentă. Aceasta este cea mai scurtă stocare dintre toate directoarele sandboxului.
iOS oferă tmp pentru operațiunile care necesită stocare intermediară de fișiere: descărcarea unui fișier înainte de mutarea în Documents, crearea unei copii temporare înainte de export, buferizarea datelor în flux. După finalizarea operațiunii, fișierele temporare trebuie șterse.
Conform Apple Developer Documentation (2024), directorul tmp este unic deoarece calea sa se poate schimba între lansările aplicației. iOS generează o nouă cale către tmp la fiecare lansare — aceasta garantează că datele din sesiunea anterioară nu vor fi citite accidental. Dezvoltatorul nu ar trebui să salveze niciodată calea către tmp între lansări.
Important: spre deosebire de Caches Directory, unde datele pot supraviețui mai multor lansări, tmp nu garantează stocarea datelor între sesiuni pe termen lung. Acesta este cel mai fiabil mod de a stoca date cu adevărat temporare.
În Swift pentru obținerea căii către tmp se utilizează funcția globală NSTemporaryDirectory() sau FileManager.temporaryDirectory. Acestea sunt cele mai simple API dintre toate directoarele sandboxului.
import Foundation
// Opțiunea 1: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
.appendingPathComponent("export_temp.pdf")
// Opțiunea 2: FileManager.temporaryDirectory (URL)
let tempURL = FileManager.default.temporaryDirectory
let exportURL = tempURL.appendingPathComponent("export_temp.pdf")
Objective-C utilizează aceeași funcție globală NSTemporaryDirectory(). Rezultatul — un șir cu calea completă către directorul temporar al aplicației.
@import Foundation;
NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];
Diferența cheie față de alte directoare: NSTemporaryDirectory() nu necesită specificarea domeniului sau a măștii — este o funcție globală. Totuși, calea se poate schimba la următoarea lansare, așa că nu o salva niciodată în UserDefaults sau altă stocare persistentă.
Temporary Directory este destinată unui set strict definit de scenarii. Dezvoltatorii confundă adesea tmp cu Caches, plasând în tmp date care ar trebui să trăiască mai mult de o sesiune. Să analizăm cazurile corecte de utilizare.
Fișierele create în procesul de export al datelor: copia temporară a raportului înainte de trimiterea prin poștă, arhiva comprimată înainte de descărcare, fișierul intermediar de conversie a formatelor. După finalizarea exportului, fișierul trebuie șters.
Bufferele temporare pentru înregistrarea audio, video sau a datelor în flux care sunt procesate în timp real. De exemplu, înregistrarea vocii înainte de salvarea în stocarea permanentă sau buferizarea fluxului video la streaming.
| Scenariu | Director | Justificare |
|---|---|---|
| Export PDF înainte de trimitere | tmp | Fișierul nu este necesar după trimitere |
| Cache de imagini | Caches | Util între sesiuni |
| Descărcare fișier înainte de mutare | tmp | Stocare intermediară |
| Jurnale de sesiune | tmp | Actual doar în sesiune |
| Editare document | tmp | Versiunea înainte de salvare |
Dacă datele sunt necesare doar aici și acum — folosește tmp. Dacă ar putea fi utile în următoarea sesiune — folosește Caches. Dacă pierderea datelor este inacceptabilă — folosește Documents.
iOS gestionează ciclul de viață al tmp diferit față de alte directoare ale sandboxului. Înțelegerea acestui ciclu este critică pentru proiectarea corectă a stocării de fișiere în aplicație.
La fiecare lansare a aplicației, iOS poate aloca o nouă cale pentru tmp. Calea anterioară devine inaccesibilă, deși fișierele fizice pot rămâne pe disc până la repornirea dispozitivului. Tocmai din acest motiv, Apple recomandă insistent să nu salvezi calea către tmp între sesiuni.
Conform Apple Tech Note TN2150 (2024), sistemul poate șterge tmp în următoarele cazuri: la repornirea dispozitivului, la atingerea limitei de spațiu pe disc, la descărcarea aplicației (Offload). Spre deosebire de Caches, tmp nu este destinată stocării datelor chiar și în cadrul mai multor lansări — aceasta este cea mai puțin fiabilă stocare din sandbox.
Dezvoltatorul este obligat să șteargă explicit fișierele temporare după finalizarea operațiunii cu ajutorul FileManager.removeItem(at:). Fișierele neșterse din tmp se acumulează și ocupă spațiu pe disc — iOS nu garantează curățarea lor automată în viitorul apropiat.
Compararea tmp și Caches ajută dezvoltatorii să ia decizia corectă la alegerea directorului pentru stocare. O eroare în alegere poate duce fie la pierderea prematură a datelor, fie la o utilizare nejustificată a spațiului.
| Parametru | Temporary Directory | Caches Directory |
|---|---|---|
| Durata de viață | Doar sesiunea curentă | Între sesiuni (fără garanții) |
| Schimbarea căii | Se poate schimba la fiecare lansare | Cale stabilă |
| Curățare automată | La repornire, la descărcare | La lipsa spațiului |
| Ștergerea de către dezvoltator | Obligatorie după operațiune | Recomandată la depășirea limitei |
| Utilizare | Operații intermediare | Cache persistent |
Regula practică: alege tmp pentru datele care vor fi șterse în câteva secunde sau minute după creare. Alege Caches pentru datele care merită păstrate câteva ore sau zile între sesiuni, dar care pot fi recreate.
Lucrul cu Temporary Directory necesită disciplină: deoarece datele din tmp sunt de scurtă durată, iar acumularea lor poate duce la o utilizare nejustificată a spațiului, dezvoltatorul trebuie să respecte câteva practici cheie.
FileManager.removeItem(at:) trebuie apelat imediat după finalizarea operațiunii cu fișierul temporar. Folosește defer în Swift pentru a garanta ștergerea chiar și în caz de eroare.
import Foundation
let tempURL = FileManager.default
.temporaryDirectory
.appendingPathComponent("upload_temp.dat")
defer {
try? FileManager.default.removeItem(at: tempURL)
}
// Lucrează cu fișierul temporar
try "temporary data".write(to: tempURL, atomically: true)
// ... operațiune cu fișier ...
// defer se execută la ieșirea din domeniu
Dacă datele ar putea fi necesare la o oră după creare — salvează-le în Caches sau Application Support. tmp este destinată operațiunilor de minute, nu stocării.
Respectarea acestor reguli garantează că fișierele temporare nu se acumulează, spațiul pe disc este utilizat eficient, iar aplicația gestionează corect orice scenariu de curățare a sistemului de fișiere iOS.
Întrebări frecvente
De obicei, calea nu se schimbă în cadrul unei sesiuni, dar iOS nu oferă garanții. În cazuri rare, sistemul poate modifica tmp la trecerea aplicației din fundal în stare activă. De aceea, Apple recomandă să obții calea către tmp prin NSTemporaryDirectory() la fiecare apel, în loc să o salvezi într-o variabilă.
Fișierele se vor acumula și vor ocupa spațiu pe disc. iOS poate șterge tmp la repornirea dispozitivului, dar până atunci aplicația va irosi spațiu pe disc. La o acumulare semnificativă, utilizatorul poate vedea în setările de stocare că aplicația ocupă mult spațiu.
Da, poți utiliza DataProtectionType cu NSFileProtectionComplete pentru fișierele temporare care conțin date sensibile. Totuși, reține: dacă fișierul va fi citit doar în cadrul sesiunii curente și apoi șters — criptarea poate fi excesivă. Evaluează necesitatea criptării în funcție de tipul datelor.
Folosește ProcessInfo.processInfo.globallyUniqueString pentru generarea unui identificator unic sau UUID().uuidString. FileManager oferă, de asemenea, metoda urlForCreatingTemporaryFile care generează automat un nume unic în tmp. Aceasta garantează absența coliziunilor la scrierea paralelă.
Indirect — da. Apple acordă atenție dimensiunii totale a datelor pe care aplicația le stochează pe disc. Dacă tmp conține gigaocteți de fișiere neșterse, reviewerul poate respinge aplicația. Limita recomandată pentru tmp — nu mai mult de 100 MB în orice moment. Curăță regulat tmp și verifică dimensiunea prin FileManager.
Rezumat
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