File Provider Extension je mechanismus iOS, který umožňuje cloudovým službám a aplikacím zobrazovat své soubory v systémové aplikaci Soubory. Uživatel vidí externí dokumenty v jednotném rozhraní na stejné úrovni jako místní a může je otevírat, přesouvat a upravovat bez instalace dalšího softwaru. Podle Apple Developer Documentation (2025) poskytuje NSFileProviderManager inkrementální synchronizaci a spravuje verze souborů prostřednictvím vlastní mezipaměti na zařízení.
Hlavní body
File Provider Extension je rozšíření aplikace, které pŔídává nové zdroje dokumentů do aplikace Soubory. Cloudová služba — Google Drive, Dropbox, OneDrive nebo firemní úložiště — může zobrazit svou souborovou strukturu přímo v systémovém rozhraní, bez otevírání samostatné aplikace.
Uživatel pracuje se vzdálenými soubory úplně stejně jako s těmi uloženými na zařízení: prohlíží obsah složek, přetahuje dokumenty, otevírá je v libovolné kompatibilní aplikaci a ukládá změny zpět do cloudu. Podle WWDC 2025 podporuje File Provider Extension až 1000 současných synchronizačních operací a přizpůsobuje se rychlosti sítě pomocí dynamické správy priorit.
Rozšíření pracuje na pozadí — iOS jej spouští pŔi potřebě synchronizace a může jej násilně ukončit pŔi nedostatku zdrojů. Všechny operace musí být idempotentní a podporovat obnovení z kontrolního bodu.
File Provider Extension má tŔívrstvou architekturu: systémový proces Files.app, rozšíření-poskytovatele a vzdálený server. Systém požaduje data od rozšíření, rozšíření transformuje požadavky na API volání cloudové služby a vrací výsledky prostřednictvím NSFileProviderItem.
Místo načítání celé souborové struktury pŔi každé aktualizaci rozšíření přenáší pouze změněné prvky. NSFileProviderManager poskytuje metody pro odesílání inkrementálních aktualizací — „soubor A byl pŔidán“, „soubor B byl změněn“, „složka C byla smazána“. To drasticky snižuje provoz a zrychluje zobrazování změn.
Podle Apple Engineering snižuje inkrementální synchronizace objem pŔenášených dat o 60–80% ve srovnání s úplným znovunačtením. Doporučuje se používat NSFileProviderSyncAnchor pro označení stavu synchronizace a minimalizaci duplicitních požadavků.
File Provider Extension může ukládat soubory lokálně do mezipaměti pro offline pŔístup. PŔi otevírání souboru systém odešle požadavek rozšíření, rozšíření rozhodne — stáhnout obsah ze serveru nebo vrátit již zǎachovanou verzi. NSFileProviderItem udávú úroveň ukládání do mezipaměti prostřednictvím polí isDownloaded a isUploaded.
Apple doporučuje konfigurovat politiku ukládání do mezipaměti v závislosti na velikosti souborů: pro obrázky a dokumenty — plné ukládání do mezipaměti, pro video — pouze náhled, pro archivy — na požadání uživatele.
NSFileProviderManager je centrální tŔída, prostřednictvím které rozšíření komunikuje se systémem. Poskytuje metody pro oznamování změn systému, vytváření nových prvků, správu stahování a zpracování chyb. Každá instance NSFileProviderManager je vázána na konkrétní doménu.
signalEnumerator(for:) — oznamuje systému, že se obsah složky změnil a seznam je tŔeba znovu pŔečíst. reimportItem(_:) — znovu importuje uvedený prvek po změně na serveru. registerURLSessionTask:forItemWithIdentifier: — propojuje stahování na pozadí s konkrétním souborem pro sledování průběhu.
Důležité omezení: NSFileProviderManager funguje pouze v procesu rozšíření. Hlavní aplikace nemůže pŔímo volat jeho metody pro správu souborové struktury — synchronizaci musí zahájit rozšíření nebo systém.
let manager = NSFileProviderManager.default()
manager.signalEnumerator(for: workingSet) { error in
if let error = error {
print("Signal failed: \(error)")
}
}
Pro stahování souborů na pozadí používá NSFileProviderManager URLSession s konfigurací na pozadí. Rozšíření vytvoří úkol stahování a zaregistruje jej ve správci, který jej propojí s odpovídajícím prvkem. Systém automaticky sleduje průběh a priority stahování v závislosti na aktivitě uživatele.
Vytvoření File Provider Extension začíná pŔidáním nového targetu v Xcode s šablonou File Provider Extension. Xcode automaticky vygeneruje tŔídu dědící z NSFileProviderExtension a minimální sadu metod pro práci s prvky.
Každý prvek souborové struktury — soubor nebo složka — implementuje protokol NSFileProviderItem. Protokol definuje povinná pole: itemIdentifier, parentItemIdentifier, filename, typeIdentifier a capabilities. Volitelně lze uést velikost, datum změny a pŔíznaky stahování.
struct CloudItem: NSFileProviderItem {
let itemIdentifier: NSFileProviderItemIdentifier
let parentItemIdentifier: NSFileProviderItemIdentifier
let filename: String
let typeIdentifier: String
let capabilities: NSFileProviderItemCapabilities
let documentSize: NSNumber?
}
Metoda enumerator(for:) vrací objekt implementující NSFileProviderEnumerator, který poskytuje obsah složky na požadání systému. iOS může požadovat výčet pro kořenovou složku, podsložky a pracovní sadu — poslední jmenovaná se používá k zobrazení nedávných nebo oblíbených souborů.
Apple doporučuje používat asynchronní metody výčtu se stránkováním prostřednictvím NSFileProviderPage, aby se zabránilo načítání tisíců prvků současně. Stránky o 50–100 prvcích jsou optimální pro výkon.
NSFileProviderDomain je mechanismus pro oddělení různých účtů v rámci jednoho rozšíření. Pokud uživatel autorizoval několik účtů v aplikaci — osobní a firemní Google Drive — každý účet vytvoří samostatnou doménu, která se zobrazí jako samostatný zdroj v aplikaci Soubory.
Každá doména má jedinečný identifikátor, zobrazený název a stav. Uživatel může dočasně zakázat domény nebo je odstranit, aniž by to ovlivnilo ostatní účty. Systém spouští samostatný proces rozšíření pro každou aktivní doménu, což zajišťuje izolaci dat mezi účty.
Podle Apple se doporučuje nevytvářet více než 10 domén na jedno rozšíření — nadměrný počet zpomaluje spouštění aplikace Soubory a zvyšuje spotřebu paměti. Pro služby s velkým počtem účtů je lepší je agregovat do jedné domény s pŔepínáním profilů v rámci rozšíření.
let domain = NSFileProviderDomain(
identifier: "work",
displayName: "Corporate Drive"
)
NSFileProviderManager.add(domain) { error in
if let error = error {
print("Failed to add domain: \(error)")
}
}
Často kladené otázky
Každá služba může implementovat vlastní rozšíření. Mezi podporující patří Google Drive, Dropbox, Microsoft OneDrive, Box, iCloud Drive a Nextcloud. Rozšíření je univerzální pro jakékoli úložiště REST nebo WebDAV.
Rozšíření dostává oznámení od systému o změnách místních souborů a odesílá je na server prostřednictvím NSFileProviderManager. Pro zpětnou synchronizaci ze serveru se používá NSFileProviderSyncAnchor — značka poslední aktualizace.
Ano, pokud jsou soubory lokálně uloženy v mezipaměti. NSFileProviderItem označuje stažené soubory pŔíznakem isDownloaded. Změny provedené v offline režimu jsou automaticky synchronizovány po obnovení spojení.
Neexistují žádná pŔímá omezení — velikost je určena možnostmi serveru. Apple doporučuje automatické ukládání souborů do mezipaměti do 100 MB a pro větší soubory použití streamovaného stahování s ukazatelem průběhu.
UIDocumentPickerViewController poskytuje jednorázový výběr souborů prostřednictvím modálního okna. File Provider Extension vkládá trvalý zdroj dokumentů do aplikace Soubory se synchronizací na pozadí a dlouhodobým pŔístupem.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také