File Provider Extension: cos'è, estensione di accesso ai file iOS

Autore: IT Sectr Pubblicato: 2026-07-11 Tempo di lettura: 6 min

File Provider Extension è un meccanismo iOS che consente alle applicazioni di fornire l'accesso a file da fonti esterne tramite l'app File integrata. Secondo Apple Developer Documentation, 2024, File Provider Extension consente di visualizzare i file da archivi cloud, server e file system personalizzati direttamente in Files.app — senza doverli importare localmente. L'utente ottiene un'interfaccia unificata per lavorare con i file indipendentemente dalla loro posizione fisica.

Punti chiave

  • File Provider Extension — estensione iOS per integrare file system esterni con Files.app
  • NSFileProviderManager — l'API principale per gestire file e sincronizzazione dello stato
  • Due modalità di funzionamento: Foundation-based e FileProviderUI per diversi scenari di integrazione
  • I fornitori possono implementare ricerca, gerarchia di cartelle e tag tramite NSFileProviderItem
  • La sicurezza è garantita tramite Sandbox — l'estensione funziona isolata dall'app

Cos'è File Provider Extension in iOS?

File Provider Extension è un'estensione di app in iOS e macOS che consente a un'applicazione di fornire l'accesso a file da fonti esterne tramite l'app File di sistema. È stata introdotta in iOS 11 e ha sostituito il meccanismo Document Provider, aggiungendo il supporto per la sincronizzazione, la ricerca e i tag.

Il compito principale di File Provider Extension è fungere da ponte tra l'archiviazione esterna (server cloud, NAS aziendale, FTP) e Files.app. L'utente vede file e cartelle come se fossero archiviati localmente, sebbene i dati possano risiedere su un server remoto. L'estensione funziona in background, sincronizzando il contenuto secondo necessità.

Secondo la WWDC 2024, Apple sta sviluppando attivamente l'API FileProvider: è stato aggiunto il supporto per la sincronizzazione incrementale, le prestazioni per le directory di grandi dimensioni sono state migliorate e le operazioni batch sono ora disponibili. Questo rende File Provider Extension il metodo preferito per integrare file esterni nell'ecosistema Apple.

Come funziona File Provider Extension

L'architettura di File Provider Extension è composta da due componenti: l'estensione principale (tipo fornitore di file) e un'estensione dell'interfaccia utente opzionale per l'autenticazione e la configurazione. L'estensione principale implementa il protocollo NSFileProviderExtension e gestisce tutte le richieste da Files.app.

swift
import FileProvider

class CloudFileProvider: NSFileProviderExtension {
    override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
        guard let item = storage
            .item(for: identifier) else {
            throw NSError(domain: NSFileProviderErrorDomain,
                              code: NSFileProviderError.noSuchItem.rawValue)
        }
        return item
    }

    override func urlForItem(with identifier: NSFileProviderItemIdentifier) -> URL {
        return fileCoordinator.urlForItem(with: identifier)
    }
}

Quando un utente apre Files.app e seleziona il tuo fornitore, il sistema avvia l'estensione in un processo in background. L'estensione non ha interfaccia utente — è un processo headless che gestisce le richieste di lettura, scrittura, ridenominazione ed eliminazione di file. Tutte le operazioni vengono eseguite in modo asincrono tramite NSFileProviderManager.

Sfumatura importante: File Provider Extension vive in un processo separato e può essere terminata dal sistema quando la memoria è scarsa. Pertanto, il fornitore deve essere in grado di ripristinare lo stato dopo un riavvio, salvando identificatori e cache di sincronizzazione nell'archivio persistente.

Modello NSFileProviderItem: file e cartelle

NSFileProviderItem è un protocollo che descrive un singolo file o cartella nella gerarchia del fornitore. Ogni elemento ha un identificatore univoco, nome, tipo (file o cartella), date di creazione e modifica, dimensione e flag (disponibile offline, sola lettura).

ProprietàTipoDescrizione
itemIdentifierNSFileProviderItemIdentifierID univoco dell'elemento nel sistema del fornitore
parentItemIdentifierNSFileProviderItemIdentifierID della cartella padre (radice — .rootContainer)
filenameStringNome del file con estensione
typeIdentifierString (UTType)Identificatore di tipo uniforme per determinare il tipo di contenuto
capabilitiesNSFileProviderItemCapabilitiesFlag: eliminazione, ridenominazione, aggiunta di tag

Il protocollo supporta anche capacità estese tramite NSFileProviderItemProtocol: tag (etichette colorate), icone, versionamento e azioni personalizzate. Per i file di grandi dimensioni, il supporto per i trasferimenti riprendibili è implementato tramite NSFileProviderService.

Secondo la WWDC 2023, Apple raccomanda di utilizzare le closure (NSFileProviderItemFields) per aggiornare solo le proprietà modificate anziché l'intero oggetto. Ciò accelera significativamente la sincronizzazione durante gli aggiornamenti batch — ad esempio, quando cambia solo la dimensione di un gruppo di file.

Motore di sincronizzazione e NSFileProviderManager

NSFileProviderManager è la classe centrale per la gestione del ciclo di vita dell'estensione. Fornisce metodi per segnalare al sistema le modifiche, gestire i conflitti collaborativi e gestire i download. Il manager tiene traccia automaticamente dei trasferimenti attivi e prioritizza i file visibili all'utente.

swift
class SyncManager {
    let providerManager = NSFileProviderManager.default

    func signalUpdate(for item: NSFileProviderItemIdentifier) {
        providerManager.signalEnumerator(
            for: item.parentItemIdentifier
        ) { error in
            if let error = error {
                Logger.sync.error(
                    "Failed to signal: \(error.localizedDescription)"
                )
            }
        }
    }

    func uploadItem(at url: URL, itemId: NSFileProviderItemIdentifier) {
        providerManager.registerURLBasedItem(
            with: itemId,
            url: url
        )
    }
}

Il motore di sincronizzazione è la logica che lo sviluppatore implementa in modo indipendente. Apple non fornisce un meccanismo di sincronizzazione integrato — solo l'API per notificare al sistema le modifiche. Il fornitore decide autonomamente come scaricare i file dal server, memorizzarli nella cache locale e risolvere i conflitti di modifica.

Conflitti: il sistema supporta il rilevamento dei conflitti di versione tramite NSFileProviderSyncAnchor. Quando un file viene modificato contemporaneamente a livello locale e remoto, il fornitore utilizza l'ancora di sincronizzazione per determinare l'ultima versione sincronizzata e risolve il conflitto utilizzando una strategia di ultimo scrittore vince o creando una copia in conflitto.

Sicurezza e sandbox dell'estensione

File Provider Extension opera all'interno di una sandbox rigorosa di iOS. L'estensione non ha accesso diretto al file system dell'app host e, viceversa, l'app non può leggere direttamente i file del fornitore. Tutti gli scambi di dati avvengono tramite le API di sistema di Files.app.

L'accesso ai file dell'utente è possibile solo tramite interazione esplicita: l'utente apre un file da Files.app in un'applicazione e il sistema crea una copia temporanea del file in un contenitore isolato. L'app ricevente lavora con questa copia, non con l'originale nell'archivio del fornitore.

Secondo Apple Security Guide, 2024, il fornitore deve implementare la crittografia dei dati durante la trasmissione (TLS 1.3) e può opzionalmente aggiungere la crittografia del disco per i file memorizzati nella cache. L'autenticazione dell'utente viene eseguita tramite un componente FileProviderUI separato, che viene eseguito al di fuori della sandbox dell'estensione per l'immissione sicura delle credenziali.

Limitazione chiave: l'estensione non può eseguire codice arbitrario — elabora solo richieste tramite NSFileProviderManager. Qualsiasi logica oltre le operazioni sui file deve essere implementata nell'app principale e richiamata tramite gruppi di app o servizi XPC.

Domande frequenti

Cos'è File Provider Extension in iOS?

File Provider Extension è un'estensione di app per integrare l'archiviazione esterna di file con l'app File. Consente di visualizzare file da servizi cloud, FTP, NAS e altre fonti senza copiarli localmente.

Qual è la differenza tra File Provider e Document Provider?

File Provider (iOS 11+) ha sostituito Document Provider, aggiungendo sincronizzazione in background, supporto per la ricerca Spotlight, tag e prestazioni migliorate. Document Provider è stato deprecato con iOS 11 e rimosso in iOS 14.

Come sincronizza i file File Provider Extension?

La sincronizzazione è implementata dallo sviluppatore tramite NSFileProviderManager. L'estensione segnala al sistema le modifiche tramite signalEnumerator e il sistema richiede un elenco aggiornato degli elementi. I conflitti di versione vengono risolti tramite NSFileProviderSyncAnchor.

L'estensione può funzionare senza l'app principale?

, File Provider Extension può funzionare come processo indipendente senza che l'app principale sia in esecuzione. È un'estensione headless che iOS avvia su richiesta di Files.app. Tuttavia, l'autenticazione e la configurazione iniziale vengono solitamente eseguite tramite l'app principale.

Di quali autorizzazioni ha bisogno File Provider Extension?

L'estensione richiede la capacità File Provider in Xcode, nonché l'entitlement com.apple.developer.file-provider. Per l'accesso alla rete, viene aggiunta la capacità Network. Tutti gli altri diritti sono strettamente limitati dalla sandbox iOS.

Riepilogo

  • File Provider Extension — un meccanismo iOS per integrare file system esterni con Files.app tramite estensione di app
  • NSFileProviderManager — l'API principale per gestire file, segnalare modifiche e download
  • NSFileProviderItem — un protocollo che descrive un'unità di contenuto nella gerarchia del fornitore
  • Sandbox isola l'estensione dall'app host — scambio di dati solo tramite Files.app
  • La sincronizzazione è implementata dallo sviluppatore: Apple fornisce l'API ma non un motore integrato
  • I conflitti di versione vengono gestiti tramite ancora di sincronizzazione — il fornitore sceglie una strategia di risoluzione
  • La modalità background consente all'estensione di funzionare senza l'app in esecuzione, ma richiede la persistenza dello stato

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