File Provider Extension est un mécanisme iOS qui permet aux services cloud et aux applications d'afficher leurs fichiers dans l'application Fichiers système. L'utilisateur voit les documents externes dans une interface unifiée avec les documents locaux et peut les ouvrir, les déplacer et les modifier sans installer de logiciel supplémentaire. Selon la documentation développeur Apple (2025), NSFileProviderManager assure une synchronisation incrémentielle et gère les versions de fichiers via son propre cache sur l'appareil.
Points clés
File Provider Extension est une extension d'application qui ajoute de nouvelles sources de documents à l'application Fichiers. Un service cloud — Google Drive, Dropbox, OneDrive ou un stockage d'entreprise — peut afficher sa structure de fichiers directement dans l'interface système, sans ouvrir d'application séparée.
Les utilisateurs travaillent avec des fichiers distants exactement comme avec des fichiers stockés sur l'appareil : parcourir le contenu des dossiers, glisser-déposer des documents, les ouvrir dans n'importe quelle application compatible et enregistrer les modifications dans le cloud. Selon la WWDC 2025, File Provider Extension prend en charge jusqu'à 1000 opérations de synchronisation simultanées et s'adapte à la vitesse du réseau via une gestion dynamique des priorités.
L'extension fonctionne en arrière-plan — iOS la lance lorsque la synchronisation est nécessaire et peut la terminer de force lorsque les ressources sont insuffisantes. Toutes les opérations doivent être idempotentes et prendre en charge la reprise à partir d'un point de contrôle.
File Provider Extension a une architecture à trois niveaux : le processus système Files.app, l'extension fournisseur et le serveur distant. Le système demande des données à l'extension, l'extension traduit les requêtes en appels API du service cloud et renvoie les résultats via NSFileProviderItem.
Au lieu de charger la structure complète des fichiers à chaque mise à jour, l'extension transfère uniquement les éléments modifiés. NSFileProviderManager fournit des méthodes pour envoyer des mises à jour incrémentielles — « fichier A ajouté », « fichier B modifié », « dossier C supprimé ». Cela réduit considérablement le trafic et accélère l'affichage des modifications.
Selon Apple Engineering, la synchronisation incrémentielle réduit le volume de données transférées de 60 à 80 % par rapport à un rechargement complet. Il est recommandé d'utiliser NSFileProviderSyncAnchor pour marquer l'état de synchronisation et minimiser les requêtes en double.
File Provider Extension peut mettre en cache les fichiers localement pour un accès hors ligne. Lorsqu'un fichier est ouvert, le système fait une demande à l'extension, et l'extension décide de télécharger le contenu depuis le serveur ou de renvoyer une version déjà mise en cache. NSFileProviderItem indique le niveau de mise en cache via les champs isDownloaded et isUploaded.
Apple recommande de configurer les politiques de cache en fonction de la taille du fichier : pour les images et les documents — mise en cache complète, pour les vidéos — uniquement les aperçus, pour les archives — à la demande de l'utilisateur.
NSFileProviderManager est la classe centrale par laquelle l'extension interagit avec le système. Elle fournit des méthodes pour notifier le système des changements, créer de nouveaux éléments, gérer les téléchargements et traiter les erreurs. Chaque instance de NSFileProviderManager est liée à un domaine spécifique.
signalEnumerator(for:) — notifie au système que le contenu d'un dossier a changé et doit être relu. reimportItem(_:) — réimporte l'élément spécifié après une modification côté serveur. registerURLSessionTask:forItemWithIdentifier: — associe un téléchargement en arrière-plan à un fichier spécifique pour le suivi de la progression.
Limitation importante : NSFileProviderManager fonctionne uniquement dans le processus de l'extension. L'application principale ne peut pas appeler directement ses méthodes pour gérer la structure des fichiers — la synchronisation doit être initiée par l'extension ou le système.
let manager = NSFileProviderManager.default()
manager.signalEnumerator(for: workingSet) { error in
if let error = error {
print("Signal failed: \(error)")
}
}
Pour les téléchargements de fichiers en arrière-plan, NSFileProviderManager utilise URLSession avec une configuration d'arrière-plan. L'extension crée une tâche de téléchargement et l'enregistre dans le gestionnaire, qui l'associe à l'élément correspondant. Le système suit automatiquement la progression et les priorités des téléchargements en fonction de l'activité de l'utilisateur.
La création d'une File Provider Extension commence par l'ajout d'une nouvelle cible dans Xcode avec le modèle File Provider Extension. Xcode génère automatiquement une classe héritant de NSFileProviderExtension et un ensemble minimal de méthodes pour travailler avec les éléments.
Chaque élément de la structure de fichiers — un fichier ou un dossier — implémente le protocole NSFileProviderItem. Le protocole définit les champs obligatoires : itemIdentifier, parentItemIdentifier, filename, typeIdentifier et capabilities. En complément, vous pouvez spécifier la taille, la date de modification et les indicateurs de téléchargement.
struct CloudItem: NSFileProviderItem {
let itemIdentifier: NSFileProviderItemIdentifier
let parentItemIdentifier: NSFileProviderItemIdentifier
let filename: String
let typeIdentifier: String
let capabilities: NSFileProviderItemCapabilities
let documentSize: NSNumber?
}
La méthode enumerator(for:) renvoie un objet implémentant NSFileProviderEnumerator, qui fournit le contenu du dossier à la demande du système. iOS peut demander l'énumération du dossier racine, des sous-dossiers et d'un ensemble de travail — ce dernier est utilisé pour afficher les fichiers récents ou favoris.
Apple recommande d'utiliser des méthodes d'énumération asynchrones avec pagination via NSFileProviderPage pour ne pas charger des milliers d'éléments à la fois. Les pages de 50 à 100 éléments sont optimales pour les performances.
NSFileProviderDomain est le mécanisme de séparation des différents comptes au sein d'une même extension. Si un utilisateur a autorisé plusieurs comptes dans une application — Google Drive personnel et professionnel — chaque compte crée un domaine séparé, qui apparaît comme une source distincte dans l'application Fichiers.
Chaque domaine possède un identifiant unique, un nom d'affichage et un état. Les utilisateurs peuvent désactiver temporairement les domaines ou les supprimer sans affecter les autres comptes. Le système lance un processus d'extension séparé pour chaque domaine actif, garantissant l'isolation des données entre les comptes.
Selon Apple, il est recommandé de ne pas créer plus de 10 domaines par extension — un nombre excessif ralentit le lancement de l'application Fichiers et augmente la consommation mémoire. Pour les services avec un grand nombre de comptes, il est préférable de les regrouper dans un seul domaine avec changement de profil au sein de l'extension.
let domain = NSFileProviderDomain(
identifier: "work",
displayName: "Corporate Drive"
)
NSFileProviderManager.add(domain) { error in
if let error = error {
print("Failed to add domain: \(error)")
}
}
Questions fréquentes
Tout service peut implémenter sa propre extension. Parmi ceux qui prennent en charge — Google Drive, Dropbox, Microsoft OneDrive, Box, iCloud Drive et Nextcloud. L'extension est universelle pour tout stockage REST ou WebDAV.
L'extension reçoit des notifications du système concernant les modifications de fichiers locaux et les envoie au serveur via NSFileProviderManager. Pour la synchronisation inverse depuis le serveur, NSFileProviderSyncAnchor est utilisé — un marqueur de la dernière mise à jour.
Oui, si les fichiers sont mis en cache localement. NSFileProviderItem marque les fichiers téléchargés avec le flag isDownloaded. Les modifications effectuées en mode hors ligne sont synchronisées automatiquement lors de la restauration de la connexion.
Il n'y a pas de limitations directes — la taille est déterminée par les capacités du serveur. Apple recommande de mettre en cache automatiquement les fichiers jusqu'à 100 Mo, et pour les fichiers plus volumineux, d'utiliser le téléchargement en streaming avec une barre de progression.
UIDocumentPickerViewController fournit une sélection unique de fichiers via une fenêtre modale. File Provider Extension intègre une source permanente de documents dans l'application Fichiers avec synchronisation en arrière-plan et accès à long terme.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi