Sistemul de fișiere și documente în dezvoltarea mobilă: ce este, ce principii și cum funcționează

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

Lucrul cu sistemul de fișiere este baza oricărei aplicații mobile. Fiecare platformă oferă propriul model de acces: Sandbox pe iOS izolează aplicațiile în containere separate, în timp ce Scoped Storage pe Android restricționează accesul direct la stocarea partajată. Potrivit Google Developer Documentation (2026), introducerea Scoped Storage cu Android 10 a necesitat o revizuire completă a arhitecturii de stocare a datelor. În acest ghid, vom acoperi FileManager, MediaStore API, Storage Access Framework și DocumentProvider pentru ambele platforme.

Puncte cheie

  • Sandbox — un mediu iOS izolat în care fiecare aplicație operează doar în propriul director fără acces la datele altor aplicații.
  • Scoped Storage — model Android 10+ care restricționează accesul direct la stocarea externă prin MediaStore API și SAF.
  • FileManager — clasa principală iOS pentru operații cu fișiere: creare, citire, copiere, mutare și ștergere.
  • Storage Access Framework — mecanismul de sistem Android pentru selectarea documentelor folosind Intent ACTION_OPEN_DOCUMENT.
  • DocumentProvider — o componentă Android pentru publicarea fișierelor aplicației în sistemul de fișiere partajat prin SAF.

Ce este un sistem de fișiere în aplicațiile mobile?

Sistemul de fișiere în aplicațiile mobile este un set de API-uri, reguli de securitate și constrângeri care definesc modul în care datele sunt stocate și accesate pe dispozitivele iOS și Android. Spre deosebire de sistemele de operare desktop, platformele mobile izolează fiecare aplicație pentru a proteja datele utilizatorului împotriva citirii neautorizate de către alte programe.

Diferențe arhitecturale între iOS și Android

iOS utilizează modelul Sandbox, în care fiecare aplicație există în propriul container cu permisiuni strict limitate. Înainte de versiunea 10, Android oferea acces complet la stocarea externă, dar odată cu introducerea Scoped Storage, abordarea s-a apropiat de iOS. Diferența cheie este că iOS izolează complet sistemul de fișiere, în timp ce Android oferă mai multe niveluri de acces: un director privat, MediaStore public și acces temporar prin SAF.

Tipuri principale de stocare

Aplicațiile mobile utilizează trei tipuri de stocare a datelor. Stocare privată — un director accesibil doar aplicației pentru fișiere interne și cache. Stocare partajată — fișiere media prin MediaStore (Android) sau Files App (iOS). Stocare în cloud — iCloud Drive și Google Drive pentru sincronizare între dispozitive. Fiecare tip are propriile limite de dimensiune, durată de viață a fișierelor și condiții de acces.

Tip de stocareiOSAndroid
PrivatăDocuments, Library, CachesgetFilesDir(), getCacheDir()
Media partajatăPHPhotoLibrary prin selectorMediaStore API (ContentResolver)
Documente partajateFiles App prin UIDocumentPickerStorage Access Framework (SAF)
CloudiCloud Drive (UIDocument)Google Drive API
CacheDirectorul Caches, curățat de sistemgetCacheDir(), getExternalCacheDir()

Sistemul de fișiere în dezvoltarea mobilă: Sandbox pe iOS

Sandbox este arhitectura de securitate iOS care izolează fiecare aplicație. O aplicație poate citi și scrie doar în interiorul propriului sandbox. Pentru a accesa contacte, fotografii sau fișiere ale altor aplicații, trebuie utilizate selectoare de sistem: UIImagePickerController sau UIDocumentPickerViewController. Accesul la Files App se configurează prin flag-ul UIFileSharingEnabled din Info.plist. Sistemul de fișiere în dezvoltarea mobilă pe iOS necesită înțelegerea structurii directoarelor și alegerea locației corecte pentru fiecare tip de date.

Structura directoarelor sandbox

Sandbox-ul iOS constă din mai multe directoare standard. Documents — pentru fișierele utilizatorului, inclus în iCloud Backup. Caches — pentru date temporare pe care sistemul le poate șterge când spațiul de stocare este redus. Temporary — pentru fișierele sesiunii curente, curățat la repornire. Application Support — pentru date interne ale aplicației ascunse utilizatorului. Alegerea directorului greșit duce la probleme: salvarea cache-ului în Documents risipește spațiul iCloud și încalcă liniile directoare Apple privind sistemul de fișiere.

swift
import Foundation

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

let fileURL = documentsURL.appendingPathComponent("notes.txt")
let text = "Содержимое файла"

// Scriere atomică cu criptare
try text.write(
    to: fileURL,
    atomically: true,
    encoding: .utf8
)

FileManager — API-ul principal pentru operații cu fișiere

Clasa FileManager oferă un set complet de metode pentru gestionarea fișierelor pe iOS. FileManager.default este un singleton thread-safe potrivit pentru majoritatea operațiilor. Metode precum fileExists(atPath:), createDirectory(at:withIntermediateDirectories:attributes:), copyItem(at:to:) și removeItem(at:) acoperă scenarii de bază. Operațiile cu fișiere mai mari de 1 MB ar trebui efectuate într-un fir de execuție de fundal prin DispatchQueue.global(). Pentru streamingul volumelor mari, utilizați FileHandle în loc să încărcați întregul fișier în memorie.

swift
func readDocumentsFile(named fileName: String) -> String? {
    guard let docsURL = FileManager.default.urls(
        for: .documentDirectory,
        in: .userDomainMask
    ).first else { return nil }

    let fileURL = docsURL.appendingPathComponent(fileName)
    return try? String(contentsOf: fileURL)
}

Sistemul de fișiere în aplicațiile mobile: Scoped Storage pe Android

Odată cu lansarea Android 10, Google a introdus Scoped Storage — un model de acces restricționat la sistemul de fișiere. O aplicație poate citi și scrie liber doar în directoarele sale private. Pentru fișierele media (fotografii, videoclipuri, audio), se utilizează MediaStore API prin ContentResolver. Pentru documente arbitrare, se utilizează Storage Access Framework prin Intent ACTION_OPEN_DOCUMENT. Pe Android 11+, accesul direct la rădăcina stocării externe este complet interzis, iar toți dezvoltatorii trebuie să utilizeze noile API-uri.

MediaStore API pentru lucrul cu fișiere media

MediaStore este un ContentProvider de sistem pentru accesarea fișierelor media pe dispozitiv. Prin ContentResolver, aplicația solicită Uri-ul fișierelor în loc de căi directe. MediaStore.Files — pentru toate tipurile de fișiere, Images — pentru imagini, Video — pentru videoclipuri, Audio — pentru înregistrări audio. Scrierea în directoarele partajate se face prin insert() cu DISPLAY_NAME, MIME_TYPE și RELATIVE_PATH. După inserare, aplicația primește un Uri prin care se scriu octeții. Tipurile MIME joacă un rol crucial — un tip incorect va cauza o eroare la deschiderea fișierului.

kotlin
val contentValues = ContentValues().apply {
    put(MediaStore.MediaColumns.DISPLAY_NAME, "report.pdf")
    put(MediaStore.MediaColumns.MIME_TYPE, "application/pdf")
    put(MediaStore.MediaColumns.RELATIVE_PATH, "Documents/Reports")
}

val uri = contentResolver.insert(
    MediaStore.Files.getContentUri("external"),
    contentValues
)

uri?.let {
    contentResolver.openOutputStream(it)?.use { stream ->
        stream.write(pdfBytes)
    }
}

Storage Access Framework pentru selectarea fișierelor

SAF oferă o interfață unificată pentru selectarea și crearea fișierelor fără permisiuni de rulare. Intent ACTION_OPEN_DOCUMENT deschide managerul de fișiere de sistem pe Android. După selecție, aplicația primește un Uri content:// cu acces temporar prin FLAG_GRANT_READ_URI_PERMISSION. ACTION_CREATE_DOCUMENT permite salvarea fișierelor în orice locație de stocare externă aleasă de utilizator. SAF funcționează pe Android 5+ și oferă acces la fișierele furnizorilor cloud conectați prin DocumentsProvider.

kotlin
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
    addCategory(Intent.CATEGORY_OPENABLE)
    type = "*/*"
    putExtra(Intent.EXTRA_MIME_TYPES, arrayOf(
        "application/pdf",
        "text/plain"
    ))
}
startActivityForResult(intent, REQUEST_CODE)

Selectarea documentelor în aplicațiile mobile: selectoare de sistem

Ambele platforme oferă mecanisme integrate pentru ca utilizatorii să selecteze fișiere. Documentele în aplicațiile mobile sunt transmise prin selectoare de sistem care acordă acces temporar la un fișier fără permisiuni permanente. Pe iOS, acesta este UIDocumentPickerViewController; pe Android, ACTION_OPEN_DOCUMENT. Documentele în aplicațiile mobile pot fi selectate atât din stocarea locală, cât și din servicii cloud. Utilizatorul specifică explicit fișierul, iar aplicația primește un Uri sau URL cu o perioadă de valabilitate limitată.

UIDocumentPickerViewController pe iOS

UIDocumentPickerViewController deschide Files App și permite selectarea unuia sau mai multor documente. Moduri: import (copiere în sandbox) și deschidere (acces prin URL cu domeniu de securitate). Pentru filtrarea fișierelor, se transmite un tablou de tipuri UTType — de exemplu, .pdf și .plainText. După primirea URL-ului, aplicația trebuie să apeleze startAccessingSecurityScopedResource() înainte de citire și stopAccessingSecurityScopedResource() după terminare. Neapelarea stopAccessing duce la scurgeri de resurse de sistem. Documentele în aplicațiile mobile pe iOS necesită eliberarea obligatorie a permisiunilor temporare după terminarea lucrului cu fișierul.

swift
let picker = UIDocumentPickerViewController(
    forOpeningContentTypes: [.pdf, .plainText]
)
picker.allowsMultipleSelection = true
picker.delegate = self
present(picker, animated: true)

// Eliberarea accesului în delegat
func documentPicker(
    _ controller: UIDocumentPickerViewController,
    didPickDocumentsAt urls: [URL]
) {
    guard let url = urls.first else { return }
    url.startAccessingSecurityScopedResource()
    defer { url.stopAccessingSecurityScopedResource() }
}

FileProvider și DocumentProvider pe Android

FileProvider este o subclasă a ContentProvider pentru partajarea sigură a fișierelor între aplicații. Acesta generează Uri-uri content:// temporare bazate pe fișiere din directoare XML specificate. Alte aplicații obțin acces prin Intent cu FLAG_GRANT_READ_URI_PERMISSION. DocumentProvider, spre deosebire de FileProvider, publică fișiere în SAF și permite altor aplicații să navigheze conținutul aplicației dvs. ca parte a sistemului de fișiere. Pentru a implementa DocumentsProvider, trebuie să suprascrieți queryRoots(), queryChildDocuments() și openDocument(), apoi să îl înregistrați în AndroidManifest.xml

iCloud Drive și sincronizarea fișierelor în cloud

Sincronizarea în cloud oferă utilizatorilor acces la documente pe toate dispozitivele lor. Sistemul de fișiere în aplicațiile mobile este completat de un strat cloud: UIDocument pe iOS urmărește automat modificările și le sincronizează prin iCloud. Pe Android, funcționalitatea similară este construită prin Google Drive API sau DocumentsProvider cu rădăcini cloud. Înțelegerea sistemului de fișiere în dezvoltarea mobilă este esențială pentru construirea unei sincronizări fiabile între dispozitive.

UIDocument — Sincronizare pe iOS

UIDocument este o clasă abstractă pentru lucrul cu documentele iCloud. Salvează automat modificările, citește datele și notifică delegatul despre actualizări. În caz de conflict de scriere, NSFileVersion oferă o listă de versiuni disponibile — dezvoltatorul poate alege cea mai recentă sau poate afișa utilizatorului opțiuni de rezolvare a conflictului. Configurarea Ubiquity Container în Capabilitățile proiectului este obligatorie pentru iCloud Drive. NSFileCoordinator și NSFilePresenter previn condițiile de cursă în timpul accesului concurent din mai multe fire de execuție sau dispozitive.

Backup și restaurare date

iOS include automat directorul Documents în iCloud Backup. Android funcționează cu Auto Backup for Apps — sistemul salvează datele din getFilesDir(), SharedPreferences și bazele de date SQLite în Google Drive. Cache-ul și fișierele externe nu sunt incluse în backup. Ambele platforme permit configurarea excepțiilor: pe iOS prin NSURLIsExcludedFromBackupKey, pe Android prin configurarea XML a regulilor de backup. Criptarea fișierelor cu date personale este obligatorie — pe iOS utilizați NSDataWritingFileProtectionComplete, pe Android utilizați EncryptedFile din biblioteca security-crypto.

ParametruiOSAndroid
Backup implicitDocuments și LibrarygetFilesDir(), SharedPreferences, BD
Excludere fișiereisExcludedFromBackupKeyReguli XML backup (fullBackupContent)
CriptareNSDataWritingFileProtectionCompleteEncryptedFile (security-crypto)
Sincronizare cloudUIDocument + iCloudGoogle Drive API + SAF
Restaurare automatăiCloud Restore după instalareAuto Backup la reinstalare

Întrebări frecvente

Ce este Sandbox pe iOS?

Sandbox este un mediu izolat pentru fiecare aplicație pe iOS. Aplicația nu poate accesa fișierele altor aplicații fără a utiliza selectoare de sistem precum UIDocumentPickerViewController.

Ce este Scoped Storage pe Android?

Scoped Storage este un model de acces restricționat la sistemul de fișiere pe Android 10+. Aplicația citește direct doar propriile fișiere, utilizează MediaStore API pentru media și Storage Access Framework pentru documente.

Cum să selectez un fișier pe iOS?

Utilizați UIDocumentPickerViewController — selectorul de sistem pentru alegerea documentelor din Files App sau iCloud Drive. După selecție, primiți un URL cu domeniu de securitate și acces temporar.

Cum să accesez fișiere pe Android 11+?

Pentru fișiere media, utilizați MediaStore API prin ContentResolver specificând tipul MIME. Pentru documente arbitrare, utilizați Storage Access Framework cu Intent ACTION_OPEN_DOCUMENT.

Ce este FileProvider pe Android?

FileProvider este o subclasă a ContentProvider pentru partajarea sigură a fișierelor între aplicații prin Uri content:// temporar cu FLAG_GRANT_READ_URI_PERMISSION.

Rezumat

  • Sandbox — sistemul de fișiere izolat iOS unde o aplicație poate accesa doar propriile directoare Documents, Caches și Library.
  • FileManager — API-ul principal pentru operații cu fișiere pe iOS. Citiți fișiere mari prin FileHandle într-un fir de execuție de fundal.
  • Scoped Storage — modelul de sistem de fișiere pe Android 10+ care înlocuiește accesul direct la stocarea externă cu MediaStore API și SAF.
  • MediaStore API — un ContentProvider de sistem pentru lucrul cu fișiere media pe Android. Scrierea se face prin insert() cu ContentValues.
  • Storage Access Framework — un mecanism universal de selectare a documentelor pe Android prin ACTION_OPEN_DOCUMENT și ACTION_CREATE_DOCUMENT.
  • UIDocumentPickerViewController — selectorul de sistem iOS care deschide Files App și iCloud Drive. Funcționează cu URL-uri cu domeniu de securitate.
  • FileProvider — un mecanism pentru partajarea sigură a fișierelor între aplicații Android prin Uri content:// temporar și permisiuni de rulare.

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