A File Provider Extension egy iOS-mechanizmus, amely lehetővé teszi az alkalmazások számára, hogy hozzáférést biztosítsanak külső forrásokból származó fájlokhoz a beépített Fájlok alkalmazáson keresztül. Az Apple Developer Documentation, 2024 szerint a File Provider Extension lehetővé teszi a felhőalapú tárakból, szerverekről és egyéni fájlrendszerekből származó fájlok megjelenítését közvetlenül a Files.app-ban — anélkül, hogy azokat helyileg importálni kellene. A felhasználó egységes felületet kap a fájlokkal való munkához, függetlenül azok fizikai helyétől.
Főbb pontok
File Provider Extension egy alkalmazáskiterjesztés iOS-ben és macOS-ben, amely lehetővé teszi az alkalmazás számára, hogy hozzáférést biztosítson külső forrásokból származó fájlokhoz a rendszer Fájlok alkalmazásán keresztül. Az iOS 11-ben jelent meg, és felváltotta a Document Provider mechanizmust, hozzáadva a szinkronizáció, keresés és címkék támogatását.
A File Provider Extension fő feladata, hogy hídként szolgáljon a külső tárhely (felhőszerver, vállalati NAS, FTP) és a Files.app között. A felhasználó úgy látja a fájlokat és mappákat, mintha azok helyileg lennének tárolva, holott az adatok egy távoli szerveren is lehetnek. A kiterjesztés a háttérben működik, szükség szerint szinkronizálja a tartalmat.
A WWDC 2024 szerint az Apple aktívan fejleszti a FileProvider API-t: hozzáadta a növekményes szinkronizáció támogatását, javította a teljesítményt nagy könyvtárak esetében, és lehetővé tette a csoportos műveleteket. Ez teszi a File Provider Extension-t a külső fájlok Apple ökoszisztémába történő integrálásának előnyben részesített módjává.
Architektúra: A File Provider Extension két összetevőből áll: a fő kiterjesztésből (fájlszolgáltató típus) és egy opcionális UI-kiterjesztésből a hitelesítéshez és konfiguráláshoz. A fő kiterjesztés megvalósítja az NSFileProviderExtension protokollt, és feldolgozza a Files.app összes kérését.
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)
}
}
Amikor a felhasználó megnyitja a Files.app-ot és kiválasztja az Ön szolgáltatóját, a rendszer elindítja a kiterjesztést egy háttérfolyamatban. A kiterjesztésnek nincs felhasználói felülete — ez egy fej nélküli (headless) folyamat, amely a fájlok olvasására, írására, átnevezésére és törlésére vonatkozó kéréseket dolgozza fel. Az összes művelet aszinkron módon, az NSFileProviderManager segítségével történik.
Fontos megjegyzés: A File Provider Extension külön folyamatban él, és a rendszer memóriahiány esetén befejezheti. Ezért a szolgáltatónak képesnek kell lennie az állapot visszaállítására újraindítás után, megőrizve az azonosítókat és a szinkronizációs gyorsítótárat állandó tárhelyen.
NSFileProviderItem egy protokoll, amely egy adott fájlt vagy mappát ír le a szolgáltató hierarchiájában. Minden elem rendelkezik egyedi azonosítóval, névvel, típussal (fájl vagy mappa), létrehozási és módosítási dátumokkal, mérettel és jelzőkkel (offline elérhető, csak olvasható).
| Tulajdonság | Típus | Leírás |
|---|---|---|
| itemIdentifier | NSFileProviderItemIdentifier | Az elem egyedi ID-ja a szolgáltató rendszerében |
| parentItemIdentifier | NSFileProviderItemIdentifier | A szülő mappa ID-ja (gyökér — .rootContainer) |
| filename | String | Fájlnév kiterjesztéssel |
| typeIdentifier | String (UTType) | Uniform Type Identifier a tartalom típusának meghatározásához |
| capabilities | NSFileProviderItemCapabilities | Jelzők: törlés, átnevezés, címkék hozzáadása |
A protokoll támogatja a fejlett képességeket is az NSFileProviderItemProtocol segítségével: címkék (színes jelölők), ikonok, verziókezelés és egyéni műveletek. Nagy fájlok esetén az NSFileProviderService segítségével megvalósul a folytatható átvitel (resumable transfers) támogatása.
A WWDC 2023 szerint az Apple azt ajánlja, hogy zárásokat (NSFileProviderItemFields) használjunk a módosított tulajdonságok frissítéséhez, ne a teljes objektumot. Ez jelentősen felgyorsítja a szinkronizációt tömeges frissítések esetén — például amikor csak egy fájlcsoport mérete változik.
NSFileProviderManager — a központi osztály a kiterjesztés életciklusának kezeléséhez. Módszereket biztosít a változások rendszer felé történő jelzésére, az együttműködési konfliktusok kezelésére és a letöltések irányítására. A kezelő automatikusan nyomon követi az aktív átvitelt és előnyben részesíti a felhasználó számára látható fájlokat.
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
)
}
}
Szinkronizációs motor — ez az a logika, amelyet a fejlesztő önállóan implementál. Az Apple nem biztosít beépített szinkronizációs mechanizmust — csak API-t a rendszer változásokról történő értesítésére. A szolgáltató maga dönti el, hogyan töltse le a fájlokat a szerverről, gyorsítótárazza azokat helyileg, és oldja meg a szerkesztési konfliktusokat.
Konfliktusok: a rendszer támogatja a verziókonfliktusok érzékelését az NSFileProviderSyncAnchor segítségével. Amikor egy fájlt egyszerre módosítanak helyileg és távolról, a szolgáltató a szinkronizációs horgonyt használja az utolsó szinkronizált verzió meghatározásához és a konfliktus megoldásához a „az utolsó író nyer” stratégia vagy egy konfliktusmásolat létrehozása útján.
File Provider Extension az iOS szigorú homokozójában (sandbox) működik. A kiterjesztésnek nincs közvetlen hozzáférése a gazdaalkalmazás fájlrendszeréhez és fordítva — az alkalmazás nem olvashatja közvetlenül a szolgáltató fájljait. Minden adatcsere a Files.app rendszer-API-jain keresztül történik.
A felhasználói fájlokhoz való hozzáférés csak explicit interakció révén lehetséges: a felhasználó megnyit egy fájlt a Files.app-ból egy alkalmazásban, és a rendszer ideiglenes másolatot készít a fájlól egy elkülönített tárolóban. A fogadó alkalmazás ezzel a másolattal dolgozik, nem a szolgáltató tárhelyén lévő eredetivel.
Az Apple Security Guide, 2024 szerint a szolgáltatónak kötelező adattitkosítást megvalósítania az átvitel során (TLS 1.3), és opcionálisan lemez titkosítást is hozzáadhat a gyorsítótárazott fájlok számára. A felhasználó hitelesítése különálló FileProviderUI komponensen keresztül történik, amely a kiterjesztés homokozóján kívül indul a hitelesítő adatok biztonságos megadása érdekében.
Fő korlátozás: a kiterjesztés nem futtathat tetszőleges kódot — csak az NSFileProviderManager-en keresztül érkező kéréseket dolgoz fel. Minden olyan logikát, amely túllép a fájlműveletek keretein, a fő alkalmazásban kell megvalósítani, és app groups vagy XPC services segítségével kell meghívni.
Gyakran Ismételt Kérdések
File Provider Extension egy alkalmazáskiterjesztés külső fájltáraknak a Fájlok alkalmazással való integrálásához. Lehetővé teszi fájlok megjelenítését felhőszolgáltatásokból, FTP-ből, NAS-ból és egyéb forrásokból anélkül, hogy azokat helyileg másolni kellene.
File Provider (iOS 11+) felváltotta a Document Providert, hozzáadva a háttér szinkronizációt, a Spotlighton keresztüli keresés támogatását, címkéket és jobb teljesítményt. A Document Provider az iOS 11-től kezdve elavultnak számít, és eltávolításra került az iOS 14-ben.
A szinkronizációt a fejlesztő implementálja az NSFileProviderManager segítségével. A kiterjesztés a signalEnumerator segítségével jelzi a változásokat a rendszernek, a rendszer pedig kéri a frissített elemlistát. A verziókonfliktusok az NSFileProviderSyncAnchor segítségével oldódnak meg.
Igen, a File Provider Extension önálló folyamatként működhet a fő alkalmazás elindítása nélkül. Ez egy headless kiterjesztés, amelyet az iOS a Files.app kérésére indít el. A hitelesítés és a kezdeti konfiguráció azonban általában a fő alkalmazáson keresztül történik.
A kiterjesztés capability File Provider jogosultságot igényel az Xcode-ban, valamint com.apple.developer.file-provider entitlementet. Hálózati hozzáféréshez a Network capability kerül hozzáadásra. Minden egyéb jogosultságot szigorúan korlátoz az iOS homokozó.
Ö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