File Provider Extension is een iOS-mechanisme waarmee apps toegang kunnen bieden tot bestanden uit externe bronnen via de ingebouwde Bestanden-app. Volgens Apple Developer Documentation, 2024 biedt File Provider Extension de mogelijkheid om bestanden uit cloudopslag, servers en aangepaste bestandssystemen rechtstreeks in Files.app weer te geven — zonder ze lokaal te hoeven importeren. De gebruiker krijgt een uniforme interface om met bestanden te werken, ongeacht hun fysieke locatie.
Belangrijkste punten
File Provider Extension is een app-extensie in iOS en macOS waarmee een app toegang kan bieden tot bestanden uit externe bronnen via de systeemapp Bestanden. Het verscheen in iOS 11 en verving het Document Provider-mechanisme, met toevoeging van ondersteuning voor synchronisatie, zoeken en tags.
De belangrijkste taak van File Provider Extension is om als brug te fungeren tussen externe opslag (cloudserver, bedrijfs-NAS, FTP) en Files.app. De gebruiker ziet bestanden en mappen alsof ze lokaal zijn opgeslagen, terwijl de gegevens zich op een externe server kunnen bevinden. De extensie werkt op de achtergrond en synchroniseert de inhoud indien nodig.
Volgens WWDC 2024 ontwikkelt Apple de FileProvider API actief: ondersteuning voor incrementele synchronisatie, verbeterde prestaties voor grote mappen en de mogelijkheid van groepsbewerkingen zijn toegevoegd. Dit maakt File Provider Extension de voorkeursmanier om externe bestanden te integreren in het Apple-ecosysteem.
Architectuur van File Provider Extension bestaat uit twee componenten: de hoofdextensie (type bestandsaanbieder) en een optionele UI-extensie voor authenticatie en configuratie. De hoofdextensie implementeert het NSFileProviderExtension-protocol en verwerkt alle verzoeken van 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)
}
}
Wanneer de gebruiker Files.app opent en uw aanbieder selecteert, start het systeem de extensie in een achtergrondproces. De extensie heeft geen gebruikersinterface — het is een headless proces dat verzoeken voor lezen, schrijven, hernoemen en verwijderen van bestanden verwerkt. Alle bewerkingen worden asynchroon uitgevoerd via NSFileProviderManager.
Belangrijke opmerking: File Provider Extension leeft in een apart proces en kan door het systeem worden beëindigd bij geheugentekort. Daarom moet de aanbieder de status kunnen herstellen na herstart door identificatiegegevens en synchronisatiecache in permanente opslag te bewaren.
NSFileProviderItem is een protocol dat een afzonderlijk bestand of map beschrijft in de hiërarchie van de aanbieder. Elk element heeft een unieke identificatie, naam, type (bestand of map), aanmaak- en wijzigingsdata, grootte en vlaggen (offline beschikbaar, alleen-lezen).
| Eigenschap | Type | Beschrijving |
|---|---|---|
| itemIdentifier | NSFileProviderItemIdentifier | Unieke ID van het element in het systeem van de aanbieder |
| parentItemIdentifier | NSFileProviderItemIdentifier | ID van de bovenliggende map (root — .rootContainer) |
| filename | String | Bestandsnaam met extensie |
| typeIdentifier | String (UTType) | Uniform Type Identifier voor het bepalen van het inhoudstype |
| capabilities | NSFileProviderItemCapabilities | Vlaggen: verwijderen, hernoemen, tags toevoegen |
Het protocol ondersteunt ook geavanceerde mogelijkheden via NSFileProviderItemProtocol: tags (kleurmarkeringen), pictogrammen, versiebeheer en aangepaste acties. Voor grote bestanden wordt ondersteuning voor hervatbare overdrachten (resumable transfers) geïmplementeerd via NSFileProviderService.
Volgens WWDC 2023 raadt Apple aan om sluitingen (NSFileProviderItemFields) te gebruiken om alleen gewijzigde eigenschappen bij te werken, niet het hele object. Dit versnelt de synchronisatie aanzienlijk bij batch-updates — bijvoorbeeld wanneer alleen de grootte van een groep bestanden verandert.
NSFileProviderManager — centrale klasse voor het beheren van de levenscyclus van de extensie. Het biedt methoden voor het signaleren van wijzigingen aan het systeem, het afhandelen van samenwerkingsconflicten en het beheren van downloads. De manager volgt automatisch actieve overdrachten en geeft prioriteit aan bestanden die zichtbaar zijn voor de gebruiker.
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
)
}
}
Synchronisatie-engine — dit is de logica die de ontwikkelaar zelf implementeert. Apple biedt geen ingebouwd synchronisatiemechanisme — alleen API om het systeem op de hoogte te stellen van wijzigingen. De aanbieder beslist zelf hoe bestanden van de server worden gedownload, lokaal worden gecachet en bewerkingsconflicten worden opgelost.
Conflicten: het systeem ondersteunt detectie van versieconflicten via NSFileProviderSyncAnchor. Wanneer een bestand gelijktijdig lokaal en extern wordt gewijzigd, gebruikt de aanbieder het synchronisatieanker om de laatst gesynchroniseerde versie te bepalen en het conflict op te lossen via de strategie „laatste schrijver wint” of door het maken van een conflicterende kopie.
File Provider Extension werkt binnen een strikte sandbox van iOS. De extensie heeft geen directe toegang tot het bestandssysteem van de host-app en omgekeerd — de app kan de bestanden van de aanbieder niet rechtstreeks lezen. Alle gegevensuitwisseling verloopt via de systeem-API's van Files.app.
Toegang tot gebruikersbestanden is alleen mogelijk via expliciete interactie: de gebruiker opent een bestand uit Files.app in een app en het systeem maakt een tijdelijke kopie van het bestand in een geïsoleerde container. De ontvangende app werkt met deze kopie, niet met het origineel in de opslag van de aanbieder.
Volgens Apple Security Guide, 2024 moet de aanbieder gegevensversleuteling tijdens verzending (TLS 1.3) implementeren en kan optioneel schijfversleuteling toevoegen voor gecachte bestanden. Gebruikersauthenticatie gebeurt via een aparte UI-component FileProviderUI, die buiten de sandbox van de extensie wordt gestart voor veilige invoer van inloggegevens.
Belangrijke beperking: de extensie kan geen willekeurige code uitvoeren — het verwerkt alleen verzoeken via NSFileProviderManager. Elke logica die buiten het bestandskader valt, moet in de hoofdapp worden geïmplementeerd en worden aangeroepen via app groups of XPC services.
Veelgestelde vragen
File Provider Extension is een app-extensie voor integratie van externe bestandsopslag met de Bestanden-app. Het maakt weergave mogelijk van bestanden uit cloudservices, FTP, NAS en andere bronnen zonder ze lokaal te kopiëren.
File Provider (iOS 11+) verving Document Provider en voegde achtergrondsynchronisatie, ondersteuning voor zoeken via Spotlight, tags en verbeterde prestaties toe. Document Provider was verouderd vanaf iOS 11 en verwijderd in iOS 14.
Synchronisatie wordt door de ontwikkelaar geïmplementeerd via NSFileProviderManager. De extensie signaleert wijzigingen aan het systeem via signalEnumerator en het systeem vraagt een bijgewerkte lijst van elementen op. Versieconflicten worden opgelost via NSFileProviderSyncAnchor.
Ja, File Provider Extension kan als zelfstandig proces werken zonder dat de hoofdapp is gestart. Dit is een headless-extensie die iOS start op verzoek van Files.app. Authenticatie en initiële configuratie worden echter meestal via de hoofdapp uitgevoerd.
De extensie vereist capability File Provider in Xcode en entitlement com.apple.developer.file-provider. Voor netwerktoegang wordt capability Network toegevoegd. Alle andere rechten worden strikt beperkt door de iOS-sandbox.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook