UIDocumentPickerViewController — fayl tizimidan, iCloud Drive va uchinchi tomon bulutli saqlash joylaridan hujjatlarni tanlash uchun iOS tizim boshqaruvchisi. Boshqaruvchi istalgan turdagi fayllarni ochish va import qilish uchun yagona interfeysni taqdim etadi: tasvirlar, PDF, matnlar va audio. Apple Developer Documentation (2025) ma'lumotiga ko'ra, UIDocumentPickerViewController import va export rejimlarini qo'llab-quvvatlaydi va tanlangan fayllarni URL shaklida delegat orqali qaytaradi.
Asosiy fikrlar
UIDocumentPickerViewController — hujjatlarni tanlash uchun tizim interfeysini taqdim etuvchi UIKit boshqaruvchisidir. U UIKit frameworkiga kiradi va iOS 8 dan boshlab mavjud. Boshqaruvchi mahalliy saqlash, iCloud Drive va ro'yxatdan o'tgan uchinchi tomon bulut xizmatlarini o'z ichiga olgan fayl brauzerini ko'rsatadi.
Boshqaruvchi asinxron ishlaydi: present chaqiruvidan so'ng foydalanuvchi tizim dialogini ko'radi, faylni tanlaydi va natija delegat orqali qaytariladi. Ilova tanlangan faylga kirish uchun maxsus ruxsat talab qilmaydi — tizim pikeri avtomatik ravishda URI ga vaqtinchalik kirishni ta'minlaydi.
UIDocumentPickerViewController iPad ni UIPopoverPresentationController orqali va iPhone uchun adaptiv interfeysni qo'llab-quvvatlaydi. iOS 14 dan boshlab boshqaruvchi yangilangan dizayn va iPadOS da sidebar navigatsiya qo'llab-quvvatlashini oldi.
UIDocumentPickerViewController ikkita asosiy rejimda ishlaydi, ularning har biri ilova faylga qanday kirishini belgilaydi. Rejim vazifaga qarab forOpeningContentTypes yoki forExporting parametri orqali o'rnatiladi.
Import rejimi (forOpeningContentTypes) tanlangan faylni ilova sandboxiga nusxalaydi. Ilova faylning faqat o'ziga tegishli nusxasiga URL oladi. Bu xavfsiz rejim: boshqa ilovaning fayli o'zgartirilmaydi va nusxa joriy ilova tomonidan to'liq boshqariladi.
Export rejimi (forExporting) nusxalamasdan asl faylga URL taqdim etadi. Ilova faylni link orqali o'qishi mumkin, ammo o'zgarishlar orqaga yozilmaydi. Bu rejim faylni boshqa ilovaga uzatish yoki pochta orqali yuborish kerak bo'lganda ishlatiladi. O'zgarishlarni yozish uchun security-scoped URL bilan open rejimi ishlatiladi.
UTI (Uniform Type Identifier) — Apple ekotizimida kontent turlarini identifikatsiya qilish tizimidir. UIDocumentPickerViewController ko'rsatilgan fayllarni forOpeningContentTypes orqali uzatilgan UTI massiviga ko'ra filtrlaydi. UTI ko'rsatilmagan bo'lsa, picker barcha fayl turlarini ko'rsatadi.
Bir nechta turni tanlash uchun [UTType.pdf, UTType.image] massivi uzatiladi. iOS 14 dan boshlab Apple satr konstantalari o'rniga UTType dan foydalanishni tavsiya qiladi. UIDocumentPickerViewController tanlangan provayder o'zgarganda ko'rsatiladigan turlar ro'yxatini avtomatik yangilaydi.
Implementatsiya Swift da UIDocumentPickerViewController minimal: UTI turlari bilan boshqaruvchi namunasini yarating, delegatni o'rnating va present ni chaqiring. Fayl tanlangandan so'ng delegat didPickDocumentsAt metodida URL massivini oladi. Har bir URL startAccessingSecurityScopedResource chaqiruvini talab qiladigan security-scoped linkdir.
let picker = UIDocumentPickerViewController(
forOpeningContentTypes: [.pdf, .image],
asCopy: true
)
picker.delegate = self
picker.allowsMultipleSelection = false
present(picker, animated: true)
// MARK: - UIDocumentPickerDelegate
func documentPicker(
_ controller: UIDocumentPickerViewController,
didPickDocumentsAt urls: [URL]
) {
guard let url = urls.first else { return }
url.startAccessingSecurityScopedResource()
defer { url.stopAccessingSecurityScopedResource() }
// faylni url dan o'qish
}
Security-scoped URL o'qishdan oldin startAccessingSecurityScopedResource chaqiruvini talab qiladi. Bu metod tizimga ilova sandboxdan tashqaridagi faylga vaqtinchalik kirish olayotganini bildiradi. Ish tugagandan so'ng albatta stopAccessingSecurityScopedResource ni chaqiring, aks holda tizim kirishni bloklashi mumkin.
UIDocumentPickerDelegate fayl tanlash natijalarini ikki metod orqali oladi: didPickDocumentsAt muvaffaqiyat holatida va didPickDocumentsAt bekor qilinganda. iOS foydalanuvchi pickerni tanlovsiz yopgan bo'lsa, avtomatik ravishda bekor qilish metodini chaqiradi.
Xatolarni boshqarish URL mavjudligini tekshirishni o'z ichiga oladi. Agar foydalanuvchi iCloud Drive dan fayl tanlagan bo'lsa, lekin qurilma oflayn bo'lsa, URL mavjud bo'lmasligi mumkin. O'qishdan oldin FileManager.default.isReadableFile ni tekshirish va foydalanuvchiga tushunarli xato xabarini ko'rsatish tavsiya etiladi.
iOS 14+ uchun URL massivi bilan yangi documentPicker:didPickDocumentsAt metodi mavjud. Eski didPickDocumentAt (yakka) metodi deprecated. allowsMultipleSelection o'chirilgan bo'lsa ham har doim massivni boshqaring — Apple yagona handlerdan foydalanishni tavsiya qiladi.
iPad UIDocumentPickerViewController uchun maxsus konfiguratsiyani talab qiladi. iPad da picker popover sifatida ko'rsatiladi va to'g'ri joylashtirish uchun sourceView ko'rsatilishi kerak. SourceView bo'lmasa, boshqaruvchi iPadOS da exception bilan ishdan chiqishi mumkin.
Popover uchun popoverPresentationController xususiyatidan foydalaniladi. Tugma yoki jadval katakchasiga bog'lash uchun sourceView va sourceRect ni belgilang. iPhone da bu kod ta'sir qilmaydi — iOS avtomatik pickerni to'liq ekranda ko'rsatadi. iPadOS 16 dan boshlab boshqaruvchi yaxshilangan navigatsiya uchun sidebar va split view ni qo'llab-quvvatlaydi.
UIDocumentPickerViewController ning adaptiv dizayni avtomatik ravishda full-screen (iPhone) va popover (iPad) o'rtasida o'tadi. Dasturchi turli qurilmalar uchun alohida boshqaruvchilarni amalga oshirishi shart emas — iPad uchun popoverPresentationController ni to'g'ri sozlash kifoya.
Tez-tez beriladigan savollar
UIDocumentPickerViewController — iCloud Drive, mahalliy saqlash va uchinchi tomon bulut xizmatlaridan hujjatlarni tanlash uchun tizim UIKit boshqaruvchisidir. Boshqaruvchi tanlangan faylning URL sini delegat orqali qaytaradi.
forOpeningContentTypes: [.pdf] bilan boshqaruvchi yarating. Bu ko'rsatiladigan fayllarni faqat PDF lar bilan cheklaydi. Delegatni o'rnating va tizim pickerini ko'rsatish uchun present ni chaqiring.
Import rejimi faylni ilova sandboxiga nusxalaydi — o'zgarishlar asl nusxaga ta'sir qilmaydi. Export rejimi nusxalamasdan asl faylga faqat o'qish uchun URL taqdim etadi.
Security-scoped URL — ilova sandboxidan tashqaridagi faylga havola. O'qishdan oldin startAccessingSecurityScopedResource ni, tugagandan so'ng stopAccessingSecurityScopedResource ni chaqiring.
popoverPresentationController ni sourceView va sourceRect bilan konfiguratsiya qiling. Busiz iPad da boshqaruvchi exception keltirib chiqarishi mumkin. iPhone da popover sozlamalari e'tiborga olinmaydi — picker to'liq ekranda ko'rsatiladi.
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.