Photo Editing Extension: що це, можливості розширення для iOS

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

Photo Editing Extension — це механізм iOS, який дозволяє стороннім додаткам додавати інструменти редагування прямо в системний додаток Фото. На відміну від повноцінних редакторів, розширення не завантажує знімок в окремий додаток — користувач застосовує фільтри, коригує кольори або накладає ефекти, не виходячи зі стандартного інтерфейсу. За даними Apple Developer Documentation (2025), PhotoKit надає понад 40 API для роботи з ресурсами фотографій, включаючи PHAdjustmentData та PHContentEditingController.

Головне

  • Photo Editing Extension вбудовує інструменти редагування в стандартний додаток Фото на iOS без перемикання між програмами
  • Архітектура будується на протоколі PHContentEditingController, який керує відображенням інтерфейсу та отриманням вихідного зображення
  • Розширення використовує неруйнівне редагування — всі зміни зберігаються як AdjustmentData, а оригінал залишається недоторканим
  • Для роботи із зображенням розширення отримує PHContentEditingInput з повним файлом знімка та метаданими
  • PhotoKit надає доступ до ресурсів фотографій через PHAsset, PHAssetResource та PHImageManager

Що таке Photo Editing Extension в iOS

Photo Editing Extension — це тип розширення додатка в iOS, який впроваджує інструменти обробки зображень у стандартний інтерфейс додатка Фото. Користувач відкриває знімок, натискає кнопку «Правити» та вибирає потрібне розширення зі списку встановлених. Після редагування результат зберігається назад у бібліотеку, а вихідний файл залишається доступним для відкату.

Така архітектура вирішує ключову проблему користувацького досвіду: не потрібно перемикатися між додатками, експортувати та імпортувати зображення, стежити за версіями. За даними WWDC 2025, всі розширення працюють в ізольованому процесі з власною пісочницею та обмеженим часом виконання — до 30 секунд на операцію редагування.

Розширення не має доступу до довільних файлів у пам'яті пристрою — тільки до того знімка, який користувач явно передав через інтерфейс вибору. Це забезпечує безпеку користувацьких даних при використанні сторонніх інструментів.

PhotoKit: архітектура та ключові компоненти

PhotoKit — це фреймворк Apple для роботи з медіатекою пристрою, що з'явився в iOS 8. Він надає програмний доступ до ресурсів Фото, включаючи знімки, відео, альбоми та метадані. Для розширень редагування PhotoKit служить проміжним шаром між сховищем та інтерфейсом модифікації.

PHAsset та PHAssetResource

PHAsset представляє окремий медіаоб'єкт у бібліотеці — фотографію або відео. Через PHAsset можна отримати метадані: дату зйомки, тип файлу, розташування на карті та орієнтацію камери. PHAssetResource дає доступ до базових ресурсів — наприклад, до оригінального файлу знімка у форматі RAW або HEIC.

Для розширення редагування критично важливий PHContentEditingInput — об'єкт, який містить повний файл зображення (або відео), доступний для читання та обробки. Розширення отримує цей об'єкт у момент активації та використовує його як вихідний матеріал.

PHImageManager та кешування

PHImageManager керує завантаженням та кешуванням зображень. Для розширення редагування він не використовується безпосередньо — розширення отримує повний файл через PHContentEditingInput. Однак PHImageRequestOptions дозволяє налаштувати параметри запиту: розмір, тип доставки (синхронний або асинхронний) та формат результату.

За даними Apple, PHImageManager автоматично кешує мініатюри зображень в оперативній пам'яті, що прискорює повторне відображення прев'ю. Для розширення редагування рекомендується використовувати PHImageRequestOptionsDeliveryModeHighQualityFormat, щоб отримати найкращу якість знімка.

swift
let options = PHImageRequestOptions()
options.deliveryMode = .highQualityFormat
options.isSynchronous = true

PHImageManager.default().requestImage(
    for: asset,
    targetSize: .init(width: 1024, height: 1024),
    contentMode: .aspectFill,
    options: options
) { image, _ in
    // use image for display
}

Створення розширення: PHContentEditingController

Кожне Photo Editing Extension реалізує протокол PHContentEditingController — центральний елемент керування розширенням. Протокол визначає методи для відображення інтерфейсу, отримання вхідних даних та збереження результату.

Основні методи протоколу

beginContentEditing(with:) викликається при старті сесії редагування. Розширення отримує PHContentEditingInput та повинно відобразити інтерфейс із вихідним зображенням. finishContentEditing(completionHandler:) завершує редагування — розширення повертає PHContentEditingOutput з модифікованим файлом та AdjustmentData. cancelContentEditing() скасовує зміни без збереження.

Важливий нюанс: на момент виклику beginContentEditing розширення отримує доступ лише до однієї версії знімка — тієї, яку запросив користувач. Не можна звернутися до іншого знімка або альбому. Це обмеження пісочниці, введене Apple для безпеки.

swift
class PhotoEditingViewController: UIViewController {

    override func beginContentEditing(
        with input: PHContentEditingInput
    ) {
        guard let url = input.fullSizeImageURL else { return }
        let image = CIImage(contentsOf: url)
        displayImage.image = UIImage(ciImage: image)
    }
}

Архітектура розділення

PHContentEditingController відокремлює інтерфейс редагування від логіки збереження. Основний процес iOS викликає beginContentEditing, розширення показує свій UI, користувач вносить зміни, потім finishContentEditing генерує новий файл. Apple рекомендує всю ресурсоємну обробку — фільтри CIFilter, маніпуляції з Core Image — виконувати у фоновому потоці, а не в головному, щоб не блокувати інтерфейс.

Неруйнівне редагування через AdjustmentData

PHAdjustmentData — ключовий механізм, що забезпечує неруйнівне редагування в Photo Editing Extension. Це об'єкт, який містить інформацію про застосовані зміни в довільному форматі. Розширення серіалізує параметри фільтрів, маски та налаштування в AdjustmentData та зберігає разом із модифікованим зображенням.

При повторному відкритті знімка розширення читає AdjustmentData, відновлює попередній стан інтерфейсу та дозволяє користувачеві продовжити редагування з того ж місця. Якщо розширення не встановлено — знімок відображається в останній збереженій версії, а оригінал зберігається окремо.

За даними Apple Documentation, PHAdjustmentData зберігає formatIdentifier та formatVersion — рядки для ідентифікації формату даних. При оновленні розширення слід перевіряти версію та коректно обробляти старі форматки.

swift
let adjustmentData = PHAdjustmentData(
    formatIdentifier: "com.example.photoediting",
    formatVersion: "1.0",
    data: NSKeyedArchiver.archivedData(
        withRootObject: params,
        requiringSecureCoding: true
    )
)
output.adjustmentData = adjustmentData

У момент finishContentEditing розширення записує AdjustmentData в об'єкт PHContentEditingOutput разом із модифікованим файлом зображення. Система потім зберігає обидва компоненти: версію для відображення та метадані для відновлення сесії редагування.

Інтеграція з додатком Фото

Photo Editing Extension автоматично з'являється в меню додатка Фото після встановлення додатка, що його містить. Користувач відкриває знімок, вибирає «Правити», і в нижньому ряді інструментів відображаються всі встановлені розширення редагування — як системні, так і сторонні.

Реєстрація розширення

Розширення реєструється через Info.plist основного додатка з ключем NSExtensionActivationRule, який вказує, які типи контенту активують розширення. Для фоторедактора ActivationRule зазвичай вимагає image — розширення не буде відображатися для відео або живих фотографій.

Apple рекомендує вказувати конкретні типи активації, щоб не перевантажувати меню редагування. Якщо розширення підтримує лише JPEG та HEIC, варто обмежити активацію цими форматами.

xml
<!-- Info.plist -->
<key>NSExtension</key>
<dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.photo-editing</string>
    <key>NSExtensionActivationRule</key>
    <string>SUBQUERY (extensionItems,
        @count <= 1)</string>
</dict>

Взаємодія з користувачем

Після вибору розширення iOS створює окремий процес із кастомним UIViewController, який відображається поверх інтерфейсу Фото. Користувач бачить свій знімок, інструменти розширення та кнопки «Скасувати» / «Готово». Розширення не може змінити навігацію за межами свого контролера або отримати доступ до інших частин системи.

За даними Human Interface Guidelines від Apple, інтерфейс розширення має бути мінімальним та функціональним — без реклами, сторонніх посилань та зайвих елементів навігації. Рекомендується використовувати UIScrollView для відображення палітри інструментів, щоб не захаращувати екран.

Часті запитання

Як Photo Editing Extension отримує доступ до знімка?

Розширення отримує PHContentEditingInput з URL повного файлу зображення через метод beginContentEditing(with:). Доступ надається лише до одного вибраного знімка — без прав на інші ресурси бібліотеки.

Чи може розширення змінювати оригінал знімка?

Ні, оригінал ніколи не змінюється. Розширення створює нову версію через PHContentEditingOutput, а AdjustmentData зберігає параметри змін для можливості відкату до вихідного стану.

Які типи файлів підтримує Photo Editing Extension?

Розширення працює з усіма форматами, які підтримує PhotoKit: JPEG, HEIC, RAW, PNG, TIFF та Live Photos. Обмеження задаються через NSExtensionActivationRule в Info.plist розширення.

Скільки часу дається на редагування?

iOS виділяє до 30 секунд на виконання операції finishContentEditing. При перевищенні ліміту розширення примусово завершується, а зміни не зберігаються. Фонова обробка з CIFilter не продовжує цей час.

Чи можна використовувати Core Image та Metal у розширенні?

Так, Core Image (CIFilter) та Metal (для кастомних шейдерів) повністю підтримуються. Apple рекомендує виносити важкі обчислення у фонові потоки через Grand Central Dispatch.

Підсумки

  • Photo Editing Extension — це вбудований інструмент редагування в додатку Фото, що працює без перемикання між додатками
  • Архітектура використовує PHContentEditingController для керування сесією редагування та отримання вхідних даних
  • PhotoKit надає PHAsset, PHImageManager та PHContentEditingInput для доступу до медіаресурсів пристрою
  • PHAdjustmentData забезпечує неруйнівне редагування — серіалізація параметрів змін з можливістю відкату
  • Розширення працює в пісочниці з обмеженням у 30 секунд і доступом лише до одного знімка за сесію
  • Підтримуються Core Image, Metal та всі формати PhotoKit: JPEG, HEIC, RAW, PNG, TIFF та Live Photos

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

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

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

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