File Provider Extension — bu iOS mexanizmi bo‘lib, bulutli xizmatlar va ilovalarga o‘z fayllarini tizimli Fayllar ilovasida ko‘rsatishga imkon beradi. Foydalanuvchi tashqi hujjatlarni yagona interfeysda mahalliy fayllar bilan birga ko‘radi va ularni qo‘shimcha dastur o‘rnatmasdan ochishi, ko‘chirishi va tahrirlashi mumkin. Apple Developer Documentation (2025) ma’lumotiga ko‘ra, NSFileProviderManager inkremental sinxronlashni ta’minlaydi va fayl versiyalarini qurilmadagi o‘z kesh orqali boshqaradi.
Asosiy ma’lumotlar
File Provider Extension — bu Fayllar ilovasiga yangi hujjat manbalarini qo‘shadigan ilova kengaytmasi. Bulutli xizmat — Google Drive, Dropbox, OneDrive yoki korporativ ombor — o‘z fayl strukturasini to‘g‘ridan-to‘g‘ri tizim interfeysida, alohida ilova ochmasdan ko‘rsatishi mumkin.
Foydalanuvchi uzoqdagi fayllar bilan xuddi qurilmada saqlanganlar kabi ishlaydi: papkalar mazmunini ko‘rib chiqadi, hujjatlarni sudrab oladi, ularni istalgan mos ilovada ochadi va o‘zgarishlarni bulutga qayta saqlaydi. WWDC 2025 ma’lumotiga ko‘ra, File Provider Extension 1000 tagacha bir vaqtda sinxronlash operatsiyasini qo‘llab-quvvatlaydi va dinamik prioritet boshqaruvi orqali tarmoq tezligiga moslashadi.
Kengaytma fonda ishlaydi — iOS sinxronlash kerak bo‘lganda uni ishga tushiradi va resurslar yetishmasa majburiy to‘xtatishi mumkin. Barcha operatsiyalar idempotent bo‘lishi va nazorat nuqtasidan qayta boshlashni qo‘llab-quvvatlashi kerak.
File Provider Extension uch darajali arxitekturaga ega: tizim jarayoni Files.app, provayder-kengaytma va uzoq server. Tizim kengaytmadan ma’lumot so‘raydi, kengaytma so‘rovlarni bulut xizmatining API chaqiruvlariga aylantiradi va natijalarni NSFileProviderItem orqali qaytaradi.
Har bir yangilanishda to‘liq fayl strukturasini yuklash o‘rniga, kengaytma faqat o‘zgartirilgan elementlarni uzatadi. NSFileProviderManager inkremental yangilanishlarni yuborish uchun metodlarni taqdim etadi — “A fayli qo‘shildi”, “B fayli o‘zgartirildi”, “C papkasi o‘chirildi”. Bu trafikni keskin kamaytiradi va o‘zgarishlarni ko‘rsatishni tezlashtiradi.
Apple Engineering ma’lumotiga ko‘ra, inkremental sinxronlash uzatiladigan ma’lumot hajmini to‘liq qayta yuklashga nisbatan 60–80% kamaytiradi. Sinxronlash holatini belgilash va takroriy so‘rovlarni minimallashtirish uchun NSFileProviderSyncAnchor dan foydalanish tavsiya etiladi.
File Provider Extension oflayn kirish uchun fayllarni mahalliy keshlashi mumkin. Fayl ochilganda, tizim kengaytmaga so‘rov yuboradi, kengaytma qaror qiladi — kontentni serverdan yuklab olish yoki allaqachon keshlangan versiyani qaytarish. NSFileProviderItem isDownloaded va isUploaded maydonlari orqali keshlash darajasini ko‘rsatadi.
Apple fayl hajmiga qarab keshlash siyosatini sozlashni tavsiya qiladi: rasmlar va hujjatlar uchun — to‘liq keshlash, video uchun — faqat oldindan ko‘rish, arxivlar uchun — foydalanuvchi so‘roviga ko‘ra.
NSFileProviderManager — kengaytmaning tizim bilan aloqa qiladigan markaziy klassi. U tizimni o‘zgarishlar haqida xabardor qilish, yangi elementlar yaratish, yuklab olishlarni boshqarish va xatolarni qayta ishlash uchun metodlarni taqdim etadi. Har bir NSFileProviderManager nusxasi muayyan domenga bog‘langan.
signalEnumerator(for:) — tizimga papka mazmuni o‘zgarganligi va ro‘yxatni qayta o‘qish kerakligi haqida xabar beradi. reimportItem(_:) — serverdagi o‘zgarishdan keyin ko‘rsatilgan elementni qayta import qiladi. registerURLSessionTask:forItemWithIdentifier: — fonda yuklab olishni ma’lum bir fayl bilan bog‘lab, taraqqiyotni kuzatadi.
Muhim cheklov: NSFileProviderManager faqat kengaytma jarayonida ishlaydi. Asosiy ilova fayl strukturasini boshqarish uchun uning metodlarini to‘g‘ridan-to‘g‘ri chaqira olmaydi — sinxronlash kengaytma yoki tizim tomonidan boshlanishi kerak.
let manager = NSFileProviderManager.default()
manager.signalEnumerator(for: workingSet) { error in
if let error = error {
print("Signal failed: \(error)")
}
}
Fayllarni fonda yuklab olish uchun NSFileProviderManager URLSession dan fon konfiguratsiyasi bilan foydalanadi. Kengaytma yuklab olish topshirig‘ini yaratadi va uni menejerda ro‘yxatdan o‘tkazadi, u esa uni tegishli elementga bog‘laydi. Tizim avtomatik ravishda foydalanuvchi faolligiga qarab yuklab olish taraqqiyoti va prioritetlarini kuzatadi.
File Provider Extension yaratish Xcode-da File Provider Extension andozasi bilan yangi target qo‘shish bilan boshlanadi. Xcode avtomatik ravishda NSFileProviderExtension dan meros oladigan sinf va elementlar bilan ishlash uchun minimal metodlar to‘plamini yaratadi.
Fayl strukturasining har bir elementi — fayl yoki papka — NSFileProviderItem protokolini amalga oshiradi. Protokol majburiy maydonlarni belgilaydi: itemIdentifier, parentItemIdentifier, filename, typeIdentifier va capabilities. Qo‘shimcha ravishda hajm, o‘zgartirish sanasi va yuklab olish bayroqlarini ko‘rsatish mumkin.
struct CloudItem: NSFileProviderItem {
let itemIdentifier: NSFileProviderItemIdentifier
let parentItemIdentifier: NSFileProviderItemIdentifier
let filename: String
let typeIdentifier: String
let capabilities: NSFileProviderItemCapabilities
let documentSize: NSNumber?
}
enumerator(for:) metodi NSFileProviderEnumerator-ni amalga oshiradigan obyektni qaytaradi, u tizim so‘roviga ko‘ra papka mazmunini taqdim etadi. iOS ildiz papka, pastki papkalar va ishchi to‘plam uchun sanab o‘tishni so‘rashi mumkin — oxirgisi so‘nggi yoki sevimli fayllarni ko‘rsatish uchun ishlatiladi.
Apple bir vaqtning o‘zida minglab elementlarni yuklamaslik uchun NSFileProviderPage orqali sahifalash bilan asinxron sanab o‘tish metodlaridan foydalanishni tavsiya qiladi. 50–100 elementlik sahifalar unumdorlik uchun maqbuldir.
NSFileProviderDomain — bir kengaytma ichida turli hisoblarni ajratish mexanizmi. Agar foydalanuvchi ilovada bir nechta hisobni avtorizatsiya qilgan bo‘lsa — shaxsiy va korporativ Google Drive — har bir hisob alohida domen yaratadi, u Fayllar ilovasida alohida manba sifatida ko‘rsatiladi.
Har bir domen noyob identifikatorga, ko‘rinadigan nomga va holatga ega. Foydalanuvchi boshqa hisoblarga ta’sir qilmasdan domenlarni vaqtincha o‘chirishi yoki o‘chirib tashlashi mumkin. Tizim har bir faol domen uchun alohida kengaytma jarayonini ishga tushiradi, bu hisoblar o‘rtasida ma’lumot izolyatsiyasini ta’minlaydi.
Apple ma’lumotiga ko‘ra, bir kengaytma uchun 10 dan ortiq domen yaratmaslik tavsiya etiladi ‘‘ haddan tashqari ko‘p son Fayllar ilovasining ishga tushishini sekinlashtiradi va xotira sarfini oshiradi. Ko‘p sonli hisoblarga ega xizmatlar uchun ularni kengaytma ichida profil almashtirish bilan bitta domenga yig‘ish yaxshiroqdir.
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 beriladigan savollar
Har qanday xizmat o‘z kengaytmasini amalga oshirishi mumkin. Qo‘llab-quvvatlovchilar orasida Google Drive, Dropbox, Microsoft OneDrive, Box, iCloud Drive va Nextcloud bor. Kengaytma har qanday REST yoki WebDAV ombori uchun universaldir.
Kengaytma tizimdan mahalliy fayl o‘zgarishlari haqida bildirishnomalar oladi va ularni NSFileProviderManager orqali serverga yuboradi. Serverdan teskari sinxronlash uchun NSFileProviderSyncAnchor — so‘nggi yangilanish markeri ishlatiladi.
Ha, agar fayllar mahalliy keshlangan bo‘lsa. NSFileProviderItem yuklab olingan fayllarni isDownloaded bayrog‘i bilan belgilaydi. Oflayn rejimda qilingan o‘zgarishlar ulanish tiklangandan keyin avtomatik sinxronlanadi.
To‘g‘ridan-to‘g‘ri cheklovlar yo‘q — hajm server imkoniyatlari bilan belgilanadi. Apple fayllarni avtomatik ravishda 100 MB gacha keshlashni, kattaroq fayllar uchun esa taraqqiyot chizig‘i bilan oqimli yuklab olishdan foydalanishni tavsiya qiladi.
UIDocumentPickerViewController modal oyna orqali bir martalik fayl tanlashni ta’minlaydi. File Provider Extension esa Fayllar ilovasiga fon sinxronlash va uzoq muddatli kirish bilan doimiy hujjat manbasini o‘rnatadi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.