Photo Editing Extension: ce este, capacitățile extensiei pentru iOS

Autor: IT Sectr Publicat: 2026-06-15 Timp de citire: 9 min

Photo Editing Extension — este un mecanism iOS care permite aplicațiilor terțe să adauge instrumente de editare direct în aplicația Foto de sistem. Spre deosebire de editorii completi, extensia nu încarcă imaginea într-o aplicație separată — utilizatorul aplică filtre, corectează culorile sau adaugă efecte fără a părăsi interfața standard. Conform Apple Developer Documentation (2025), PhotoKit oferă peste 40 de API-uri pentru lucrul cu resursele foto, inclusiv PHAdjustmentData și PHContentEditingController.

Principalele puncte

  • Photo Editing Extension încorporează instrumente de editare în aplicația Foto standard pe iOS fără a comuta între programe
  • Arhitectura se bazează pe protocolul PHContentEditingController, care gestionează afișarea interfeței și obținerea imaginii originale
  • Extensia utilizează editarea nedistructivă — toate modificările sunt salvate ca AdjustmentData, iar originalul rămâne intact
  • Pentru lucrul cu imaginea, extensia primește PHContentEditingInput cu fișierul complet al fotografiei și metadatele
  • PhotoKit oferă acces la resursele foto prin PHAsset, PHAssetResource și PHImageManager

Ce este Photo Editing Extension în iOS

Photo Editing Extension — este un tip de app extension în iOS care introduce instrumente de procesare a imaginilor în interfața standard a aplicației Foto. Utilizatorul deschide o fotografie, apasă butonul „Editează” și selectează extensia dorită din lista celor instalate. După editare, rezultatul este salvat înapoi în bibliotecă, iar fișierul original rămâne disponibil pentru restaurare.

O astfel de arhitectură rezolvă problema cheie a experienței utilizatorului: nu este nevoie să comutați între aplicații, să exportați și importați imagini sau să urmăriți versiunile. Conform WWDC 2025, toate extensiile funcționează într-un proces izolat cu propriul sandbox și timp de execuție limitat — până la 30 de secunde per operație de editare.

Extensia nu are acces la fișiere arbitrare din memoria dispozitivului — doar la fotografia pe care utilizatorul a transmis-o explicit prin interfața de selecție. Aceasta asigură securitatea datelor utilizatorului atunci când folosește instrumente terțe.

PhotoKit: arhitectură și componente cheie

PhotoKit — este framework-ul Apple pentru lucrul cu mediateca dispozitivului, apărut în iOS 8. Acesta oferă acces programatic la resursele Foto, inclusiv fotografii, videoclipuri, albume și metadate. Pentru extensiile de editare, PhotoKit servește ca strat intermediar între stocare și interfața de modificare.

PHAsset și PHAssetResource

PHAsset reprezintă un obiect media individual în bibliotecă — o fotografie sau un videoclip. Prin PHAsset se pot obține metadate: data capturii, tipul fișierului, locația pe hartă și orientarea camerei. PHAssetResource oferă acces la resursele de bază — de exemplu, la fișierul original al fotografiei în format RAW sau HEIC.

Pentru extensia de editare, PHContentEditingInput este critic — un obiect care conține fișierul complet al imaginii (sau videoclipului) disponibil pentru citire și procesare. Extensia primește acest obiect în momentul activării și îl folosește ca material sursă.

PHImageManager și cache

PHImageManager gestionează încărcarea și stocarea în cache a imaginilor. Pentru extensia de editare nu este utilizat direct — extensia primește fișierul complet prin PHContentEditingInput. Totuși, PHImageRequestOptions permite configurarea parametrilor cererii: dimensiune, tipul de livrare (sincron sau asincron) și formatul rezultatului.

Conform Apple, PHImageManager stochează automat miniaturile imaginilor în memoria RAM, ceea ce accelerează reafișarea previzualizărilor. Pentru extensia de editare se recomandă utilizarea PHImageRequestOptionsDeliveryModeHighQualityFormat pentru a obține cea mai bună calitate a imaginii.

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
    // folosește imaginea pentru afișare
}

Crearea extensiei: PHContentEditingController

Fiecare Photo Editing Extension implementează protocolul PHContentEditingController — elementul central de control al extensiei. Protocolul definește metode pentru afișarea interfeței, obținerea datelor de intrare și salvarea rezultatului.

Principalele metode ale protocolului

beginContentEditing(with:) este apelat la începutul sesiunii de editare. Extensia primește PHContentEditingInput și trebuie să afișeze interfața cu imaginea originală. finishContentEditing(completionHandler:) finalizează editarea — extensia returnează PHContentEditingOutput cu fișierul modificat și AdjustmentData. cancelContentEditing() anulează modificările fără a salva.

Un aspect important: la momentul apelării beginContentEditing, extensia are acces doar la o singură versiune a fotografiei — cea solicitată de utilizator. Nu se poate accesa o altă fotografie sau album. Aceasta este o restricție a sandbox-ului introdusă de Apple pentru securitate.

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

Arhitectura separării

PHContentEditingController separă interfața de editare de logica de salvare. Procesul principal iOS apelează beginContentEditing, extensia își arată UI-ul, utilizatorul face modificări, apoi finishContentEditing generează un fișier nou. Apple recomandă ca toată procesarea consumatoare de resurse — filtre CIFilter, manipulări Core Image — să fie executată în fundal, nu în thread-ul principal, pentru a nu bloca interfața.

Editarea nedistructivă prin AdjustmentData

PHAdjustmentData — mecanismul cheie care asigură editarea nedistructivă în Photo Editing Extension. Este un obiect care conține informații despre modificările aplicate într-un format arbitrar. Extensia serializează parametrii filtrelor, măștile și setările în AdjustmentData și le salvează împreună cu imaginea modificată.

La redeschiderea fotografiei, extensia citește AdjustmentData, restaurează starea anterioară a interfeței și permite utilizatorului să continue editarea de acolo. Dacă extensia nu este instalată — fotografia se afișează în ultima versiune salvată, iar originalul este stocat separat.

Conform Apple Documentation, PHAdjustmentData stochează formatIdentifier și formatVersion — șiruri pentru identificarea formatului datelor. La actualizarea extensiei, trebuie verificată versiunea și gestionate corect formatele vechi.

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

În momentul finishContentEditing, extensia scrie AdjustmentData în obiectul PHContentEditingOutput împreună cu fișierul de imagine modificat. Sistemul salvează apoi ambele componente: versiunea pentru afișare și metadatele pentru restaurarea sesiunii de editare.

Integrarea cu aplicația Foto

Photo Editing Extension apare automat în meniul aplicației Foto după instalarea aplicației care o conține. Utilizatorul deschide o fotografie, selectează „Editează”, iar în rândul de jos al instrumentelor sunt afișate toate extensiile de editare instalate — atât sistemice, cât și terțe.

Înregistrarea extensiei

Extensia se înregistrează prin Info.plist al aplicației principale cu cheia NSExtensionActivationRule, care specifică ce tipuri de conținut activează extensia. Pentru un editor foto, ActivationRule necesită de obicei image — extensia nu va fi afișată pentru videoclipuri sau fotografii live.

Apple recomandă specificarea tipurilor concrete de activare pentru a nu supraîncărca meniul de editare. Dacă extensia suportă doar JPEG și HEIC, merită să limitați activarea la aceste formate.

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>

Interacțiunea cu utilizatorul

După selectarea extensiei, iOS creează un proces separat cu un UIViewController personalizat care se afișează deasupra interfeței Foto. Utilizatorul vede fotografia sa, instrumentele extensiei și butoanele „Anulează” / „Gata”. Extensia nu poate modifica navigația în afara controlerului său și nici nu poate accesa alte părți ale sistemului.

Conform Human Interface Guidelines de la Apple, interfața extensiei trebuie să fie minimă și funcțională — fără reclame, linkuri externe și elemente de navigație inutile. Se recomandă utilizarea UIScrollView pentru afișarea paletei de instrumente, pentru a nu aglomera ecranul.

Întrebări frecvente

Cum obține Photo Editing Extension acces la fotografie?

Extensia primește PHContentEditingInput cu URL-ul fișierului complet al imaginii prin metoda beginContentEditing(with:). Accesul este acordat doar la o singură fotografie selectată — fără drepturi asupra altor resurse din bibliotecă.

Poate extensia modifica originalul fotografiei?

Nu, originalul nu este niciodată modificat. Extensia creează o versiune nouă prin PHContentEditingOutput, iar AdjustmentData stochează parametrii modificărilor pentru posibilitatea revenirii la starea inițială.

Ce tipuri de fișiere suportă Photo Editing Extension?

Extensia funcționează cu toate formatele suportate de PhotoKit: JPEG, HEIC, RAW, PNG, TIFF și Live Photos. Restricțiile se stabilesc prin NSExtensionActivationRule în Info.plist al extensiei.

Cât timp este alocat pentru editare?

iOS alocă până la 30 de secunde pentru executarea operației finishContentEditing. La depășirea limitei, extensia este încheiată forțat, iar modificările nu sunt salvate. Procesarea în fundal cu CIFilter nu prelungește acest timp.

Se pot folosi Core Image și Metal în extensie?

Da, Core Image (CIFilter) și Metal (pentru shadere personalizate) sunt complet suportate. Apple recomandă mutarea calculelor grele în thread-uri de fundal prin Grand Central Dispatch.

Concluzii

  • Photo Editing Extension — este un instrument de editare încorporat în aplicația Foto, care funcționează fără a comuta între aplicații
  • Arhitectura utilizează PHContentEditingController pentru gestionarea sesiunii de editare și obținerea datelor de intrare
  • PhotoKit oferă PHAsset, PHImageManager și PHContentEditingInput pentru accesul la resursele media ale dispozitivului
  • PHAdjustmentData asigură editarea nedistructivă — serializarea parametrilor modificărilor cu posibilitatea de restaurare
  • Extensia funcționează în sandbox cu o limită de 30 de secunde și acces doar la o singură fotografie per sesiune
  • Sunt suportate Core Image, Metal și toate formatele PhotoKit: JPEG, HEIC, RAW, PNG, TIFF și Live Photos

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și