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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също