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 — то је врста app 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 за приказ палете алата како би се избегло загушeње екрана.

Често постављана питања

Како 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. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође