File Provider Extension egy iOS-mechanizmus, amely lehetővé teszi a felhőszolgáltatások és alkalmazások számára, hogy megjelenítsék fájljaikat a rendszer Fájlok alkalmazásában. A felhasználó a külső dokumentumokat egységes felületen látja a helyiekkel együtt, és megnyithatja, áthelyezheti és szerkesztheti azokat további szoftver telepítése nélkül. Az Apple Developer Documentation (2025) szerint az NSFileProviderManager inkrementális szinkronizálást biztosít és kezeli a fájlváltozatokat a saját gyorsítótárán keresztül az eszközön.
Főbb pontok
File Provider Extension egy alkalmazásbővítmény, amely új dokumentumforrásokat ad a Fájlok alkalmazáshoz. Egy felhőszolgáltatás — Google Drive, Dropbox, OneDrive vagy vállalati tárhely — megjelenítheti fájlstruktúráját közvetlenül a rendszerfelületen, külön alkalmazás megnyitása nélkül.
A felhasználó pontosan úgy dolgozik a távoli fájlokkal, mint az eszközön tároltakkal: tallózza a mappák tartalmát, húzza a dokumentumokat, megnyitja azokat bármely kompatibilis alkalmazásban és visszamenteti a változtatásokat a felhőbe. A WWDC 2025 szerint a File Provider Extension akár 1000 egyidejű szinkronizációs műveletet is támogat, és dinamikus prioritáskezeléssel alkalmazkodik a hálózati sebességhez.
A bővítmény a háttérben működik — az iOS szinkronizálás szüksége esetén indítja el, és erőforráshiány esetén kényszeríthetően leállíthatja. Minden műveletnek idempotensnek kell lennie, és támogatnia kell az ellenőrzőponttól történő folytatást.
File Provider Extension háromszintű architektúrával rendelkezik: a Files.app rendszerfolyamat, a szolgáltató-bővítmény és a távoli szerver. A rendszer adatokat kér a bővítménytől, a bővítmény a kéréseket API-hívásokká alakítja a felhőszolgáltatás felé, és az eredményeket az NSFileProviderItem-en keresztül adja vissza.
A teljes fájlstruktúra minden frissítéskor történő betöltése helyett a bővítmény csak a módosított elemeket küldi el. Az NSFileProviderManager módszereket biztosít inkrementális frissítések küldéséhez — „A fájl hozzáadva”, „B fájl módosítva”, „C mappa törölve”. Ez drámaian csökkenti a forgalmat és felgyorsítja a változások megjelenítését.
Az Apple Engineering szerint az inkrementális szinkronizálás 60–80%-kal csökkenti a továbbított adatok mennyiségét a teljes újratöltéshez képest. Ajánlott a NSFileProviderSyncAnchor használata a szinkronizációs állapot megjelölésére és a duplikált kérések minimalizálására.
File Provider Extension helyileg gyorsítótárazhatja a fájlokat offline eléréshez. Fájl megnyitásakor a rendszer kérést küld a bővítménynek, a bővítmény eldönti — letölti a tartalmat a szerverről, vagy visszaadja a már gyorsítótárazott változatot. Az NSFileProviderItem az isDownloaded és isUploaded mezőkön keresztül jelzi a gyorsítótárazás szintjét.
Az Apple a gyorsítótárazási politika konfigurálását javasolja a fájlmérettől függően: képek és dokumentumok esetén — teljes gyorsítótárazás, videók esetén — csak előnézet, archívumok esetén — a felhasználó kérésére.
NSFileProviderManager a központi osztály, amelyen keresztül a bővítmény kommunikál a rendszerrel. Módszereket biztosít a rendszer értesítésére a változásokról, új elemek létrehozására, letöltések kezelésére és hibák feldolgozására. Minden NSFileProviderManager példány egy adott tartományhoz van kötve.
signalEnumerator(for:) — értesíti a rendszert, hogy egy mappa tartalma megváltozott és a listát újra kell olvasni. reimportItem(_:) — újraimportálja a megadott elemet a szerveren történt változás után. registerURLSessionTask:forItemWithIdentifier: — háttérletöltést köt egy adott fájlhoz az előrehaladás követéséhez.
Fontos korlátozás: az NSFileProviderManager csak a bővítmény folyamatában működik. A fő alkalmazás nem hívhatja meg közvetlenül a módszereit a fájlstruktúra kezeléséhez — a szinkronizálást a bővítménynek vagy a rendszernek kell kezdeményeznie.
let manager = NSFileProviderManager.default()
manager.signalEnumerator(for: workingSet) { error in
if let error = error {
print("Signal failed: \(error)")
}
}
Fájlok háttérben történő letöltéséhez az NSFileProviderManager a URLSession-t használja háttérkonfigurációval. A bővítmény létrehoz egy letöltési feladatot és regisztrálja a menedzserben, amely a megfelelő elemhez köti. A rendszer automatikusan követi a letöltések előrehaladását és prioritásait a felhasználói aktivitástól függően.
A File Provider Extension létrehozása új target Xcode-ban történő hozzáadásával kezdődik a File Provider Extension sablonnal. Az Xcode automatikusan generál egy osztályt, amely a NSFileProviderExtension-ből öröklődik, és egy minimális módszerkészletet az elemekkel való munkához.
A fájlstruktúra minden eleme — fájl vagy mappa — megvalósítja a NSFileProviderItem protokollt. A protokoll meghatározza a kötelező mezőket: itemIdentifier, parentItemIdentifier, filename, typeIdentifier és capabilities. Opcionálisan megadható a méret, a módosítás dátuma és a letöltési jelzők.
struct CloudItem: NSFileProviderItem {
let itemIdentifier: NSFileProviderItemIdentifier
let parentItemIdentifier: NSFileProviderItemIdentifier
let filename: String
let typeIdentifier: String
let capabilities: NSFileProviderItemCapabilities
let documentSize: NSNumber?
}
Az enumerator(for:) metódus egy NSFileProviderEnumerator-t megvalósító objektumot ad vissza, amely a mappa tartalmát szolgáltatja a rendszer kérésére. Az iOS kérhet számlálást a gyökérmappához, almappákhoz és a munkakészlethez — ez utóbbi a legutóbbi vagy kedvenc fájlok megjelenítésére szolgál.
Az Apple az aszinkron számlálási módszerek használatát javasolja lapozással az NSFileProviderPage-en keresztül, hogy elkerülje ezrek egyidejű betöltését. Az 50–100 elemből álló oldalak optimálisak a teljesítményhez.
NSFileProviderDomain a különböző fiókok elkülönítésének mechanizmusa egy bővítményen belül. Ha a felhasználó több fiókot hitelesített az alkalmazásban — személyes és vállalati Google Drive — minden fiók külön tartományt hoz létre, amely külön forrásként jelenik meg a Fájlok alkalmazásban.
Minden tartomány egyedi azonosítóval, megjelenített névvel és állapottal rendelkezik. A felhasználó ideiglenesen letilthatja vagy törőlheti a tartományokat anélkül, hogy ez más fiókokat érintene. A rendszer külön bővítményfolyamatot indít minden aktív tartományhoz, biztosítva az adatok elkülönítését a fiókok között.
Az Apple szerint nem ajánlott 10-nél több tartományt létrehozni bővítményenként — a túlzott szám lelassítja a Fájlok alkalmazás indítását és növeli a memóriahasználatot. A sok fiókkal rendelkező szolgáltatások esetén jobb őket egyetlen tartományba aggregálni profilváltással a bővítményen belül.
let domain = NSFileProviderDomain(
identifier: "work",
displayName: "Corporate Drive"
)
NSFileProviderManager.add(domain) { error in
if let error = error {
print("Failed to add domain: \(error)")
}
}
Gyakran ismételt kérdések
Bármely szolgáltatás megvalósíthatja saját bővítményét. A támogatók között van a Google Drive, Dropbox, Microsoft OneDrive, Box, iCloud Drive és Nextcloud. A bővítmény univerzális bármely REST vagy WebDAV tárhelyhez.
A bővítmény értesítéseket kap a rendszertől a helyi fájlváltozásokról, és elküldi azokat a szerverre az NSFileProviderManager-en keresztül. A szerverről történő visszirányú szinkronizáláshoz az NSFileProviderSyncAnchor — az utolsó frissítés jelölője — használható.
Igen, ha a fájlok helyileg gyorsítótárazva vannak. Az NSFileProviderItem a letöltött fájlokat az isDownloaded jelzővel jelöli. Az offline módban végrehajtott változtatások automatikusan szinkronizálódnak a kapcsolat helyreállítása után.
Nincsenek közvetlen korlátozások — a méretet a szerver képességei határozzák meg. Az Apple a fájlok automatikus gyorsítótárazását javasolja 100 MB-ig, a nagyobb fájlok esetén pedig streaming letöltést előrehaladási sávval.
Az UIDocumentPickerViewController egyszeri fájlválasztást biztosít egy modális ablakon keresztül. A File Provider Extension állandó dokumentumforrást ágyaz be a Fájlok alkalmazásba háttérszinkronizálással és hosszú távú hozzáféréssel.
Összegzés
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is