File Provider Extension ist ein iOS-Mechanismus, der es Anwendungen ermöglicht, über die integrierte Dateien-App Zugriff auf Dateien aus externen Quellen zu gewähren. Laut Apple Developer Documentation, 2024 ermöglicht File Provider Extension das Anzeigen von Dateien aus Cloud-Speichern, Servern und benutzerdefinierten Dateisystemen direkt in Files.app — ohne sie lokal importieren zu müssen. Der Benutzer erhält eine einheitliche Oberfläche zum Arbeiten mit Dateien, unabhängig von ihrem physischen Speicherort.
Wichtige Punkte
File Provider Extension ist eine App-Erweiterung in iOS und macOS, die es einer Anwendung ermöglicht, über die systemeigene Dateien-App Zugriff auf Dateien aus externen Quellen zu gewähren. Sie wurde mit iOS 11 eingeführt und ersetzte den Document Provider-Mechanismus, indem sie Unterstützung für Synchronisation, Suche und Tags hinzufügte.
Die Hauptaufgabe von File Provider Extension besteht darin, als Brücke zwischen externem Speicher (Cloud-Server, Unternehmens-NAS, FTP) und Files.app zu fungieren. Der Benutzer sieht Dateien und Ordner, als wären sie lokal gespeichert, obwohl sich die Daten tatsächlich auf einem entfernten Server befinden können. Die Erweiterung arbeitet im Hintergrund und synchronisiert Inhalte nach Bedarf.
Laut WWDC 2024 entwickelt Apple die FileProvider-API aktiv weiter: Unterstützung für inkrementelle Synchronisation wurde hinzugefügt, die Leistung für große Verzeichnisse wurde verbessert, und Batch-Operationen sind jetzt verfügbar. Dies macht File Provider Extension zur bevorzugten Methode für die Integration externer Dateien in das Apple-Ökosystem.
Die Architektur von File Provider Extension besteht aus zwei Komponenten: der Haupterweiterung (Dateianbietertyp) und einer optionalen UI-Erweiterung für Authentifizierung und Konfiguration. Die Haupterweiterung implementiert das NSFileProviderExtension-Protokoll und bearbeitet alle Anfragen von 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)
}
}
Wenn ein Benutzer Files.app öffnet und Ihren Anbieter auswählt, startet das System die Erweiterung in einem Hintergrundprozess. Die Erweiterung hat keine Benutzeroberfläche — es ist ein headloser Prozess, der Lese-, Schreib-, Umbenennungs- und Löschanfragen für Dateien bearbeitet. Alle Vorgänge werden asynchron über NSFileProviderManager ausgeführt.
Wichtige Nuance: File Provider Extension lebt in einem separaten Prozess und kann vom System bei Speichermangel beendet werden. Daher muss der Anbieter in der Lage sein, den Zustand nach einem Neustart wiederherzustellen, indem er Identifikatoren und den Synchronisations-Cache im persistenten Speicher speichert.
NSFileProviderItem ist ein Protokoll, das eine einzelne Datei oder einen Ordner in der Anbieterhierarchie beschreibt. Jedes Element hat eine eindeutige Kennung, einen Namen, einen Typ (Datei oder Ordner), Erstellungs- und Änderungsdaten, eine Größe und Flags (offline verfügbar, schreibgeschützt).
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
| itemIdentifier | NSFileProviderItemIdentifier | Eindeutige ID des Elements im Anbietersystem |
| parentItemIdentifier | NSFileProviderItemIdentifier | ID des übergeordneten Ordners (Stammverzeichnis — .rootContainer) |
| filename | String | Dateiname mit Erweiterung |
| typeIdentifier | String (UTType) | Uniform Type Identifier zur Bestimmung des Inhaltstyps |
| capabilities | NSFileProviderItemCapabilities | Flags: Löschen, Umbenennen, Hinzufügen von Tags |
Das Protokoll unterstützt auch erweiterte Funktionen über NSFileProviderItemProtocol: Tags (farbige Etiketten), Symbole, Versionierung und benutzerdefinierte Aktionen. Für große Dateien wird die Unterstützung für fortsetzbare Übertragungen über NSFileProviderService implementiert.
Laut WWDC 2023 empfiehlt Apple die Verwendung von Closures (NSFileProviderItemFields), um nur geänderte Eigenschaften zu aktualisieren, anstatt das gesamte Objekt. Dies beschleunigt die Synchronisation bei Batch-Updates erheblich — zum Beispiel, wenn sich nur die Größe einer Gruppe von Dateien ändert.
NSFileProviderManager ist die zentrale Klasse zur Verwaltung des Lebenszyklus der Erweiterung. Sie bietet Methoden zur Benachrichtigung des Systems über Änderungen, zur Behandlung von kollaborativen Konflikten und zur Verwaltung von Downloads. Der Manager verfolgt automatisch aktive Übertragungen und priorisiert für den Benutzer sichtbare Dateien.
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
)
}
}
Die Sync-Engine ist die Logik, die der Entwickler unabhängig implementiert. Apple stellt keinen eingebauten Synchronisationsmechanismus bereit — nur die API zur Benachrichtigung des Systems über Änderungen. Der Anbieter entscheidet selbst, wie Dateien vom Server heruntergeladen, lokal zwischengespeichert und Bearbeitungskonflikte gelöst werden.
Konflikte: Das System unterstützt die Erkennung von Versionskonflikten über NSFileProviderSyncAnchor. Wenn eine Datei gleichzeitig lokal und remote geändert wird, verwendet der Anbieter den Sync-Anker, um die letzte synchronisierte Version zu bestimmen, und löst den Konflikt entweder durch die Strategie der letzte Schreiber gewinnt oder durch Erstellen einer Konfliktkopie.
File Provider Extension arbeitet in einer strengen iOS-Sandbox. Die Erweiterung hat keinen direkten Zugriff auf das Dateisystem der Host-App, und umgekehrt kann die App die Dateien des Anbieters nicht direkt lesen. Der gesamte Datenaustausch erfolgt über die System-APIs von Files.app.
Der Zugriff auf Benutzerdateien ist nur durch explizite Interaktion möglich: Der Benutzer öffnet eine Datei aus Files.app in einer Anwendung, und das System erstellt eine temporäre Kopie der Datei in einem isolierten Container. Die empfangende App arbeitet mit dieser Kopie, nicht mit dem Original im Speicher des Anbieters.
Laut Apple Security Guide, 2024 muss der Anbieter die Datenverschlüsselung während der Übertragung (TLS 1.3) implementieren und kann optional eine Festplattenverschlüsselung für zwischengespeicherte Dateien hinzufügen. Die Benutzerauthentifizierung erfolgt über eine separate FileProviderUI-Komponente, die außerhalb der Erweiterungs-Sandbox für die sichere Eingabe von Anmeldeinformationen ausgeführt wird.
Wichtige Einschränkung: Die Erweiterung kann keinen beliebigen Code ausführen — sie verarbeitet nur Anfragen über NSFileProviderManager. Jede Logik, die über Dateioperationen hinausgeht, muss in der Haupt-App implementiert und über App-Gruppen oder XPC-Dienste aufgerufen werden.
Häufig gestellte Fragen
File Provider Extension ist eine App-Erweiterung zur Integration externer Dateispeicher mit der Dateien-App. Sie ermöglicht die Anzeige von Dateien aus Cloud-Diensten, FTP, NAS und anderen Quellen ohne lokales Kopieren.
File Provider (iOS 11+) ersetzte Document Provider und fügte Hintergrundsynchronisation, Spotlight-Suchunterstützung, Tags und verbesserte Leistung hinzu. Document Provider wurde mit iOS 11 als veraltet eingestuft und in iOS 14 entfernt.
Die Synchronisation wird vom Entwickler über NSFileProviderManager implementiert. Die Erweiterung signalisiert dem System Änderungen über signalEnumerator, und das System fordert eine aktualisierte Liste der Elemente an. Versionskonflikte werden über NSFileProviderSyncAnchor gelöst.
Ja, File Provider Extension kann als unabhängiger Prozess ohne laufende Haupt-App arbeiten. Es ist eine headlose Erweiterung, die iOS auf Anfrage von Files.app startet. Authentifizierung und Ersteinrichtung werden jedoch in der Regel über die Haupt-App durchgeführt.
Die Erweiterung benötigt die File Provider-Fähigkeit in Xcode sowie die Berechtigung com.apple.developer.file-provider. Für den Netzwerkzugriff wird die Network-Fähigkeit hinzugefügt. Alle anderen Rechte werden streng durch die iOS-Sandbox eingeschränkt.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch