UIDocumentPickerViewController — що це, робота з документами iOS

Автор: IT Sectr Опубліковано: 2026-07-11 Час читання: 6 хв

UIDocumentPickerViewController — це системний контролер iOS для вибору документів із файлової системи, iCloud Drive та сторонніх хмарних сховищ. Контролер надає єдиний інтерфейс відкриття та імпорту файлів будь-яких типів: зображень, PDF, текстів та аудіо. За даними Apple Developer Documentation (2025), UIDocumentPickerViewController підтримує режими import та export і повертає вибрані файли у вигляді URL-посилань через делегата.

Головне

  • UIDocumentPickerViewController — системний пікер документів у iOS для вибору файлів із будь-якого джерела.
  • Import mode копіює файл у пісочницю застосунку, export mode надає URL для читання.
  • UTI фільтри обмежують типи документів, що відображаються: PDF, зображення, текст та інші.
  • UIDocumentPickerDelegate обробляє результат вибору та помилки доступу до файлів.
  • Multiple selection підтримується через прапорець allowsMultipleSelection для вибору кількох файлів.

Що таке UIDocumentPickerViewController?

UIDocumentPickerViewController — це контролер UIKit, що надає системний інтерфейс для вибору документів. Він входить у фреймворк UIKit та доступний починаючи з iOS 8. Контролер відображає браузер файлів, який включає локальне сховище, iCloud Drive та зареєстровані сторонні хмарні сервіси.

Контролер працює асинхронно: після виклику present користувач бачить системний діалог, вибирає файл, і результат повертається через делегата. Застосунок не потребує спеціальних дозволів для доступу до вибраного файлу — системний пікер автоматично надає тимчасовий доступ до URI.

UIDocumentPickerViewController підтримує iPad через UIPopoverPresentationController та адаптивний інтерфейс для iPhone. Починаючи з iOS 14, контролер отримав оновлений дизайн та підтримку sidebar-навігації в iPadOS.

Режими роботи: import та export

UIDocumentPickerViewController працює у двох основних режимах, кожен з яких визначає, як застосунок отримує доступ до файлу. Режим задається через параметр forOpeningContentTypes або forExporting залежно від завдання.

Import mode (forOpeningContentTypes) копіює вибраний файл у пісочницю застосунку. Застосунок отримує URL на власну копію файлу, доступну тільки йому. Це безпечний режим: файл іншого застосунку не змінюється, а копія повністю контролюється поточним застосунком.

Export mode (forExporting) надає URL на оригінальний файл без копіювання. Застосунок може читати файл за посиланням, але зміни не зберігаються. Цей режим використовується, коли потрібно передати файл іншому застосунку або надіслати поштою. Для запису змін використовується режим open з scoped security-scoped URL.

Налаштування пікера та фільтрація за UTI

UTI (Uniform Type Identifier) — це система ідентифікації типів контенту в екосистемі Apple. UIDocumentPickerViewController фільтрує файли, що відображаються, за масивом UTI, переданим через forOpeningContentTypes. Якщо UTI не вказано, пікер показує всі типи файлів.

  • PDF — com.adobe.pdf. Пікер показує лише PDF-документи.
  • Зображення — public.image. Включає JPEG, PNG, HEIC та інші формати.
  • Текст — public.plain-text. Відображає .txt, .csv та інші текстові файли.
  • Аудіо — public.audio. Включає MP3, AAC, WAV та Lossless формати.
  • Відео — public.movie. Показує MP4, MOV, AVI та інші відеоформати.

Для вибору кількох типів передається масив [UTType.pdf, UTType.image]. Починаючи з iOS 14, Apple рекомендує використовувати UTType замість рядкових констант. UIDocumentPickerViewController автоматично оновлює список типів, що відображаються, при зміні вибраного провайдера.

Приклад коду: вибір документа на Swift

Реалізація UIDocumentPickerViewController на Swift мінімальна: створити екземпляр контролера з UTI-типами, встановити делегата та викликати present. Після вибору файлу делегат отримує масив URL у методі didPickDocumentsAt. Кожен URL — це security-scoped посилання, що потребує виклику startAccessingSecurityScopedResource.

swift
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
}

Security-scoped ресурси

Security-scoped URL потребує виклику startAccessingSecurityScopedResource перед читанням. Цей метод повідомляє системі, що застосунок отримує тимчасовий доступ до файлу за межами пісочниці. Після завершення роботи обов’язково викликайте stopAccessingSecurityScopedResource, інакше система може заблокувати доступ.

UIDocumentPickerDelegate та обробка результатів

UIDocumentPickerDelegate отримує результати вибору файлу через два методи: didPickDocumentsAt при успіху та didPickDocumentsAt при скасуванні. iOS автоматично викликає метод скасування, якщо користувач закрив пікер без вибору.

Обробка помилок включає перевірку доступності URL. Якщо користувач вибрав файл з iCloud Drive, але пристрій офлайн, URL може бути недоступний. Рекомендується перевіряти FileManager.default.isReadableFile перед читанням та показувати користувачеві зрозуміле повідомлення про помилку.

Для iOS 14+ доступний новий метод documentPicker:didPickDocumentsAt з масивом URL. Старий метод didPickDocumentAt (одинарний) deprecated. Завжди обробляйте масив, навіть якщо allowsMultipleSelection вимкнено — Apple рекомендує використовувати єдиний обробник.

UIDocumentPickerViewController на iPad

iPad потребує спеціальної конфігурації UIDocumentPickerViewController. На iPad пікер відображається як popover, і йому необхідно вказати sourceView для коректного позиціонування. Без sourceView контролер може впасти з exception на iPadOS.

Для popover використовується властивість popoverPresentationController. Вкажіть sourceView та sourceRect для прив’язки до кнопки або комірки таблиці. На iPhone цей код не впливає — iOS автоматично показує пікер на весь екран. Починаючи з iPadOS 16, контролер підтримує sidebar та split view для покращеної навігації.

Адаптивний дизайн UIDocumentPickerViewController автоматично перемикається між full-screen (iPhone) та popover (iPad). Розробнику не потрібно реалізовувати окремі контролери для різних пристроїв — достатньо коректно налаштувати popoverPresentationController для iPad.

Поширені запитання

Що таке UIDocumentPickerViewController у iOS?

UIDocumentPickerViewController — це системний контролер UIKit для вибору документів з iCloud Drive, локального сховища та сторонніх хмарних сервісів. Контролер повертає URL вибраного файлу через делегата.

Як вибрати PDF через UIDocumentPickerViewController?

Створіть контролер з forOpeningContentTypes: [.pdf]. Це обмежить відображення лише PDF-файлами. Встановіть делегата та викличте present для відображення системного пікера.

Чим відрізняється import mode від export mode?

Import mode копіює файл у пісочницю застосунку — зміни не впливають на оригінал. Export mode надає URL на оригінальний файл лише для читання без копіювання.

Що таке security-scoped URL у iOS?

Security-scoped URL — це посилання на файл за межами пісочниці застосунку. Перед читанням викличте startAccessingSecurityScopedResource, після завершення — stopAccessingSecurityScopedResource.

Як налаштувати UIDocumentPickerViewController для iPad?

Налаштуйте popoverPresentationController з sourceView та sourceRect. Без цього на iPad контролер може викликати exception. На iPhone налаштування popover ігноруються — пікер відображається на весь екран.

Підсумки

  • UIDocumentPickerViewController — системний контролер iOS для вибору документів, доступний з iOS 8.
  • Import mode копіює файл у пісочницю застосунку, export mode надає доступ лише для читання до оригіналу.
  • UTI фільтрація обмежує типи файлів: PDF, зображення, текст, аудіо, відео та інші.
  • UIDocumentPickerDelegate обробляє результат вибору в методі didPickDocumentsAt з масивом URL.
  • Security-scoped URL потребує виклику startAccessingSecurityScopedResource перед читанням файлу.
  • iPad конфігурація включає налаштування popoverPresentationController з sourceView для коректного відображення.
  • iOS 14+ додав оновлений дизайн, sidebar та підтримку UTType замість рядкових UTI.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також