File Provider Extension је механизам iOS који омогућуће сервисима у облаци и апликацијама да прикажу своје датотеке у системској апликацији Фајлови. Корисник види спољне документе у јединственом интерфејсу заједно са локалнима и може да их отвара, премешта и уређује без инсталације додатног софтвера. Према Apple Developer Documentation (2025), NSFileProviderManager обезбеђује инкременталну синхронизацију и управља верзијама датотека путем сопственог кеша на уређају.
Главно
File Provider Extension је екстензија апликације која додаје нове изворе докумената у апликацију Фајлови. Сервис у облаци — Google Drive, Dropbox, OneDrive или корпоративно складиште — може да прикаже своју структуру датотека директно у системском интерфејсу, без отварања посебне апликације.
Корисник ради са удаљеним датотекама потпуно исто као са онима сачуваним на уређају: прегледа садржај фолдера, превлачи документе, отвара их у било којој компатибилној апликацији и чува промене назад у облак. Према WWDC 2025, File Provider Extension подржава до 1000 истовремених синхронизационих операција и прилагоґава се брзини мреже кроз динамичко управљање приоритетима.
Екстензија ради у позадини — iOS је покреће када је потребна синхронизација и може да је принудно заустави при недостатку ресурса. Све операције морају бити идемпотентне и подржавати наставак од контролне тачке.
File Provider Extension има трослојну архитектуру: системски процес Files.app, екстензију-пружаоца и удаљени сервер. Систем захтева податке од екстензије, екстензија претвара захтеве у API позиве сервиса у облаци и враћа резултате кроз NSFileProviderItem.
Уместо учитавања целокупне структуре датотека при сваком ажурирању, екстензија преноси само измењене елементе. NSFileProviderManager пружа методе за слање инкременталних ажурирања — „датотека A је додата“, „датотека B је измењена“, „фолдер C је обрисан“. Ово драстично смањује саобраћај и убрзава приказивање промена.
Према Apple Engineering, инкрементална синхронизација смањује обим пренетих података за 60–80% у поређењу са потпуним поновним учитавањем. Препоручује се коришћење NSFileProviderSyncAnchor за означавање стања синхронизације и минимизацију дупликатних захтева.
File Provider Extension може да кешира датотеке локално за офлајн приступ. При отварању датотеке, систем шаље захтев екстензији, екстензија одлучује — да преузме садржај са сервера или да врати већ кеширану верзију. NSFileProviderItem показује ниво кеширања кроз поља isDownloaded и isUploaded.
Apple препоручује конфигурисање политике кеширања у зависности од величине датотека: за слике и документе — потпуно кеширање, за видео — само преглед, за архиве — на захтев корисника.
NSFileProviderManager је централна класа кроз коју екстензија комуницира са системом. Она пружа методе за обавештавање система о променама, креирање нових елемената, управљање преузимањима и обраду грешака. Свака инстанца NSFileProviderManager је везана за одређени домен.
signalEnumerator(for:) — обавештава систем да се садржај фолдера променио и да листу треба поново прочитати. reimportItem(_:) — поново увози наведени елеменат након промене на серверу. registerURLSessionTask:forItemWithIdentifier: — повезује преузимање у позадини са одређеном датотеком за праћење напретка.
Важно ограничење: NSFileProviderManager ради само у процесу екстензије. Главна апликација не може директно да позива њене методе за управљање структуром датотека — синхронизацију мора да покрене екстензија или систем.
let manager = NSFileProviderManager.default()
manager.signalEnumerator(for: workingSet) { error in
if let error = error {
print("Signal failed: \(error)")
}
}
За преузимање датотека у позадини, NSFileProviderManager користи URLSession са конфигурацијом за позадину. Екстензија креира задатак преузимања и региструје га у менаџеру, који га повезује са одговарајућим елементом. Систем аутоматски прати напредак и приоритете преузимања у зависности од активности корисника.
Креирање File Provider Extension почиње додавањем новог target-а у Xcode са шаблоном File Provider Extension. Xcode аутоматски генерише класу која насљеђује NSFileProviderExtension и минималан скуп метода за рад са елементима.
Сваки елеменат структуре датотека — датотека или фолдер — имплементира протокол NSFileProviderItem. Протокол дефинише обавезна поља: itemIdentifier, parentItemIdentifier, filename, typeIdentifier и capabilities. Опционално се могу навести величина, датум промене и флагови преузимања.
struct CloudItem: NSFileProviderItem {
let itemIdentifier: NSFileProviderItemIdentifier
let parentItemIdentifier: NSFileProviderItemIdentifier
let filename: String
let typeIdentifier: String
let capabilities: NSFileProviderItemCapabilities
let documentSize: NSNumber?
}
Метода enumerator(for:) враћа објекат који имплементира NSFileProviderEnumerator, који пружа садржај фолдера на захтев система. iOS може да захтева набрајање за коренски фолдер, подфолдере и радни скуп — посљедњи се користи за приказивање недавних или омиљених датотека.
Apple препоручује коришћење асинхроних метода набрајања са пагинацијом кроз NSFileProviderPage да би се избегло учитавање хиљада елемената истовремено. Странице од 50–100 елемената су оптималне за перформансе.
NSFileProviderDomain је механизам за одвајање различитих налога у оквиру једне екстензије. Ако је корисник ауторизовао више налога у апликацији — лични и корпоративни Google Drive — сваки налог креира посебан домен који се приказује као засебни извор у апликацији Фајлови.
Сваки домен има јединствени идентификатор, назив за приказ и стање. Корисник може привремено да онемогући домене или да их обрише без утицаја на друге налоге. Систем покреће посебан процес екстензије за сваки активан домен, што осигурава изолацију података између налога.
Према Apple-у, препоручује се да се не креира више од 10 домена по једној екстензији — прекомеран број успорава покретање апликације Фајлови и повећава потрошњу меморије. За сервисе са великим бројем налога, боље је агрегирати их у један домен са пребацивањем профила у оквиру екстензије.
let domain = NSFileProviderDomain(
identifier: "work",
displayName: "Corporate Drive"
)
NSFileProviderManager.add(domain) { error in
if let error = error {
print("Failed to add domain: \(error)")
}
}
Често постављана питања
Сваки сервис може да имплементира сопствену екстензију. Међу онима који подржавају су Google Drive, Dropbox, Microsoft OneDrive, Box, iCloud Drive и Nextcloud. Екстензија је универзална за свако REST или WebDAV складиште.
Екстензија добија обавештења од система о променама локалних датотека и шаље их на сервер кроз NSFileProviderManager. За повратну синхронизацију са сервера користи се NSFileProviderSyncAnchor — маркер посљедњег ажурирања.
Да, ако су датотеке локално кеширане. NSFileProviderItem означава преузете датотеке флагом isDownloaded. Промене начињене у офлајн моду синхронизују се аутоматски након поновног успостављања везе.
Нема директних ограничења — величина је одређена могућностима сервера. Apple препоручује аутоматско кеширање датотека до 100 MB, а за веће датотеке коришћење стримованог преузимања са траком напретка.
UIDocumentPickerViewController пружа једнократни избор датотека кроз модални прозор. File Provider Extension уграђује стални извор докумената у апликацију Фајлови са синхронизацијом у позадини и дугорочним приступом.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође