File Provider Extension — bu iOS mexanizmidir ki, bulud xidmətlərinə və tətbiqlərə öz fayllarını sistem Fayllar tətbiqində göstərməyə imkan verir. İstifadəçi xarici sənədləri vahid interfeysdə lokal fayllarla bərabər görür və onları əlavə proqram quraşdırmadan aça, köçürə və redaktə edə bilər. Apple Developer Documentation (2025) məlumatına görə, NSFileProviderManager artımlı sinxronizasiyanı təmin edir və fayl versiyalarını cihazdakı öz keş vasitəsilə idarə edir.
Əsas məqamlar
File Provider Extension — bu Fayllar tətbiqinə yeni sənəd mənbələri əlavə edən tətbiq genişlənməsidir. Bulud xidməti — Google Drive, Dropbox, OneDrive və ya korporativ anbar — öz fayl strukturunu birbaşa sistem interfeysində, ayrı tətbiq açmadan göstərə bilər.
İstifadəçi uzaq fayllarla cihazda saxlanılanlarla eyni şəkildə işləyir: qovluqların məzmununa baxır, sənədləri sürükləyir, onları istənilən uyğun tətbiqdə açır və dəyişiklikləri buluda geri qeyd edir. WWDC 2025 məlumatına görə, File Provider Extension 1000-ə qədər eyni vaxtda sinxronizasiya əməliyyatını dəstəkləyir və dinamik prioritet idarəetməsi vasitəsilə şəbəkə sürətinə uyğunlaşır.
Genişlənmə fonda işləyir — iOS sinxronizasiya ehtiyacı olduqda onu işə salır və resurs çatışmazlığında məcburi dayandıra bilər. Bütün əməliyyatlar idempotent olmalı və yoxlama nöqtəsindən bərpanı dəstəkləməlidir.
File Provider Extension üçsəviyyəli arxitekturaya malikdir: sistem prosesi Files.app, provayder-genişlənmə və uzaq server. Sistem genişlənmədən məlumat tələb edir, genişlənmə sorğuları bulud xidmətinin API çağırışlarına çevirir və nəticələri NSFileProviderItem vasitəsilə qaytarır.
Hər yeniləmədə tam fayl strukturunu yükləmək əvəzinə, genişlənmə yalnız dəyişdirilmiş elementləri ötürür. NSFileProviderManager artımlı yeniləmələri göndərmək üçün metodlar təqdim edir — “A faylı əlavə edildi”, “B faylı dəyişdirildi”, “C qovluğu silindi”. Bu trafiki kəskin şəkildə azaldır və dəyişikliklərin göstərilməsini sürətləndirir.
Apple Engineering məlumatına görə, artımlı sinxronizasiya ötürülən məlumatın həcmini tam yenidən yükləmə ilə müqayisədə 60–80% azaldır. Sinxronizasiya vəziyyətini qeyd etmək və təkrarlanan sorğuları minimuma endirmək üçün NSFileProviderSyncAnchor istifadə etmək tövsiyə olunur.
File Provider Extension oflayn çıxış üçün faylları lokal olaraq keşləyə bilər. Fayl açılarkən sistem genişlənməyə sorğu göndərir, genişlənmə qərar verir — məzmunu serverdən endirsin və ya artıq keşlənmiş versiyanı qaytarsın. NSFileProviderItem isDownloaded və isUploaded sahələri vasitəsilə keşləmə səviyyəsini göstərir.
Apple fayl ölçüsündən asılı olaraq keşləmə siyasətini konfiqurasiya etməyi tövsiyə edir: şəkillər və sənədlər üçün — tam keşləmə, video üçün — yalnız önbaxış, arxivlər üçün — istifadəçinin tələbi ilə.
NSFileProviderManager — genişlənmənin sistemlə çağrışdığı mərkəzi sinifdir. O, sistemi dəyişikliklər barədə xəbərdar etmək, yeni elementlər yaratmaq, yükləmələri idarə etmək və xətaları emal etmək üçün metodlar təqdim edir. Hər bir NSFileProviderManager nüsxəsi müəyyən bir domenə bağlıdır.
signalEnumerator(for:) — sistemə qovluğun məzmununun dəyişdiyini və siyahının yenidən oxunmalı olduğunu bildirir. reimportItem(_:) — serverdə dəyişiklikdən sonra göstərilən elementi yenidən idxal edir. registerURLSessionTask:forItemWithIdentifier: — fonda yükləməni müəyyən faylla əlaqələndirir və tərəqqini izləyir.
Ƈhəmiyyətli məhdudiyyət: NSFileProviderManager yalnız genişlənmə prosesində işləyir. Əsas tətbiq fayl strukturunu idarə etmək üçün onun metodlarını birbaşa çağıra bilməz — sinxronizasiya genişlənmə və ya sistem tərəfindən başladılmalıdır.
let manager = NSFileProviderManager.default()
manager.signalEnumerator(for: workingSet) { error in
if let error = error {
print("Signal failed: \(error)")
}
}
Faylları fonda yükləmək üçün NSFileProviderManager URLSession-dən fon konfiqurasiyası ilə istifadə edir. Genişlənmə yükləmə tapşırığı yaradır və onu menecerdə qeydiyyatdan keçirir, o da onu müvafiq elementə bağlayır. Sistem avtomatik olaraq istifadəçi fəallığından asılı olaraq yükləmə tərəqqisini və prioritetlərini izləyir.
File Provider Extension yaratmaq Xcode-da File Provider Extension şablonu ilə yeni target əlavə etməklə başlayır. Xcode avtomatik olaraq NSFileProviderExtension-dən miras alan sinif və elementlərlə işləmək üçün minimal metod dəsti yaradır.
Fayl strukturunun hər bir elementi — fayl və ya qovluq — NSFileProviderItem protokolunu tətbiq edir. Protokol məcburi sahələri müəyyənləşdirir: itemIdentifier, parentItemIdentifier, filename, typeIdentifier və capabilities. Əlavə olaraq ölçünü, dəyişdirilmə tarixini və yükləmə bayraqlarını göstərmək olar.
struct CloudItem: NSFileProviderItem {
let itemIdentifier: NSFileProviderItemIdentifier
let parentItemIdentifier: NSFileProviderItemIdentifier
let filename: String
let typeIdentifier: String
let capabilities: NSFileProviderItemCapabilities
let documentSize: NSNumber?
}
enumerator(for:) metodu sistemin tələbi ilə qovluğun məzmununu təmin edən NSFileProviderEnumerator obyektini qaytarır. iOS kök qovluq, alt qovluqlar və iş dəsti üçün sadalama tələb edə bilər — sonuncu son və ya seçilmiş faylları göstərmək üçün istifadə olunur.
Apple eyni anda minlərlə elementi yükləməmək üçün NSFileProviderPage vasitəsilə səhifələmə ilə asinxron sadalama metodlarından istifadə etməyi tövsiyə edir. 50–100 elementlik səhifələr performans üçün optimaldır.
NSFileProviderDomain — bir genişlənmə daxilində müxtəlif hesabları ayırmaq mexanizmidir. İstifadəçi tətbiqdə bir neçə hesab autorizasiya edibsə — şəxsi və korporativ Google Drive — hər hesab ayrı domen yaradır, o da Fayllar tətbiqində ayrı mənbə kimi göstərilir.
Hər domenin unikal identifikatoru, göstərilən adı və vəziyyəti var. İstifadəçi digər hesablara təsir etmədən domenləri müvəqqəti olaraq söndürə və ya silə bilər. Sistem hər aktiv domen üçün ayrı genişlənmə prosesi işə salır ki, bu da hesablar arasında məlumat izolyasiyasını təmin edir.
Apple məlumatına görə, bir genişlənmə üçün 10-dan çox domen yaratmamaq tövsiyə olunur — həddindən çox say Fayllar tətbiqinin işə düşməsini lɘngidir və yaddaş istehlakını artırır. Çox sayda hesabı olan xidmətlər üçün onları genişlənmə daxilində profil dəyişdirmə ilə bir domenə yığmaq daha yaxşıdır.
let domain = NSFileProviderDomain(
identifier: "work",
displayName: "Corporate Drive"
)
NSFileProviderManager.add(domain) { error in
if let error = error {
print("Failed to add domain: \(error)")
}
}
Tez-tez verilən suallar
İstənilən xidmət öz genişlənməsini həyata keçirə bilər. Dəstəkləyənlər arasında Google Drive, Dropbox, Microsoft OneDrive, Box, iCloud Drive və Nextcloud var. Genişlənmə istənilən REST və ya WebDAV anbarı üçün universaldır.
Genişlənmə sistemdən lokal fayl dəyişiklikləri barədə bildirişlər alır və onları NSFileProviderManager vasitəsilə serverə göndərir. Serverdən əks sinxronizasiya üçün NSFileProviderSyncAnchor — son yeniləmə markeri istifadə olunur.
Bəli, əgər fayllar lokal olaraq keşlənibsə. NSFileProviderItem endirilmiş faylları isDownloaded bayrağı ilə qeyd edir. Oflayn rejimdə edilən dəyişikliklər əlaqə bərpa olunduqda avtomatik sinxronizasiya olunur.
Birbaşa məhdudiyyət yoxdur — ölçü serverin imkanları ilə müəyyən olunur. Apple faylları avtomatik olaraq 100 MB-a qədər keşləməyi, daha böyük fayllar üçün isə tərəqqi zolağı ilə axın yükləmədən istifadə etməyi tövsiyə edir.
UIDocumentPickerViewController modal pəncərə vasitəsilə birdəfəlik fayl seçimi təmin edir. File Provider Extension isə Fayllar tətbiqinə fon sinxronizasiyası və uzunmüddətli girişlə daimi sənəd mənbəyi yerləşdirir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun