File Provider Extension: шта је то, проширење приступа датотекама iOS

Аутор: IT Sectr Објављено: 2026-07-11 Време читања: 6 мин

File Provider Extension је механизам iOS-а који омогућава апликацијама да пруже приступ датотекама из спољних извора преко уграђене апликације Фајлови. Према Apple Developer Documentation, 2024, File Provider Extension омогућава приказ датотека из облачних складишта, сервера и прилагођених фајл система директно у Files.app — без потребе за локалним увозом. Корисник добија јединствени интерфејс за рад са датотекама без обзира на њихову физичку локацију.

Главно

  • File Provider Extension — iOS проширење за интеграцију спољних фајл система са Files.app
  • NSFileProviderManager — главни API за управљање датотекама и синхронизацију стања
  • Два режима рада: Foundation-based и FileProviderUI за различите сценарије интеграције
  • Провајдери могу имплементирати претрагу, хијерархију фолдера и ознаке преко NSFileProviderItem
  • Безбедност се обезбеђује кроз Sandbox — проширење ради изоловано од апликације

Шта је File Provider Extension у iOS-у?

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

Архитектура File Provider Extension-а се састоји од две компоненте: главног проширења (тип фајл-провајдера) и опционог UI проширења за аутентификацију и конфигурацију. Главно проширење имплементира протокол NSFileProviderExtension и обрађује све захтеве од 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)
    }
}

Када корисник отвори Files.app и изабере вашег провајдера, систем покреће проширење у позадинском процесу. Проширење нема кориснички интерфејс — то је headless процес који обрађује захтеве за читање, писање, преименовање и брисање датотека. Све операције се извршавају асинхроно преко NSFileProviderManager-а.

Важна напомена: File Provider Extension живи у одвојеном процесу и може бити прекинут од стране система при недостатку меморије. Због тога провајдер мора бити у стању да обнови стање након поновног покретања, чувајући идентификаторе и кеш синхронизације у трајном складишту.

Модел NSFileProviderItem: датотеке и фолдери

NSFileProviderItem је протокол који описује појединачну датотеку или фолдер у хијерархији провајдера. Сваки елемент има јединствени идентификатор, назив, тип (датотека или фолдер), датуме креирања и модификације, величину и заставице (доступно ван мреже, само за читање).

СвојствоТипОпис
itemIdentifierNSFileProviderItemIdentifierЈединствени ID елемента у систему провајдера
parentItemIdentifierNSFileProviderItemIdentifierID родитељског фолдера (корен — .rootContainer)
filenameStringНазив датотеке са екстензијом
typeIdentifierString (UTType)Uniform Type Identifier за одређивање типа садржаја
capabilitiesNSFileProviderItemCapabilitiesЗаставице: брисање, преименовање, додавање ознака

Протокол такође подржава напредне могућности преко NSFileProviderItemProtocol: ознаке (обојене етикете), иконе, верзионисање и прилагођене акције. За велике датотеке имплементира се подршка за наставак преноса (resumable transfers) преко NSFileProviderService.

Према WWDC 2023, Apple препоручује коришћење затварања (NSFileProviderItemFields) за ажурирање само измењених својстава, а не целог објекта. То значајно убрзава синхронизацију при групним ажурирањима — на пример, када се мења само величина групе датотека.

Погон за синхронизацију и NSFileProviderManager

NSFileProviderManager — централна класа за управљање животним циклусом проширења. Пружа методе за сигнализирање систему о променама, обраду колаборативних конфликата и управљање преузимањима. Менаџер аутоматски прати активне трансфере и даје приоритет датотекама видљивим кориснику.

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

Погон за синхронизацију је логика коју програмер имплементира самостално. 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 у iOS-у?

File Provider Extension је проширење апликације за интеграцију спољних складишта датотека са апликацијом Фајлови. Омогућава приказ датотека из облачних сервиса, FTP-а, NAS-а и других извора без њиховог локалног копирања.

Чега се File Provider разликује од Document Provider-а?

File Provider (iOS 11+) заменио је Document Provider, додајући позадинску синхронизацију, подршку за претрагу кроз Spotlight, ознаке и побољшане перформансе. Document Provider се сматра застарелим од iOS 11 и уклоњен је у iOS 14.

Како File Provider Extension синхронизује датотеке?

Синхронизација се имплементира од стране програмера преко NSFileProviderManager-а. Проширење сигнализира систему о променама кроз signalEnumerator, а систем захтева ажурирану листу елемената. Конфликти верзија се решавају преко NSFileProviderSyncAnchor-а.

Може ли проширење радити без главне апликације?

Да, File Provider Extension може радити као самосталан процес без покренуте главне апликације. Ово је headless проширење које iOS покреће на захтев Files.app-а. Међутим, аутентификација и почетна конфигурација се обично обављају кроз главну апликацију.

Која права приступа су потребна за File Provider Extension?

Проширење захтева capability File Provider у Xcode-у, као и entitlement com.apple.developer.file-provider. За приступ мрежи додаје се capability Network. Сва остала права су строго ограничена iOS пешчаником.

Резиме

  • File Provider Extension — iOS механизам за интеграцију спољних фајл система са Files.app кроз проширење апликације
  • NSFileProviderManager — главни API за управљање датотекама, сигнализацију промена и преузимања
  • NSFileProviderItem — протокол који описује јединицу садржаја у хијерархији провајдера
  • Пешчаник изолује проширење од апликације домаћина — размена података само кроз Files.app
  • Синхронизација се имплементира од стране програмера: Apple пружа API, али не уграђени погон
  • Конфликти верзија се обрађују кроз сидро синхронизације — провајдер бира стратегију решавања
  • Позадински режим омогућава проширењу да ради без покренуте апликације, али захтева чување стања

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође