File Provider Extension est un mécanisme iOS qui permet aux applications de fournir un accès aux fichiers provenant de sources externes via l’application Fichiers intégrée. Selon Apple Developer Documentation, 2024, File Provider Extension permet d’afficher les fichiers du stockage cloud, des serveurs et des systèmes de fichiers personnalisés directement dans Files.app — sans avoir besoin de les importer localement. L’utilisateur obtient une interface unifiée pour travailler avec les fichiers, indépendamment de leur emplacement physique.
Points clés
File Provider Extension est une extension d’application dans iOS et macOS qui permet à une application de fournir un accès aux fichiers provenant de sources externes via l’application Fichiers du système. Elle a été introduite dans iOS 11 et a remplacé le mécanisme Document Provider, en ajoutant la prise en charge de la synchronisation, de la recherche et des balises.
La tâche principale de File Provider Extension est de servir de pont entre le stockage externe (serveur cloud, NAS d’entreprise, FTP) et Files.app. L’utilisateur voit les fichiers et dossiers comme s’ils étaient stockés localement, bien que les données puissent se trouver sur un serveur distant. L’extension fonctionne en arrière-plan, synchronisant le contenu selon les besoins.
Selon la WWDC 2024, Apple développe activement l’API FileProvider : la prise en charge de la synchronisation incrémentielle a été ajoutée, les performances pour les grands répertoires ont été améliorées et les opérations par lots sont désormais disponibles. Cela fait de File Provider Extension la méthode préférée pour intégrer des fichiers externes dans l’écosystème Apple.
L’architecture de File Provider Extension se compose de deux composants : l’extension principale (type fournisseur de fichiers) et une extension d’interface utilisateur optionnelle pour l’authentification et la configuration. L’extension principale implémente le protocole NSFileProviderExtension et traite toutes les requêtes de Files.app.
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)
}
}
Lorsqu’un utilisateur ouvre Files.app et sélectionne votre fournisseur, le système lance l’extension dans un processus en arrière-plan. L’extension n’a pas d’interface utilisateur — c’est un processus sans tête qui traite les demandes de lecture, d’écriture, de renommage et de suppression de fichiers. Toutes les opérations sont effectuées de manière asynchrone via NSFileProviderManager.
Nuance importante : File Provider Extension vit dans un processus séparé et peut être terminé par le système en cas de manque de mémoire. Par conséquent, le fournisseur doit être capable de restaurer l’état après un redémarrage, en enregistrant les identifiants et le cache de synchronisation dans un stockage persistant.
NSFileProviderItem est un protocole qui décrit un fichier ou un dossier individuel dans la hiérarchie du fournisseur. Chaque élément possède un identifiant unique, un nom, un type (fichier ou dossier), des dates de création et de modification, une taille et des indicateurs (disponible hors ligne, lecture seule).
| Propriété | Type | Description |
|---|---|---|
| itemIdentifier | NSFileProviderItemIdentifier | ID unique de l’élément dans le système du fournisseur |
| parentItemIdentifier | NSFileProviderItemIdentifier | ID du dossier parent (racine — .rootContainer) |
| filename | String | Nom du fichier avec extension |
| typeIdentifier | String (UTType) | Identifiant de type uniforme pour déterminer le type de contenu |
| capabilities | NSFileProviderItemCapabilities | Indicateurs : suppression, renommage, ajout de balises |
Le protocole prend également en charge des capacités étendues via NSFileProviderItemProtocol : balises (étiquettes colorées), icônes, versionnage et actions personnalisées. Pour les fichiers volumineux, la prise en charge des transferts reprisables est implémentée via NSFileProviderService.
Selon la WWDC 2023, Apple recommande d’utiliser des fermetures (NSFileProviderItemFields) pour mettre à jour uniquement les propriétés modifiées plutôt que l’objet entier. Cela accélère considérablement la synchronisation lors des mises à jour par lots — par exemple, lorsque seule la taille d’un groupe de fichiers change.
NSFileProviderManager est la classe centrale pour gérer le cycle de vie de l’extension. Elle fournit des méthodes pour signaler au système les changements, gérer les conflits collaboratifs et gérer les téléchargements. Le gestionnaire suit automatiquement les transferts actifs et priorise les fichiers visibles pour l’utilisateur.
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
)
}
}
Le moteur de synchronisation est la logique que le développeur implémente de manière indépendante. Apple ne fournit pas de mécanisme de synchronisation intégré — seulement l’API pour notifier le système des changements. Le fournisseur décide lui-même comment télécharger les fichiers depuis le serveur, les mettre en cache localement et résoudre les conflits d’édition.
Conflits : le système prend en charge la détection des conflits de version via NSFileProviderSyncAnchor. Lorsqu’un fichier est modifié simultanément localement et à distance, le fournisseur utilise l’ancre de synchronisation pour déterminer la dernière version synchronisée et résout le conflit en utilisant une stratégie de dernier écrivain gagnant ou en créant une copie en conflit.
File Provider Extension fonctionne dans une sandbox stricte d’iOS. L’extension n’a pas d’accès direct au système de fichiers de l’application hôte et, inversement, l’application ne peut pas lire directement les fichiers du fournisseur. Tous les échanges de données passent par les API système de Files.app.
L’accès aux fichiers de l’utilisateur n’est possible que par interaction explicite : l’utilisateur ouvre un fichier depuis Files.app dans une application, et le système crée une copie temporaire du fichier dans un conteneur isolé. L’application destinataire travaille avec cette copie, et non avec l’original dans le stockage du fournisseur.
Selon le Apple Security Guide, 2024, le fournisseur doit implémenter le chiffrement des données pendant la transmission (TLS 1.3) et peut optionnellement ajouter un chiffrement de disque pour les fichiers mis en cache. L’authentification de l’utilisateur est effectuée via un composant FileProviderUI séparé, qui s’exécute en dehors de la sandbox de l’extension pour une saisie sécurisée des identifiants.
Limitation clé : l’extension ne peut pas exécuter de code arbitraire — elle ne traite que les requêtes via NSFileProviderManager. Toute logique allant au-delà des opérations sur les fichiers doit être implémentée dans l’application principale et invoquée via des groupes d’applications ou des services XPC.
Foire aux questions
File Provider Extension est une extension d’application pour intégrer le stockage externe de fichiers avec l’application Fichiers. Elle permet d’afficher les fichiers des services cloud, FTP, NAS et d’autres sources sans les copier localement.
File Provider (iOS 11+) a remplacé Document Provider, ajoutant la synchronisation en arrière-plan, la prise en charge de la recherche Spotlight, les balises et des performances améliorées. Document Provider a été déprécié avec iOS 11 et supprimé dans iOS 14.
La synchronisation est implémentée par le développeur via NSFileProviderManager. L’extension signale au système les changements via signalEnumerator, et le système demande une liste mise à jour des éléments. Les conflits de version sont résolus via NSFileProviderSyncAnchor.
Oui, File Provider Extension peut fonctionner comme un processus indépendant sans que l’application principale soit en cours d’exécution. C’est une extension sans tête qu’iOS lance à la demande de Files.app. Cependant, l’authentification et la configuration initiale sont généralement effectuées via l’application principale.
L’extension nécessite la capacité File Provider dans Xcode, ainsi que l’entitlement com.apple.developer.file-provider. Pour l’accès au réseau, la capacité Network est ajoutée. Tous les autres droits sont strictement limités par la sandbox iOS.
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