UIDocumentPickerViewController — یک کنترلر سیستمی iOS برای انتخاب اسناد از سیستم فایل، iCloud Drive و ذخیرهسازهای ابری شخص ثالث است. این کنترلر یک رابط یکپارچه برای باز کردن و وارد کردن فایلهای هر نوعی ارائه میدهد: تصاویر، PDF، متون و صدا. بر اساس Apple Developer Documentation (2025)، UIDocumentPickerViewController از حالتهای import و export پشتیبانی میکند و فایلهای انتخاب شده را به صورت URL از طریق delegate بازمیگرداند.
نکات کلیدی
UIDocumentPickerViewController — یک کنترلر UIKit است که رابط سیستمی برای انتخاب اسناد فراهم میکند. این کنترلر بخشی از فریمورک UIKit است و از iOS 8 در دسترس میباشد. کنترلر یک مرورگر فایل را نمایش میدهد که شامل ذخیرهساز محلی، iCloud Drive و سرویسهای ابری شخص ثالث ثبت شده است.
کنترلر به صورت ناهمزمان کار میکند: پس از فراخوانی present، کاربر دیالوگ سیستمی را میبیند، فایل را انتخاب میکند و نتیجه از طریق delegate بازگردانده میشود. برنامه برای دسترسی به فایل انتخاب شده نیاز به مجوز خاصی ندارد — پیکر سیستمی به طور خودکار دسترسی موقت به URI را فراهم میکند.
UIDocumentPickerViewController از iPad از طریق UIPopoverPresentationController و رابط تطبیقی برای iPhone پشتیبانی میکند. از iOS 14، کنترلر طراحی بهروز شده و پشتیبانی از ناوبری sidebar در iPadOS دریافت کرده است.
UIDocumentPickerViewController در دو حالت اصلی کار میکند که هر کدام مشخص میکند برنامه چگونه به فایل دسترسی پیدا میکند. حالت از طریق پارامتر forOpeningContentTypes یا forExporting بسته به وظیفه تنظیم میشود.
حالت Import (forOpeningContentTypes) فایل انتخاب شده را به sandbox برنامه کپی میکند. برنامه URL مربوط به کپی اختصاصی خود از فایل را دریافت میکند که فقط برای آن قابل دسترسی است. این یک حالت امن است: فایل برنامه دیگر تغییر نمیکند و کپی کاملاً توسط برنامه جاری کنترل میشود.
حالت Export (forExporting) بدون کپی کردن، URL فایل اصلی را فراهم میکند. برنامه میتواند فایل را از طریق لینک بخواند، اما تغییرات ذخیره نمیشوند. این حالت زمانی استفاده میشود که نیاز به ارسال فایل به برنامه دیگر یا ارسال آن از طریق ایمیل باشد. برای نوشتن تغییرات از حالت open با URL امنیتی محدودهدار (security-scoped) استفاده میشود.
UTI (Uniform Type Identifier) — یک سیستم شناسایی انواع محتوا در اکوسیستم Apple است. UIDocumentPickerViewController فایلهای نمایش داده شده را بر اساس آرایه UTI ارسال شده از طریق forOpeningContentTypes فیلتر میکند. اگر UTI مشخص نشود، پیکر همه انواع فایل را نشان میدهد.
برای انتخاب چند نوع، آرایه [UTType.pdf, UTType.image] ارسال میشود. از iOS 14، Apple استفاده از UTType را به جای ثابتهای رشتای توصیه میکند. UIDocumentPickerViewController هنگام تغییر ارائهدهنده انتخاب شده، لیست انواع نمایش داده شده را به طور خودکار بهروز میکند.
پیادهسازی UIDocumentPickerViewController در Swift حداقل است: یک نمونه از کنترلر با انواع UTI ایجاد کنید، delegate را تنظیم کنید و present را فراخوانی کنید. پس از انتخاب فایل، delegate یک آرایه از URLها را در متد didPickDocumentsAt دریافت میکند. هر URL یک لینک امنیتی محدودهدار (security-scoped) است که نیاز به فراخوانی startAccessingSecurityScopedResource دارد.
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() }
// خواندن فایل از url
}
URL امنیتی محدودهدار نیاز به فراخوانی startAccessingSecurityScopedResource قبل از خواندن دارد. این متد به سیستم اطلاع میدهد که برنامه به طور موقت به فایلی خارج از sandbox دسترسی پیدا میکند. پس از اتمام کار حتماً stopAccessingSecurityScopedResource را فراخوانی کنید، در غیر این صورت سیستم ممکن است دسترسی را مسدود کند.
UIDocumentPickerDelegate نتایج انتخاب فایل را از طریق دو متد دریافت میکند: didPickDocumentsAt در صورت موفقیت و didPickDocumentsAt در صورت لغو. iOS به طور خودکار متد لغو را فراخوانی میکند اگر کاربر پیکر را بدون انتخاب ببندد.
مدیریت خطا شامل بررسی در دسترس بودن URL است. اگر کاربر فایلی را از iCloud Drive انتخاب کرده باشد اما دستگاه آفلاین باشد، URL ممکن است در دسترس نباشد. توصیه میشود قبل از خواندن FileManager.default.isReadableFile را بررسی کرده و پیام خطای قابل فهمی به کاربر نشان دهید.
برای iOS 14+ متد جدید documentPicker:didPickDocumentsAt با آرایهای از URLها در دسترس است. متد قدیمی didPickDocumentAt (تکی) منسوخ شده است. همیشه آرایه را مدیریت کنید، حتی اگر allowsMultipleSelection غیرفعال باشد — Apple استفاده از یک handler یکپارچه را توصیه میکند.
iPad نیاز به پیکربندی ویژه UIDocumentPickerViewController دارد. در iPad، پیکر به صورت popover نمایش داده میشود و برای موقعیتیابی صحیح نیاز به تعیین sourceView دارد. بدون sourceView، کنترلر ممکن است در iPadOS با exception از کار بیفتد.
برای popover از ویژگی popoverPresentationController استفاده میشود. sourceView و sourceRect را برای اتصال به دکمه یا سلول جدول مشخص کنید. در iPhone این کد تأثیری ندارد — iOS به طور خودکار پیکر را در تمام صفحه نمایش میدهد. از iPadOS 16، کنترلر از sidebar و split view برای ناوبری بهبود یافته پشتیبانی میکند.
طراحی تطبیقی UIDocumentPickerViewController به طور خودکار بین full-screen (iPhone) و popover (iPad) جابجا میشود. توسعهدهنده نیازی به پیادهسازی کنترلرهای جداگانه برای دستگاههای مختلف ندارد — کافی است popoverPresentationController را برای iPad به درستی پیکربندی کند.
سوالات متداول
UIDocumentPickerViewController — یک کنترلر سیستم UIKit برای انتخاب اسناد از iCloud Drive، ذخیرهساز محلی و سرویسهای ابری شخص ثالث است. کنترلر URL فایل انتخاب شده را از طریق delegate بازمیگرداند.
کنترلری با forOpeningContentTypes: [.pdf] ایجاد کنید. این کار نمایش را فقط به فایلهای PDF محدود میکند. delegate را تنظیم کرده و برای نمایش پیکر سیستمی present را فراخوانی کنید.
حالت Import فایل را به sandbox برنامه کپی میکند — تغییرات روی نسخه اصلی تأثیر نمیگذارد. حالت Export بدون کپی کردن، URL فایل اصلی را فقط برای خواندن فراهم میکند.
URL امنیتی محدودهدار — لینکی به فایل خارج از sandbox برنامه است. قبل از خواندن startAccessingSecurityScopedResource و پس از اتمام stopAccessingSecurityScopedResource را فراخوانی کنید.
popoverPresentationController را با sourceView و sourceRect پیکربندی کنید. بدون این کار در iPad، کنترلر ممکن است exception ایجاد کند. در iPhone تنظیمات popover نادیده گرفته میشوند — پیکر در تمام صفحه نمایش داده میشود.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید