UIDocumentPickerViewController è un controller di sistema iOS per selezionare documenti dal file system, iCloud Drive e archivi cloud di terze parti. Il controller fornisce un’interfaccia unificata per aprire e importare file di qualsiasi tipo: immagini, PDF, testi e audio. Secondo la Documentazione per Sviluppatori Apple (2025), UIDocumentPickerViewController supporta le modalità import e export e restituisce i file selezionati come riferimenti URL tramite un delegato.
Punti chiave
UIDocumentPickerViewController è un controller UIKit che fornisce un’interfaccia di sistema per selezionare documenti. Fa parte del framework UIKit ed è disponibile da iOS 8. Il controller mostra un browser di file che include archiviazione locale, iCloud Drive e servizi cloud di terze parti registrati.
Il controller funziona in modo asincrono: dopo aver chiamato present, l’utente vede un dialogo di sistema, seleziona un file e il risultato viene restituito tramite il delegato. L’app non richiede autorizzazioni speciali per accedere al file selezionato — il selettore di sistema fornisce automaticamente accesso temporaneo all’URI.
UIDocumentPickerViewController supporta iPad tramite UIPopoverPresentationController e un’interfaccia adattiva per iPhone. Da iOS 14, il controller ha ricevuto un design aggiornato e il supporto per la navigazione sidebar in iPadOS.
UIDocumentPickerViewController opera in due modalità principali, ciascuna determina come l’app accede al file. La modalità viene impostata tramite il parametro forOpeningContentTypes o forExporting a seconda del compito.
Import mode (forOpeningContentTypes) copia il file selezionato nella sandbox dell’app. L’app riceve un URL alla propria copia del file, accessibile solo ad essa. Questa è una modalità sicura: il file di un’altra app non viene modificato e la copia è completamente controllata dall’app corrente.
Export mode (forExporting) fornisce un URL al file originale senza copiarlo. L’app può leggere il file tramite il link, ma le modifiche non vengono salvate. Questa modalità viene utilizzata quando è necessario trasferire un file a un’altra app o inviarlo via email. Per scrivere le modifiche, viene utilizzata la modalità open con scoped security-scoped URL.
UTI (Uniform Type Identifier) è un sistema di identificazione dei tipi di contenuto nell’ecosistema Apple. UIDocumentPickerViewController filtra i file visualizzati in base all’array UTI passato tramite forOpeningContentTypes. Se nessun UTI è specificato, il picker mostra tutti i tipi di file.
Per selezionare più tipi, si passa un array [UTType.pdf, UTType.image]. Da iOS 14, Apple raccomanda di usare UTType invece di costanti stringa. UIDocumentPickerViewController aggiorna automaticamente l’elenco dei tipi visualizzati quando il provider selezionato cambia.
Implementazione di UIDocumentPickerViewController in Swift è minima: creare un’istanza del controller con i tipi UTI, impostare il delegato e chiamare present. Dopo la selezione del file, il delegato riceve un array di URL nel metodo didPickDocumentsAt. Ogni URL è un riferimento security-scoped che richiede la chiamata di startAccessingSecurityScopedResource.
let picker = UIDocumentPickerViewController(
forOpeningContentTypes: [.pdf, .image],
asCopy: true
)
picker.delegate = self
picker.allowsMultipleSelection = false
present(picker, animated: true)
// MARK: - UIDocumentPickerDelegate
func documentPicker(
_ controller: UIDocumentPickerViewController,
didPickDocumentsAt urls: [URL]
) {
guard let url = urls.first else { return }
url.startAccessingSecurityScopedResource()
defer { url.stopAccessingSecurityScopedResource() }
// leggi file da url
}
Un URL security-scoped richiede la chiamata di startAccessingSecurityScopedResource prima della lettura. Questo metodo comunica al sistema che l’app sta ottenendo accesso temporaneo a un file fuori dalla sandbox. Dopo aver terminato, chiamare sempre stopAccessingSecurityScopedResource, altrimenti il sistema potrebbe bloccare l’accesso.
UIDocumentPickerDelegate riceve i risultati della selezione file tramite due metodi: didPickDocumentsAt in caso di successo e didPickDocumentsAt in caso di annullamento. iOS chiama automaticamente il metodo di annullamento se l’utente chiude il picker senza effettuare una selezione.
La gestione degli errori include la verifica della disponibilità dell’URL. Se l’utente ha selezionato un file da iCloud Drive ma il dispositivo è offline, l’URL potrebbe non essere disponibile. Si raccomanda di verificare FileManager.default.isReadableFile prima di leggere e mostrare all’utente un messaggio di errore chiaro.
Per iOS 14+, è disponibile un nuovo metodo documentPicker:didPickDocumentsAt con un array di URL. Il vecchio metodo didPickDocumentAt (singolo) è deprecato. Gestire sempre l’array, anche se allowsMultipleSelection è disattivato — Apple raccomanda di utilizzare un singolo gestore.
iPad richiede una configurazione speciale di UIDocumentPickerViewController. Su iPad, il picker viene visualizzato come popover e deve specificare un sourceView per il corretto posizionamento. Senza sourceView, il controller potrebbe crashare con un’eccezione su iPadOS.
Per il popover, viene utilizzata la proprietà popoverPresentationController. Specificare sourceView e sourceRect per ancorarlo a un pulsante o una cella di tabella. Su iPhone, questo codice non ha effetto — iOS mostra automaticamente il picker a schermo intero. Da iPadOS 16, il controller supporta sidebar e split view per una navigazione migliorata.
Il design adattivo di UIDocumentPickerViewController passa automaticamente tra schermo intero (iPhone) e popover (iPad). Lo sviluppatore non deve implementare controller separati per dispositivi diversi — basta configurare correttamente il popoverPresentationController per iPad.
Domande frequenti
UIDocumentPickerViewController è un controller UIKit di sistema per selezionare documenti da iCloud Drive, archiviazione locale e servizi cloud di terze parti. Il controller restituisce l’URL del file selezionato tramite il delegato.
Creare un controller con forOpeningContentTypes: [.pdf]. Questo limiterà la visualizzazione ai soli file PDF. Impostare il delegato e chiamare present per mostrare il selettore di sistema.
Import mode copia il file nella sandbox dell’app — le modifiche non influiscono sull’originale. Export mode fornisce un URL al file originale solo in lettura senza copiarlo.
Un URL security-scoped è un riferimento a un file fuori dalla sandbox dell’app. Chiamare startAccessingSecurityScopedResource prima di leggere e stopAccessingSecurityScopedResource dopo aver terminato.
Configurare popoverPresentationController con sourceView e sourceRect. Senza questo, il controller potrebbe generare un’eccezione su iPad. Su iPhone, le impostazioni popover vengono ignorate — il picker si mostra a schermo intero.
Riepilogo
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.
Leggi anche