File Provider Extension är en iOS-mekanism som gör det möjligt för appar att ge åtkomst till filer från externa källor via den inbyggda appen Filer. Enligt Apple Developer Documentation, 2024 ger File Provider Extension möjligheten att visa filer från molnlagring, servrar och anpassade filsystem direkt i Files.app — utan att behöva importera dem lokalt. Användaren får ett enhetligt gränssnitt för att arbeta med filer oavsett deras fysiska plats.
Huvudpunkter
File Provider Extension är en apptillägg i iOS och macOS som gör det möjligt för appen att ge åtkomst till filer från externa källor via systemappen Filer. Det dök upp i iOS 11 och ersatte Document Provider-mekanismen, med tillägg av stöd för synkronisering, sökning och taggar.
Huvuduppgiften för File Provider Extension är att fungera som en bro mellan extern lagring (molnserver, företags-NAS, FTP) och Files.app. Användaren ser filer och mappar som om de vore lagrade lokalt, även om data kan finnas på en fjärrserver. Tillägget fungerar i bakgrunden och synkroniserar innehåll efter behov.
Enligt WWDC 2024 utvecklar Apple aktivt FileProvider API: stöd för inkrementell synkronisering, förbättrad prestanda för stora kataloger och möjligheten till gruppoperationer har lagts till. Detta gör File Provider Extension till det föredragna sättet att integrera externa filer i Apples ekosystem.
Arkitektur: File Provider Extension består av två komponenter: huvudtillägget (fil-leverantörstyp) och ett valfritt UI-tillägg för autentisering och konfiguration. Huvudtillägget implementerar NSFileProviderExtension-protokollet och bearbetar alla förfrågningar från 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)
}
}
När användaren öppnar Files.app och väljer din leverantör, startar systemet tillägget i en bakgrundsprocess. Tillägget har inget användargränssnitt — det är en headless-process som bearbetar förfrågningar om läsning, skrivning, omdöpning och borttagning av filer. Alla operationer utförs asynkront via NSFileProviderManager.
Viktig anteckning: File Provider Extension lever i en separat process och kan avslutas av systemet vid minnesbrist. Därför måste leverantören kunna återställa tillståndet efter omstart, genom att spara identifierare och synkroniseringscache i permanent lagring.
NSFileProviderItem är ett protokoll som beskriver en enskild fil eller mapp i leverantörens hierarki. Varje element har en unik identifierare, namn, typ (fil eller mapp), datum för skapande och ändring, storlek och flaggor (tillgänglig offline, skrivskyddad).
| Egenskap | Typ | Beskrivning |
|---|---|---|
| itemIdentifier | NSFileProviderItemIdentifier | Unikt ID för elementet i leverantörens system |
| parentItemIdentifier | NSFileProviderItemIdentifier | ID för den överordnade mappen (rot — .rootContainer) |
| filename | String | Filnamn med filtillägg |
| typeIdentifier | String (UTType) | Uniform Type Identifier för att bestämma innehållstyp |
| capabilities | NSFileProviderItemCapabilities | Flaggor: borttagning, omdöpning, lägga till taggar |
Protokollet stöder även avancerade funktioner via NSFileProviderItemProtocol: taggar (färgmarkörer), ikoner, versionshantering och anpassade åtgärder. För stora filer implementeras stöd för återupptagbara överföringar (resumable transfers) via NSFileProviderService.
Enligt WWDC 2023 rekommenderar Apple att använda slutningar (NSFileProviderItemFields) för att endast uppdatera ändrade egenskaper, inte hela objektet. Detta påskyndar synkroniseringen avsevärt vid batchuppdateringar — till exempel när endast storleken på en grupp filer ändras.
NSFileProviderManager — central klass för att hantera tilläggets livscykel. Den tillhandahåller metoder för att signalera ändringar till systemet, hantera samarbetskonflikter och hantera nedladdningar. Hanteraren spårar automatiskt aktiva överföringar och prioriterar filer som är synliga för användaren.
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
)
}
}
Synkroniseringsmotor — detta är logiken som utvecklaren implementerar självständigt. Apple tillhandahåller ingen inbyggd synkroniseringsmekanism — endast API för att meddela systemet om ändringar. Leverantören bestämmer själv hur filer ska laddas ner från servern, cachas lokalt och lösa redigeringskonflikter.
Konflikter: systemet stöder identifiering av versionskonflikter via NSFileProviderSyncAnchor. När en fil ändras samtidigt lokalt och på distans, använder leverantören synkroniseringsankaret för att bestämma den senast synkroniserade versionen och lösa konflikten med strategin “sista skribenten vinner” eller genom att skapa en konfliktkopia.
File Provider Extension fungerar inom en strikt sandlåda (sandbox) i iOS. Tillägget har ingen direkt åtkomst till värdappens filsystem och vice versa — appen kan inte läsa leverantörens filer direkt. Allt datautbyte sker via system-API:erna i Files.app.
Åtkomst till användarens filer är endast möjlig genom explicit interaktion: användaren öppnar en fil från Files.app i en app och systemet skapar en tillfällig kopia av filen i en isolerad behållare. Den mottagande appen arbetar med denna kopia, inte med originalfilen i leverantörens lagring.
Enligt Apple Security Guide, 2024 måste leverantören implementera datakryptering under överföring (TLS 1.3) och kan eventuellt lägga till diskkryptering för cachade filer. Användarautentisering sker via en separat UI-komponent FileProviderUI, som startas utanför tilläggets sandlåda för säker inmatning av inloggningsuppgifter.
Viktig begränsning: tillägget kan inte köra godtycklig kod — det bearbetar endast förfrågningar via NSFileProviderManager. All logik som går utöver filoperationer måste implementeras i huvudappen och anropas via app groups eller XPC services.
Vanliga frågor
File Provider Extension är ett apptillägg för att integrera externa fillagringsplatser med appen Filer. Det möjliggör visning av filer från molntjänster, FTP, NAS och andra källor utan att kopiera dem lokalt.
File Provider (iOS 11+) ersatte Document Provider och lade till bakgrundssynkronisering, stöd för sökning via Spotlight, taggar och förbättrad prestanda. Document Provider ansågs föråldrat från iOS 11 och togs bort i iOS 14.
Synkronisering implementeras av utvecklaren via NSFileProviderManager. Tillägget signalerar ändringar till systemet via signalEnumerator och systemet begär en uppdaterad lista av element. Versionskonflikter löses via NSFileProviderSyncAnchor.
Ja, File Provider Extension kan fungera som en självständig process utan att huvudappen är igång. Detta är ett headless-tillägg som iOS startar på begäran av Files.app. Autentisering och initial konfiguration utförs dock vanligtvis via huvudappen.
Tillägget kräver capability File Provider i Xcode samt entitlement com.apple.developer.file-provider. För nätverksåtkomst läggs capability Network till. Alla andra rättigheter är strikt begränsade av iOS sandlåda.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också