File Provider Extension је механизам iOS-а који омогућава апликацијама да пруже приступ датотекама из спољних извора преко уграђене апликације Фајлови. Према Apple Developer Documentation, 2024, File Provider Extension омогућава приказ датотека из облачних складишта, сервера и прилагођених фајл система директно у Files.app — без потребе за локалним увозом. Корисник добија јединствени интерфејс за рад са датотекама без обзира на њихову физичку локацију.
Главно
File Provider Extension је проширење апликације у iOS и macOS-у које омогућава апликацији да пружи приступ датотекама из спољних извора преко системске апликације Фајлови. Појавило се у iOS 11 и заменило механизам Document Provider, додајући подршку за синхронизацију, претрагу и ознаке.
Главни задатак File Provider Extension-а је да делује као мост између спољног складишта (облачног сервера, корпоративног NAS-а, FTP-а) и Files.app-а. Корисник види датотеке и фолдере као да су локално ускладиштене, иако се подаци могу налазити на удаљеном серверу. Проширење ради у позадини, синхронизујући садржај по потреби.
Према WWDC 2024, Apple активно развија FileProvider API: додата је подршка за инкременталну синхронизацију, побољшане перформансе за велике директоријуме и могућност групних операција. То чини File Provider Extension пожељним начином интеграције спољних датотека у Apple екосистем.
Архитектура File Provider Extension-а се састоји од две компоненте: главног проширења (тип фајл-провајдера) и опционог UI проширења за аутентификацију и конфигурацију. Главно проширење имплементира протокол NSFileProviderExtension и обрађује све захтеве од Files.app-а.
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)
}
}
Када корисник отвори Files.app и изабере вашег провајдера, систем покреће проширење у позадинском процесу. Проширење нема кориснички интерфејс — то је headless процес који обрађује захтеве за читање, писање, преименовање и брисање датотека. Све операције се извршавају асинхроно преко NSFileProviderManager-а.
Важна напомена: File Provider Extension живи у одвојеном процесу и може бити прекинут од стране система при недостатку меморије. Због тога провајдер мора бити у стању да обнови стање након поновног покретања, чувајући идентификаторе и кеш синхронизације у трајном складишту.
NSFileProviderItem је протокол који описује појединачну датотеку или фолдер у хијерархији провајдера. Сваки елемент има јединствени идентификатор, назив, тип (датотека или фолдер), датуме креирања и модификације, величину и заставице (доступно ван мреже, само за читање).
| Својство | Тип | Опис |
|---|---|---|
| itemIdentifier | NSFileProviderItemIdentifier | Јединствени ID елемента у систему провајдера |
| parentItemIdentifier | NSFileProviderItemIdentifier | ID родитељског фолдера (корен — .rootContainer) |
| filename | String | Назив датотеке са екстензијом |
| typeIdentifier | String (UTType) | Uniform Type Identifier за одређивање типа садржаја |
| capabilities | NSFileProviderItemCapabilities | Заставице: брисање, преименовање, додавање ознака |
Протокол такође подржава напредне могућности преко NSFileProviderItemProtocol: ознаке (обојене етикете), иконе, верзионисање и прилагођене акције. За велике датотеке имплементира се подршка за наставак преноса (resumable transfers) преко NSFileProviderService.
Према WWDC 2023, Apple препоручује коришћење затварања (NSFileProviderItemFields) за ажурирање само измењених својстава, а не целог објекта. То значајно убрзава синхронизацију при групним ажурирањима — на пример, када се мења само величина групе датотека.
NSFileProviderManager — централна класа за управљање животним циклусом проширења. Пружа методе за сигнализирање систему о променама, обраду колаборативних конфликата и управљање преузимањима. Менаџер аутоматски прати активне трансфере и даје приоритет датотекама видљивим кориснику.
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
)
}
}
Погон за синхронизацију је логика коју програмер имплементира самостално. Apple не пружа уграђени механизам синхронизације — само API за обавештавање система о променама. Провајдер сам одлучује како да преузима датотеке са сервера, кешира их локално и решава конфликте уређивања.
Конфликти: систем подржава откривање конфликата верзија преко NSFileProviderSyncAnchor. Када се датотека истовремено мења локално и на даљини, провајдер користи сидро синхронизације да одреди последњу синхронизовану верзију и реши конфликт по стратегији „последњи писац побеђује“ или креирањем конфликтне копије.
File Provider Extension ради унутар строгог пешчаника (sandbox) iOS-а. Проширење нема директан приступ фајл систему апликације домаћина и обрнуто — апликација не може директно читати датотеке провајдера. Цела размена података иде преко системских API-ја Files.app-а.
Приступ датотекама корисника могућ је само кроз експлицитну интеракцију: корисник отвара датотеку из Files.app-а у апликацији, а систем креира привремену копију датотеке у изолованом контејнеру. Апликација прималац ради са овом копијом, а не са оригиналом у складишту провајдера.
Према Apple Security Guide, 2024, провајдер је дужан да имплементира шифровање података при преносу (TLS 1.3) и може опционо додати шифровање на диску за кеширане датотеке. Аутентификација корисника се врши преко одвојене UI компоненте FileProviderUI, која се покреће ван пешчаника проширења ради безбедног уноса акредитива.
Кључно ограничење: проширење не може покретати произвољни код — обрађује само захтеве преко NSFileProviderManager-а. Свака логика која излази из оквира фајл операција мора бити имплементирана у главној апликацији и позвана преко app groups или XPC services.
Често постављана питања
File Provider Extension је проширење апликације за интеграцију спољних складишта датотека са апликацијом Фајлови. Омогућава приказ датотека из облачних сервиса, FTP-а, NAS-а и других извора без њиховог локалног копирања.
File Provider (iOS 11+) заменио је Document Provider, додајући позадинску синхронизацију, подршку за претрагу кроз Spotlight, ознаке и побољшане перформансе. Document Provider се сматра застарелим од iOS 11 и уклоњен је у iOS 14.
Синхронизација се имплементира од стране програмера преко NSFileProviderManager-а. Проширење сигнализира систему о променама кроз signalEnumerator, а систем захтева ажурирану листу елемената. Конфликти верзија се решавају преко NSFileProviderSyncAnchor-а.
Да, File Provider Extension може радити као самосталан процес без покренуте главне апликације. Ово је headless проширење које iOS покреће на захтев Files.app-а. Међутим, аутентификација и почетна конфигурација се обично обављају кроз главну апликацију.
Проширење захтева capability File Provider у Xcode-у, као и entitlement com.apple.developer.file-provider. За приступ мрежи додаје се capability Network. Сва остала права су строго ограничена iOS пешчаником.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође