Documents Directory: ce este, scopul și accesul la fișiere

Autor: IT Sectr Publicat: 2026-07-10 Timp de citire: 10 min

Documents Directory — este un director în sandbox-ul aplicației iOS, destinat stocării datelor utilizatorului care trebuie păstrate între sesiunile aplicației și să fie accesibile utilizatorului prin iTunes File Sharing și iCloud. Conform Apple File System Programming Guide (2024), conținutul acestui director este inclus automat în backup-ul iCloud și iTunes, deci dezvoltatorul trebuie să aleagă în cunoștință de cauză ce date să plaseze în Documents. Spre deosebire de Caches Directory, fișierele din Documents nu sunt șterse de sistem când spațiul este insuficient — responsabilitatea gestionării dimensiunii revine aplicației.

Principalele

  • Documents Directory — directorul principal pentru fișierele utilizatorului care trebuie păstrate și accesibile prin iTunes.
  • Datele din Documents se backup-uiesc automat în iCloud și iTunes — ține cont de asta la proiectarea stocării.
  • Sistemul nu șterge fișierele din Documents la curățarea cache-ului — pentru eliberarea spațiului răspunde dezvoltatorul.
  • Calea către director se obține prin NSSearchPathForDirectoriesInDomains cu NSDocumentDirectory sau prin FileManager.urls.
  • Pentru fișierele mari care pot fi restaurate, folosește Caches Directory — pentru a nu ocupa spațiu în backup-ul iCloud.

Ce este Documents Directory în iOS?

Documents Directory — este un director întân sandbox-ul aplicației iOS, destinat stocării datelor utilizatorului care trebuie păstrate între rulări și accesibile utilizatorului. Fiecare aplicație primește propriul sandbox izolat, iar Documents este unul dintre directoarele cheie alături de Caches, tmp și Library.

iOS folosește un sandbox strict: aplicația nu are acces la sistemul de fișiere al altor aplicații și la directoarele sistemului fără permisiuni speciale. Documents Directory — singurul director al cărui conținut poate fi vizualizat de utilizator prin iTunes File Sharing (la activarea cheii corespunzătoare UIFileSharingEnabled în Info.plist).

Conform datelor Apple WWDC 2023, peste 85% din aplicațiile din App Store folosesc Documents Directory pentru a stoca cel puțin un tip de date ale utilizatorului — de la PDF-uri exportate la fișiere de joc salvate și imagini exportate.

Dezvoltatorul trebuie să înțeleagă: fișierele din Documents sunt incluse automat în backup-ul iCloud și iTunes. Dacă aplicația stochează în Documents volume mari de date care pot fi restaurate (de exemplu, cache de imagini sau fișiere temporare), aceasta va duce la o ocupare nejustificată a spațiului în stocarea iCloud a utilizatorului.

Cum să obții calea către Documents Directory

În Swift, calea către Documents Directory se obține prin FileManager. Apple recomandă utilizarea API-ului bazat pe URL în loc de string-based pentru o mai bună compatibilitate cu capacitățile moderne ale iOS.

swift
import Foundation

let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
    for: .documentDirectory,
    in: .userDomainMask
).first else { return }

// Creează fișier în Documents
let fileURL = documentsURL.appendingPathComponent("report.pdf")
let data = Data("Hello, world!".utf8)
try data.write(to: fileURL)

Objective-C folosește NSSearchPathForDirectoriesInDomains — o abordare mai veche, dar încă suportată, care returnează o cale sub formă de șir în loc de URL.

objective-c
@import Foundation;

NSArray *paths = NSSearchPathForDirectoriesInDomains(
    NSDocumentDirectory,
    NSUserDomainMask,
    YES
);
NSString *documentsPath = paths.firstObject;
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"report.pdf"];

Proiectele moderne în Swift ar trebui să folosească FileManager.urls, deoarece această metodă returnează un URL, nu un șir, ceea ce reduce riscul de erori de codificare a căilor și face codul mai sigur din punct de vedere al tipurilor.

Ce date să stochezi în Documents

Documents Directory este destinată datelor create de utilizator sau necesare utilizatorului în formă explicită. Apple evidențiază mai multe categorii care sunt potrivite pentru acest director.

Documente și fișiere ale utilizatorului

Fișierele pe care utilizatorul le creează sau le importă — documente text, PDF, imagini, rapoarte exportate, fișiere de backup. Aceste date au valoare directă pentru utilizator, iar pierderea lor ar fi critică.

Salvări de jocuri și stare a aplicației

Salvările de jocuri, fișierele de stare ale aplicației, proiectele exportate — tot ceea ce utilizatorul se așteaptă să restabilească după reinstallarea aplicației. Cu toate acestea, pentru datele critice se recomandă utilizarea suplimentară a iCloud Key-Value Storage sau Core Data cu sincronizare iCloud.

Tip de datePotrivit pentru DocumentsAlternativă
PDF și documente textDa
Cache de imaginiNuCaches Directory
Salvări de jocuriDaiCloud KVS
Loguri și date de debugNuCaches sau tmp
Rapoarte exportateDa

Criteriul cheie: dacă datele pot fi restaurate din rețeaua sau recreate — locul lor este în Caches, nu în Documents. Fiecare gigaoctet în Documents este un gigaoctet în backup-ul iCloud al utilizatorului.

Backup și sincronizare

iOS include automat conținutul Documents Directory în backup la conectarea dispozitivului la iTunes sau la sincronizarea cu iCloud. Acest comportament nu poate fi dezactivat la nivel de director — doar fișier cu fișier prin atributul NSURLIsExcludedFromBackupKey.

Începând cu iOS 5.0, Apple a început să respingă aplicațiile care stochează în Documents volume mari de date care pot fi restaurate. Recomandarea Apple: fișierele care pot fi descărcate din nou trebuie stocate în Caches Directory cu flag de excludere din backup.

swift
import Foundation

let documentsURL = FileManager.default
    .urls(for: .documentDirectory, in: .userDomainMask)
    .first!

// Exclude fișierul din backup-ul iCloud
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true

var fileURL = documentsURL.appendingPathComponent("cached_data.json")
try fileURL.setResourceValues(resourceValues)

Sincronizarea iCloud funcționează prin NSUbiquitousContainer dacă aplicația folosește iCloud Documents. În acest caz, fișierele din Documents Directory sunt sincronizate automat între dispozitivele utilizatorului. Pentru aplicațiile fără iCloud, sincronizarea se limitează la backup.

Documents Directory vs Caches Directory

Diferența dintre Documents și Caches — una dintre cele mai frecvente confuzii între dezvoltatorii iOS începători. Diferența principală: sistemul poate șterge în orice moment fișierele din Caches pentru a elibera spațiu, dar nu atinge niciodată Documents fără știrea utilizatorului.

CaracteristicăDocuments DirectoryCaches Directory
Backup în iCloudDa (implicit)Nu
Ștergere de sistemNiciodatăLa lipsă de spațiu
iTunes File SharingDa (la activare flag)Nu
ScopDate ale utilizatoruluiCache, date temporare
Restaurare dateNecesită restaurarePoate fi re-descărcat din rețeaua

Conform Apple Developer Documentation (2024), utilizarea incorectă a Documents Directory — una dintre cauzele frecvente de respingere a aplicațiilor la review: dacă aplicația stochează în Documents mai mult de câțiva megaocteți de date care pot fi restaurate, Apple recomandă mutarea lor în Caches sau aplicarea NSURLIsExcludedFromBackupKey.

Regulă practică: dacă utilizatorul va fi întristat la pierderea fișierului — stochează în Documents. Dacă fișierul poate fi re-descărcat sau generat — stochează în Caches.

Cele mai bune practici de lucru cu Documents

Dezvoltatorii iOS experimentați au elaborat câteva reguli care ajută la evitarea problemelor cu Documents Directory în toate etapele ciclului de viață al aplicației — de la dezvoltare la publicare în App Store.

Monitorizarea dimensiunii directorului

Verifică regulat dimensiunea Documents Directory prin FileManager.enumerator(at:includingPropertiesForKeys:). Dacă dimensiunea depășește 100 MB pentru date care nu sunt ale utilizatorului — acesta este un motiv pentru a reconsidera arhitectura de stocare.

Excluderea fișierelor recuperabile din backup

Pentru toate fișierele care pot fi re-descărcate din rețeaua, setează isExcludedFromBackup = true. Aceasta reduce încărcarea asupra stocării iCloud a utilizatorului și scade riscul de respingere a aplicației de către App Review.

Migrarea la actualizare

La modificarea formatului de date în Documents, prevede migrarea: nu șterge fișierele vechi până nu te asiguri că cele noi au fost create corect. Folosește subdirectoare specifice versiunii.

swift
import Foundation

let documentsURL = FileManager.default
    .urls(for: .documentDirectory, in: .userDomainMask)
    .first!

let versionDir = documentsURL.appendingPathComponent("v2")
try FileManager.default.createDirectory(
    at: versionDir,
    withIntermediateDirectories: true
)

Respectarea acestor practici reduce riscul de pierdere a datelor utilizatorului, micșorează dimensiunea backup-ului iCloud și facilitează trecerea review-ului în App Store.

Întrebări frecvente

Poate utilizatorul să acceseze Documents Directory fără iTunes?

Da, prin Files — aplicația integrată iOS începând cu versiunea 11. La activarea cheii UIFileSharingEnabled în Info.plist, conținutul Documents Directory este afișat în aplicația Fișiere în secțiunea „Pe iPhone-ul meu“. Utilizatorul poate vizualiza, copia și șterge fișiere.

Ce se întâmplă cu Documents Directory la ștergerea aplicației?

Întregul sandbox al aplicației, inclusiv Documents Directory, Caches, tmp și Library, este complet șters de pe dispozitiv. Backup-urile în iCloud rămân până la restaurare sau ștergere manuală. La reinstallare, aplicația începe cu un sandbox curat.

Cum să verific dimensiunea Documents Directory în cod?

Folosește FileManager.enumerator pentru a parcurge toate fișierele din director și a suma dimensiunile lor. Pentru fiecare fișier, obține atributul .fileSize prin resourceValues(forKeys:). Alternativ, folosește URLResourceKey.fileSizeKey și .directoryEnumerationResults.

Se poate stoca baza de date Core Data SQLite în Documents?

Implicit, Core Data creează fișierul SQLite în Library/Application Support, nu în Documents. Mutarea bazei în Documents nu este recomandată — va fi inclusă în iTunes File Sharing și utilizatorul o poate șterge sau modifica accidental. Excepție: dacă aplicația oferă explicit utilizatorului acces la date prin Core Data.

Ce este UIFileSharingEnabled și cum se activează?

UIFileSharingEnabled (Application supports iTunes file sharing) — o cheie booleană în Info.plist. La setarea YES, utilizatorul poate copia fișiere din Documents Directory prin iTunes și Files. Adaugă cheia în Info.plist: UIFileSharingEnabled = YES. Activează numai dacă aplicația creează într-adevăr documente ale utilizatorului.

Rezumat

  • Documents Directory — locul principal pentru datele utilizatorului în aplicația iOS, care trebuie păstrate și backup-uite.
  • Calea către director se obține prin FileManager.urls(for: .documentDirectory) în Swift sau NSSearchPathForDirectoriesInDomains în Objective-C.
  • Toate fișierele din Documents sunt incluse implicit în backup-ul iCloud și iTunes — folosește isExcludedFromBackup pentru excludere.
  • Sistemul nu șterge fișierele din Documents de unul singur, spre deosebire de Caches Directory.
  • Pentru datele recuperabile (cache, fișiere temporare) folosește Caches Directory, nu Documents.
  • Cheia UIFileSharingEnabled deschide accesul la Documents prin iTunes și aplicația Fișiere — folosește-o cu atenție.
  • Monitorizează regulat dimensiunea Documents Directory: depășirea a 100 MB pentru date necritice este o problemă arhitecturală.

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.

Discutați proiectul

Citiți și