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 автоматично кешира миниатюри на изображения в RAM паметта, което ускорява повторното показване на прегледи. За разширението за редактиране се препоръчва използването на 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
    // използвайте изображение за показване
}

Създаване на разширение: 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 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също