File Provider Extension: co to je, rozšíření přístupu k souborům iOS

Autor: IT Sectr Publikováno: 2026-07-11 Doba čtení: 6 min

File Provider Extension je mechanismus iOS, který umožňuje aplikacím poskytovat přístup k souborům z externích zdrojů prostřednictvím vestavěné aplikace Soubory. Podle Apple Developer Documentation, 2024 poskytuje File Provider Extension možnost zobrazovat soubory z cloudových úložišť, serverů a vlastních souborových systémů přímo v Files.app — bez nutnosti jejich lokálního importu. Uživatel získá jednotné rozhraní pro práci se soubory bez ohledu na jejich fyzické umístění.

Hlavní body

  • File Provider Extension — iOS rozšíření pro integraci externích souborových systémů s Files.app
  • NSFileProviderManager — hlavní API pro správu souborů a synchronizaci stavu
  • Dva režimy práce: Foundation-based a FileProviderUI pro různé scénáře integrace
  • Poskytovatelé mohou implementovat vyhledávání, hierarchii složek a tagy přes NSFileProviderItem
  • Bezpečnost je zajištěna přes Sandbox — rozšíření funguje izolovaně od aplikace

Co je File Provider Extension v iOS?

File Provider Extension je rozšíření aplikace v iOS a macOS, které umožňuje aplikaci poskytovat přístup k souborům z externích zdrojů prostřednictvím systémové aplikace Soubory. Objevilo se v iOS 11 a nahradilo mechanismus Document Provider, přidalo podporu pro synchronizaci, vyhledávání a tagy.

Hlavním úkolem File Provider Extension je fungovat jako most mezi externím úložištěm (cloudový server, firemní NAS, FTP) a Files.app. Uživatel vidí soubory a složky, jako by byly uloženy lokálně, i když data mohou být na vzdáleném serveru. Rozšíření pracuje na pozadí a synchronizuje obsah podle potřeby.

Podle WWDC 2024 Apple aktivně vyvíjí FileProvider API: byla přidána podpora pro inkrementální synchronizaci, zlepšený výkon pro velké adresáře a možnost hromadných operací. To dělá z File Provider Extension preferovaný způsob integrace externích souborů do ekosystému Apple.

Jak funguje File Provider Extension

Architektura File Provider Extension se skládá ze dvou komponent: hlavního rozšíření (typ poskytovatele souborů) a volitelného UI rozšíření pro autentizaci a konfiguraci. Hlavní rozšíření implementuje protokol NSFileProviderExtension a zpracovává všechny požadavky z Files.app.

swift
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)
    }
}

Když uživatel otevře Files.app a vybere vašeho poskytovatele, systém spustí rozšíření v procesu na pozadí. Rozšíření nemá uživatelské rozhraní — je to headless proces, který zpracovává požadavky na čtení, zápis, přejmenování a mazání souborů. Všechny operace jsou prováděny asynchronně přes NSFileProviderManager.

Důležitá poznámka: File Provider Extension žije v samostatném procesu a může být ukončen systémem při nedostatku paměti. Proto musí být poskytovatel schopen obnovit stav po restartu, ukládat identifikátory a synchronizační mezipaměť do trvalého úložiště.

Model NSFileProviderItem: soubory a složky

NSFileProviderItem je protokol, který popisuje jednotlivý soubor nebo složku v hierarchii poskytovatele. Každý prvek má jedinečný identifikátor, název, typ (soubor nebo složka), data vytvoření a úpravy, velikost a příznaky (dostupné offline, pouze pro čtení).

VlastnostTypPopis
itemIdentifierNSFileProviderItemIdentifierJedinečné ID prvku v systému poskytovatele
parentItemIdentifierNSFileProviderItemIdentifierID nadřazené složky (kořen — .rootContainer)
filenameStringNázev souboru s příponou
typeIdentifierString (UTType)Uniform Type Identifier pro určení typu obsahu
capabilitiesNSFileProviderItemCapabilitiesPříznaky: mazání, přejmenování, přidávání tagů

Protokol také podporuje pokročilé možnosti přes NSFileProviderItemProtocol: tagy (barevné značky), ikony, verzování a vlastní akce. Pro velké soubory je implementována podpora pro obnovitelné přenosy (resumable transfers) přes NSFileProviderService.

Podle WWDC 2023 Apple doporučuje používat uzávěry (NSFileProviderItemFields) pro aktualizaci pouze změněných vlastností, nikoli celého objektu. To výrazně urychluje synchronizaci při dávkových aktualizacích — například když se mění pouze velikost skupiny souborů.

Synchronizační engine a NSFileProviderManager

NSFileProviderManager — centrální třída pro správu životního cyklu rozšíření. Poskytuje metody pro signalizaci změn systému, zpracování kolaborativních konfliktů a správu stahování. Manažer automaticky sleduje aktivní přenosy a upřednostňuje soubory viditelné uživateli.

swift
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
        )
    }
}

Synchronizační engine — to je logika, kterou vývojář implementuje samostatně. Apple neposkytuje vestavěný synchronizační mechanismus — pouze API pro oznamování změn systému. Poskytovatel sám rozhoduje, jak stahovat soubory ze serveru, ukládat je do místní mezipaměti a řešit editační konflikty.

Konflikty: systém podporuje detekci verzí konfliktů přes NSFileProviderSyncAnchor. Když je soubor současně změněn lokálně i vzdáleně, poskytovatel použije kotvu synchronizace k určení poslední synchronizované verze a vyřešení konfliktu strategií „poslední zapisovatel vítězí“ nebo vytvořením konfliktní kopie.

Bezpečnost a sandbox rozšíření

File Provider Extension pracuje uvnitř přísného sandboxu iOS. Rozšíření nemá přímý přístup k souborovému systému hostitelské aplikace a naopak — aplikace nemůže přímo číst soubory poskytovatele. Veškerá výměna dat probíhá přes systémová API Files.app.

Přístup k souborům uživatele je možný pouze prostřednictvím explicitní interakce: uživatel otevře soubor z Files.app v aplikaci a systém vytvoří dočasnou kopii souboru v izolovaném kontejneru. Přijímající aplikace pracuje s touto kopií, nikoli s originálem v úložišti poskytovatele.

Podle Apple Security Guide, 2024 je poskytovatel povinen implementovat šifrování dat při přenosu (TLS 1.3) a může volitelně přidat šifrování disku pro ukládané soubory do mezipaměti. Autentizace uživatele se provádí prostřednictvím samostatné UI komponenty FileProviderUI, která se spouští mimo sandbox rozšíření pro bezpečné zadávání přihlašovacích údajů.

Klíčové omezení: rozšíření nemůže spouštět libovolný kód — zpracovává pouze požadavky přes NSFileProviderManager. Jakákoli logika přesahující rámec souborových operací musí být implementována v hlavní aplikaci a volána prostřednictvím app groups nebo XPC services.

Často kladené otázky

Co je File Provider Extension v iOS?

File Provider Extension je rozšíření aplikace pro integraci externích úložišť souborů s aplikací Soubory. Umožňuje zobrazovat soubory z cloudových služeb, FTP, NAS a dalších zdrojů bez jejich lokálního kopírování.

Čím se File Provider liší od Document Provider?

File Provider (iOS 11+) nahradil Document Provider, přidal synchronizaci na pozadí, podporu vyhledávání přes Spotlight, tagy a lepší výkon. Document Provider byl považován za zastaralý od iOS 11 a odstraněn v iOS 14.

Jak File Provider Extension synchronizuje soubory?

Synchronizace je implementována vývojářem prostřednictvím NSFileProviderManager. Rozšíření signalizuje změny systému přes signalEnumerator a systém vyžádá aktualizovaný seznam prvků. Verzní konflikty se řeší přes NSFileProviderSyncAnchor.

Může rozšíření fungovat bez hlavní aplikace?

Ano, File Provider Extension může fungovat jako samostatný proces bez spuštěné hlavní aplikace. Jedná se o headless rozšíření, které iOS spouští na vyžádání Files.app. Autentizace a počáteční konfigurace se však obvykle provádějí prostřednictvím hlavní aplikace.

Jaká přístupová práva potřebuje File Provider Extension?

Rozšíření vyžaduje capability File Provider v Xcode a entitlement com.apple.developer.file-provider. Pro přístup k síti se přidává capability Network. Všechna ostatní práva jsou přísně omezena sandboxem iOS.

Shrnutí

  • File Provider Extension — iOS mechanismus pro integraci externích souborových systémů s Files.app prostřednictvím rozšíření aplikace
  • NSFileProviderManager — hlavní API pro správu souborů, signalizaci změn a stahování
  • NSFileProviderItem — protokol popisující jednotku obsahu v hierarchii poskytovatele
  • Sandbox izoluje rozšíření od hostitelské aplikace — výměna dat pouze přes Files.app
  • Synchronizace je implementována vývojářem: Apple poskytuje API, ale ne vestavěný engine
  • Verzní konflikty jsou řešeny prostřednictvím kotvy synchronizace — poskytovatel volí strategii řešení
  • Režim na pozadí umožňuje rozšíření pracovat bez spuštěné aplikace, ale vyžaduje ukládání stavu

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í.

Prodiskutovat projekt

Přečtěte si také