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 та вибирає вашого постачальника, система запускає розширення у фоновому процесі. Розширення не має інтерфейсу користувача — це безголовний процес, який обробляє запити на читання, запис, перейменування та видалення файлів. Усі операції виконуються асинхронно через NSFileProviderManager.

Важливий нюанс: File Provider Extension живе в окремому процесі і може бути завершена системою при нестачі пам'яті. Тому постачальник повинен вміти відновлювати стан після перезапуску, зберігаючи ідентифікатори та кеш синхронізації у постійному сховищі.

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

NSFileProviderItem — це протокол, який описує окремий файл або теку в ієрархії постачальника. Кожний елемент має унікальний ідентифікатор, ім'я, тип (файл або тека), дати створення та модифікації, розмір та прапорці (доступний офлайн, лише читання).

ВластивістьТипОпис
itemIdentifierNSFileProviderItemIdentifierУнікальний ID елемента в системі постачальника
parentItemIdentifierNSFileProviderItemIdentifierID батьківської теки (корінь — .rootContainer)
filenameStringІм'я файлу з розширенням
typeIdentifierString (UTType)Уніфікований ідентифікатор типу для визначення типу вмісту
capabilitiesNSFileProviderItemCapabilitiesПрапорці: видалення, перейменування, додавання тегів

Протокол також підтримує розширені можливості через NSFileProviderItemProtocol: теги (кольорові мітки), іконки, версіонування та користувацькі дії. Для великих файлів реалізовано підтримку передачі, що підновлюються, через 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) та може опційно додати шифрування диска для кешованих файлів. Автентифікація користувача виконується через окремий компонент FileProviderUI, який працює поза пісочницею розширення для безпечного введення облікових даних.

Ключове обмеження: розширення не може виконувати довільний код — воно обробляє лише запити через NSFileProviderManager. Будь-яка логіка, що виходить за межі файлових операцій, повинна бути реалізована в основній програмі та викликатися через групи програм або XPC сервіси.

Часті запитання

Що таке 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 може працювати як незалежний процес без запущеної основної програми. Це безголовне розширення, яке 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також