Directory documenti in un'app mobile — cos'è, scopo e come organizzare l'archiviazione

Autore: IT Sectr Pubblicato: 2026-03-14 Tempo di lettura: 10 min

La directory dei documenti dell'applicazione è un archivio permanente dei file utente che devono persistere tra le sessioni ed essere ripristinati dal backup. Secondo Apple File System Programming Guide, 2026, su iOS la directory Documents viene inclusa automaticamente nel backup di iCloud, a differenza della cache e delle directory temporanee. L'uso corretto della directory dei documenti garantisce che i file utente non vengano persi durante l'aggiornamento o la reinstallazione dell'app.

Punti Chiave

  • Documents Directory — archivio permanente dei file utente che persistono durante gli aggiornamenti e il ripristino dal backup
  • iOS include automaticamente Documents nel backup di iCloud e iTunes — escludi solo i dati ricreabili
  • Android non ha una directory Documents separata — l'equivalente è context.filesDir con gestione manuale dei backup
  • Salvataggio automatico e versionamento dei file prevengono la perdita di dati durante crash e sovrascritture accidentali
  • Migrazione dei dati durante gli aggiornamenti di versione è obbligatoria per evitare la perdita di impostazioni e file utente

Cos'è la directory dei documenti dell'applicazione?

La directory dei documenti è un archivio specializzato all'interno del sandbox dell'applicazione, progettato per l'archiviazione permanente dei file utente. A differenza della cache, i file in questa directory sono considerati importanti per l'utente: il sistema non li elimina quando lo spazio scarseggia, vengono preservati durante gli aggiornamenti dell'app e vengono sottoposti a backup durante la sincronizzazione del dispositivo. Su iOS, la directory Documents fa parte del contenitore Sandbox e viene inclusa automaticamente nel backup di iCloud. Su Android, non esiste un equivalente diretto — l'equivalente è context.filesDir, anch'esso destinato a file permanenti ma senza un meccanismo di backup integrato.

La differenza tra la directory dei documenti e l'archiviazione interna su Android è minima: entrambi si trovano nel sandbox dell'app, entrambi vengono eliminati alla disinstallazione, entrambi sono inaccessibili ad altre app. La differenza principale è semantica: la Directory Documenti presuppone che i file siano creati o importati dall'utente, mentre l'archiviazione interna può contenere file interni dell'app (database, configurazioni). Su iOS, la differenza è più sostanziale: Documents viene sottoposto automaticamente a backup, mentre Library/Application Support no. Questo influenza la strategia di archiviazione: metti solo ciò che l'utente vorrebbe ripristinare su un nuovo dispositivo in Documents, e i dati interni che l'app può ricreare in Application Support.

L'architettura a sandbox garantisce che altre applicazioni non possano accedere alla directory dei documenti della tua app. Su iOS, l'accesso ai Documents di altre app è impossibile senza jailbreak. Su Android, l'accesso root permette di leggere il filesDir di qualsiasi app, quindi i dati sensibili (token, chiavi di crittografia) devono essere protetti ulteriormente con EncryptedSharedPreferences o EncryptedFile della libreria AndroidX Security.

Quali dati sono archiviati nella directory dei documenti

La directory dei documenti dovrebbe archiviare dati che hanno valore per l'utente e devono essere accessibili dopo il riavvio dell'app o il ripristino del dispositivo. Non tutti i file sono adatti all'archiviazione in questa directory — la scelta dipende dal tipo di dati e dallo scenario d'uso.

Documenti e file utente

I file utente sono il contenuto principale della directory dei documenti. Possono essere documenti di testo creati in un editor, immagini scattate con la fotocamera dell'app, report PDF esportati, registrazioni audio, note. Ciascuno di questi file è creato dall'utente o su sua richiesta e deve essere accessibile in qualsiasi momento. Su iOS, i file di Documents vengono visualizzati nell'app File di sistema, consentendo all'utente di gestirli tramite il gestore file standard. Su Android, non esiste una visualizzazione simile — l'app deve fornire essa stessa un'interfaccia per visualizzare i file salvati.

Database e impostazioni dell'app

I database SQLite e i file di impostazione vengono solitamente archiviati vicino alla directory dei documenti, ma non al suo interno. Su iOS, i database vengono collocati in Library/Application Support, poiché non dovrebbero apparire nell'app File ed essere sottoposti a backup separatamente. Su Android, i database vengono creati per impostazione predefinita in /data/data/<package>/databases/ tramite Room o SQLiteOpenHelper. Se il database contiene contenuti utente (note, diario, registri finanziari), può essere collocato in filesDir per garantire il backup di sistema. Room consente di specificare una directory di archiviazione personalizzata per il database tramite il callback RoomDatabase.Builder.

kotlin
val dbFile = File(context.filesDir, "user_database.db")

val db = Room.databaseBuilder<AppDatabase>(
    context,
    dbFile.absolutePath
).build()

Dati esportati e importati

I file che l'utente importa da altre app o esporta dalla tua app dovrebbero essere anch'essi salvati nella directory dei documenti. Su iOS, l'import tramite UIDocumentPickerViewController posiziona automaticamente una copia del file in Documents quando si utilizza il parametro asCopy: true. Su Android, l'import tramite il dialogo SAF crea anch'esso una copia del file nel sandbox dell'app. Durante l'esportazione dei dati (ad esempio, la creazione di un file CSV con i contatti), salva prima il file in Documents/filesDir, quindi offri all'utente di condividerlo tramite Share Sheet. Questo garantisce che, anche se l'utente dimentica di salvare il file dopo l'invio, una copia rimanga nell'app per un uso successivo.

Come lavorare con la directory dei documenti su Android

Su Android, la funzione della directory dei documenti è svolta da context.filesDir. Inoltre, è disponibile la directory context.externalFilesDir sulla scheda SD, ma non garantisce l'integrità dei dati. Esaminiamo le principali tecniche per lavorare con queste directory.

Accesso e gestione dei file tramite filesDir

filesDir è la directory principale per i file permanenti dell'app su Android. Si trova nel sandbox dell'app e viene completamente eliminata alla disinstallazione. Per ottenere un'istanza File, usa context.filesDir, che restituisce il percorso a /data/data/<package>/files/. Per creare e leggere file, usa le operazioni Java/Kotlin File standard o i metodi Context openFileInput() e openFileOutput(), che prendono un nome file e restituiscono FileInputStream/FileOutputStream. Il metodo openFileOutput() crea automaticamente il file in filesDir se non esiste ancora e permette di specificare la modalità di accesso: MODE_PRIVATE (solo l'app corrente), MODE_APPEND (aggiunta) o MODE_WORLD_READABLE (deprecato, non utilizzato da API 24+).

kotlin
val fileName = "report.pdf"
val content = "PDF content".toByteArray()

context.openFileOutput(fileName, Context.MODE_PRIVATE).use { stream ->
    stream.write(content)
}

val bytes = context.openFileInput(fileName).use { stream ->
    stream.readBytes()
}

Caratteristiche di archiviazione su Android 10+

Su Android 10+, il modello Scoped Storage non influisce su filesDir — l'accesso completo al proprio sandbox dell'app rimane. Tutte le operazioni di lettura e scrittura all'interno di filesDir non richiedono autorizzazioni aggiuntive. Tuttavia, se provi ad accedere ai file di un'altra app tramite filesDir, otterrai un'eccezione. Per condividere file, usa FileProvider, che crea un URI di contenuto temporaneo per trasferire un file a un'altra app. FileProvider viene dichiarato in AndroidManifest.xml tramite il tag <provider> e configurato in un file XML dei percorsi. Questo è il meccanismo standard per il trasferimento di file tra app, utilizzato, ad esempio, quando si invia un'immagine tramite Intent con ACTION_SEND.

Come lavorare con la directory dei documenti su iOS

Su iOS, la Documents Directory fa parte del contenitore Sandbox dell'app con uno status speciale. I file di questa directory vengono automaticamente inclusi nel backup di iCloud, visualizzati nell'app File e preservati durante gli aggiornamenti dell'app tramite App Store.

Directory dei documenti e backup

Il backup automatico di Documents è un vantaggio chiave di iOS. Quando l'utente collega il dispositivo a iTunes o attiva iCloud Backup, tutti i file da Documents/ vengono copiati nel backup. Al ripristino su un nuovo dispositivo, l'utente riceve tutti i suoi file senza azioni aggiuntive. Tuttavia, questo vantaggio diventa uno svantaggio se l'app archivia grandi quantità di dati in Documents: il tempo di backup aumenta e lo spazio iCloud potrebbe esaurirsi rapidamente. Pertanto, Documents dovrebbe archiviare solo i file di cui l'utente ha realmente bisogno durante il ripristino. I file temporanei, la cache e i dati ricreabili dovrebbero trovarsi in Caches o Library/Application Support. Apple raccomanda di escludere dal backup i file che possono essere scaricati nuovamente da Internet, tramite l'attributo isExcludedFromBackup.

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

let fileURL = docsURL.appendingPathComponent("notes.txt")
let text = "Contenuto della nota"
try text.write(to: fileURL, atomically: true, encoding: .utf8)

iCloud Drive e sincronizzazione tra dispositivi

iCloud Drive consente di sincronizzare i file di Documents tra i dispositivi di un utente. Per attivare la sincronizzazione, l'app dovrebbe utilizzare le API NSDocument o UIDocument, che gestiscono automaticamente il versionamento e la risoluzione dei conflitti. Un approccio alternativo è l'uso di iCloud con CloudKit, che offre un controllo più flessibile sulla sincronizzazione ma richiede configurazione su CloudKit Dashboard. Quando utilizzi iCloud Drive, assicurati di gestire correttamente i conflitti di modifica (merge o last-write-wins) e di informare l'utente sullo stato della sincronizzazione tramite l'interfaccia dell'app. iCloud non garantisce la sincronizzazione istantanea — il ritardo può variare da pochi secondi a diversi minuti a seconda della dimensione del file e della qualità della connessione. Per i dati critici, utilizza scrittura transazionale e versionamento in modo che in caso di conflitto, la versione precedente del file possa essere ripristinata.

Differenze dalla directory cache e migliori pratiche

Scegliere correttamente tra Documents Directory e Cache Directory determina l'affidabilità dell'archiviazione dei dati utente. Un errore nella scelta porta alla perdita di dati (se i file importanti sono archiviati nella cache) o al sovraccarico del backup (se i file temporanei sono archiviati in Documents).

CriterioDocuments DirectoryCache Directory
Garanzia di integritàAlta — non eliminato dal sistemaBassa — può essere svuotato
Backup (iOS)Automaticamente in iCloudNon sottoposto a backup
Visibilità utente (iOS)Nell'app FileNascosta
Pulizia all'aggiornamentoNon pulitoPuò essere pulito
Dimensione raccomandataQualsiasi, ma controllata tramite impostazioniFino a 100–200 MB
Tipo di datiFile utenteDati temporanei ricreabili

Le migliori pratiche per l'uso della directory dei documenti includono diverse regole chiave. Primo, chiedi sempre conferma all'utente prima di eliminare file da questa directory. A differenza della cache, eliminare un documento può portare alla perdita irreversibile di contenuti utente. Secondo, implementa il versionamento dei file: quando sovrascrivi un file esistente, salva la versione precedente con il suffisso _backup o utilizza meccanismi Snapshot. Terzo, fornisci all'utente un'interfaccia per visualizzare, rinominare, eliminare ed esportare file dalla directory dei documenti. Su iOS, i file di Documents vengono automaticamente visualizzati in File; su Android, devi implementare un tuo gestore file o utilizzare librerie di terze parti.

Presta particolare attenzione alla migrazione dei dati durante gli aggiornamenti dell'app. Se la nuova versione modifica la struttura di archiviazione dei file (ad esempio, sposta i dati da una sottodirectory a un'altra o cambia il formato del file), implementa una migrazione una tantum al primo avvio dopo l'aggiornamento. Conserva il numero di versione dello schema dati in SharedPreferences ed esegui la migrazione se non corrispondono. Non eliminare i file vecchi prima del completamento della migrazione — in caso di fallimento, l'utente non deve perdere dati. Se la migrazione comporta una conversione di formato (ad esempio, il passaggio da JSON a SQLite), salva i file originali come backup in una directory separata con la data di migrazione. L'utente dovrebbe essere in grado di annullare le modifiche tramite le impostazioni dell'app entro i primi 30 giorni dall'aggiornamento, come raccomandato dalle Apple Human Interface Guidelines.

Domande Frequenti

Qual è la differenza tra Documents e Library/Application Support su iOS?

Documents viene visualizzato nell'app File e viene automaticamente sottoposto a backup su iCloud. Application Support non viene visualizzato in File e non viene sottoposto a backup per impostazione predefinita. Scegli Application Support per i dati interni dell'app che non devi mostrare all'utente.

Devo pulire la directory dei documenti quando elimino un account?

Sì, quando elimini un account, offri all'utente la possibilità di cancellare tutti i file locali associati a tale account. Mostra un dialogo che chiede “Eliminare tutti i dati locali?” ed elenca quali file verranno interessati. Questo è un requisito del GDPR e conformità con le politiche dell'App Store e di Google Play.

Come trasferire i file dalla directory dei documenti a un nuovo dispositivo?

Su iOS, ripristina semplicemente il dispositivo da un backup di iCloud o iTunes — i file di Documents vengono ripristinati automaticamente. Su Android, utilizza l'API Google Drive Backup per eseguire il backup dei file da filesDir o implementa l'esportazione tramite un servizio cloud.

Un utente può eliminare accidentalmente file dalla directory dei documenti?

Su iOS, l'utente può eliminare file tramite l'app File. Su Android, l'eliminazione è possibile solo tramite l'interfaccia della tua app. Si consiglia di implementare un cestino per i documenti con possibilità di ripristino entro 30 giorni dall'eliminazione per prevenire la perdita accidentale di dati.

Come garantire l'integrità dei file durante gli aggiornamenti dell'app?

Non sono necessarie azioni aggiuntive — iOS e Android preservano automaticamente la directory dei documenti durante gli aggiornamenti tramite App Store o Google Play. Tuttavia, quando modifichi la struttura di archiviazione, implementa la migrazione dei dati al primo avvio della nuova versione verificando il numero di versione dello schema nelle impostazioni.

Riepilogo

  • Documents Directory — archivio permanente per i file utente, protetto dalla pulizia del sistema e sottoposto a backup su iOS tramite iCloud
  • iOS esegue automaticamente il backup di Documents, lo visualizza nell'app File e ne ripristina il contenuto al ripristino del dispositivo
  • Android utilizza context.filesDir come equivalente — i file sono preservati durante gli aggiornamenti ma non hanno un meccanismo di backup integrato
  • La directory dei documenti dovrebbe archiviare file utente, dati esportati e database con contenuti utente — tutto ciò che dovrebbe sopravvivere alla reinstallazione dell'app
  • Cache, file temporanei e risorse ricreabili dovrebbero essere archiviati nella Cache Directory per non sovraccaricare il backup e rischiare la perdita di dati non memorizzati nella cache durante la pulizia del sistema
  • Migrazione dei dati durante gli aggiornamenti di versione è obbligatoria: verifica la versione dello schema, esegui la migrazione dei dati e conserva un backup della vecchia versione per consentire il rollback
  • Cestino dei documenti con un periodo di conservazione di 30 giorni previene la perdita accidentale di file utente e soddisfa i requisiti di HIG e Material Design

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche