Photo Editing Extension: cos'è e capacità dell'estensione per iOS

Autore: IT Sectr Pubblicato: 2026-06-15 Tempo di lettura: 9 min

Photo Editing Extension è un meccanismo iOS che consente alle app di terze parti di aggiungere strumenti di modifica direttamente nell'app Foto di sistema. A differenza degli editor completi, l'estensione non carica la foto in un'app separata — l'utente applica filtri, regola i colori o aggiunge effetti senza uscire dall'interfaccia standard. Secondo la documentazione per sviluppatori Apple (2025), PhotoKit fornisce oltre 40 API per lavorare con le risorse fotografiche, inclusi PHAdjustmentData e PHContentEditingController.

Punti Chiave

  • Photo Editing Extension incorpora strumenti di modifica nell'app Foto standard di iOS senza cambiare programma
  • L'architettura si basa sul protocollo PHContentEditingController, che gestisce la visualizzazione dell'interfaccia e l'ottenimento dell'immagine originale
  • L'estensione utilizza modifica non distruttiva — tutte le modifiche vengono salvate come AdjustmentData, mentre l'originale rimane intatto
  • Per lavorare con l'immagine, l'estensione riceve PHContentEditingInput con il file completo della foto e i metadati
  • PhotoKit fornisce accesso alle risorse fotografiche tramite PHAsset, PHAssetResource e PHImageManager

Cos'è Photo Editing Extension in iOS

Photo Editing Extension è un tipo di estensione di app in iOS che incorpora strumenti di elaborazione delle immagini nell'interfaccia standard dell'app Foto. L'utente apre una foto, preme il pulsante Modifica e seleziona l'estensione desiderata dall'elenco di quelle installate. Dopo la modifica, il risultato viene salvato nella libreria e il file originale rimane disponibile per il ripristino.

Questa architettura risolve un problema chiave dell'esperienza utente: non è necessario cambiare app, esportare e importare immagini o tenere traccia delle versioni. Secondo il WWDC 2025, tutte le estensioni funzionano in un processo isolato con il proprio sandbox e tempo di esecuzione limitato — fino a 30 secondi per operazione di modifica.

L'estensione non ha accesso a file arbitrari nella memoria del dispositivo — solo alla foto che l'utente ha esplicitamente passato attraverso l'interfaccia di selezione. Ciò garantisce la sicurezza dei dati dell'utente quando si utilizzano strumenti di terze parti.

PhotoKit: Architettura e Componenti Chiave

PhotoKit è un framework Apple per lavorare con la libreria multimediale del dispositivo, introdotto in iOS 8. Fornisce accesso programmatico alle risorse di Foto, incluse immagini, video, album e metadati. Per le estensioni di modifica, PhotoKit funge da strato intermedio tra l'archiviazione e l'interfaccia di modifica.

PHAsset e PHAssetResource

PHAsset rappresenta un singolo oggetto multimediale nella libreria — una foto o un video. Tramite PHAsset è possibile ottenere metadati: data di scatto, tipo di file, posizione sulla mappa e orientamento della fotocamera. PHAssetResource fornisce accesso alle risorse sottostanti — ad esempio, al file foto originale in formato RAW o HEIC.

Per un'estensione di modifica, PHContentEditingInput è di vitale importanza — un oggetto che contiene il file immagine (o video) completo disponibile per la lettura e l'elaborazione. L'estensione riceve questo oggetto al momento dell'attivazione e lo utilizza come materiale sorgente.

PHImageManager e Caching

PHImageManager gestisce il caricamento e la memorizzazione nella cache delle immagini. Per un'estensione di modifica, non viene utilizzato direttamente — l'estensione riceve il file completo tramite PHContentEditingInput. Tuttavia, PHImageRequestOptions consente di configurare i parametri della richiesta: dimensione, tipo di consegna (sincrona o asincrona) e formato del risultato.

Secondo Apple, PHImageManager memorizza automaticamente nella cache le miniature delle immagini in RAM, accelerando la visualizzazione ripetuta delle anteprime. Per le estensioni di modifica, si consiglia di utilizzare PHImageRequestOptionsDeliveryModeHighQualityFormat per ottenere la migliore qualità dell'immagine.

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
}

Creazione di un'Estensione: PHContentEditingController

Ogni Photo Editing Extension implementa il protocollo PHContentEditingController — l'elemento centrale di controllo dell'estensione. Il protocollo definisce metodi per visualizzare l'interfaccia, ricevere dati di input e salvare il risultato.

Metodi Chiave del Protocollo

beginContentEditing(with:) viene chiamato quando inizia la sessione di modifica. L'estensione riceve PHContentEditingInput e deve visualizzare l'interfaccia con l'immagine originale. finishContentEditing(completionHandler:) completa la modifica — l'estensione restituisce PHContentEditingOutput con il file modificato e AdjustmentData. cancelContentEditing() annulla le modifiche senza salvarle.

Una sfumatura importante: al momento della chiamata beginContentEditing, l'estensione ottiene accesso solo a una versione della foto — quella richiesta dall'utente. Non può accedere a un'altra foto o album. Questa è una restrizione del sandbox introdotta da Apple per la sicurezza.

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

Architettura di Separazione

PHContentEditingController separa l'interfaccia di modifica dalla logica di salvataggio. Il processo principale iOS chiama beginContentEditing, l'estensione mostra la sua UI, l'utente apporta modifiche, quindi finishContentEditing genera un nuovo file. Apple raccomanda di eseguire tutta l'elaborazione intensiva di risorse — filtri CIFilter, manipolazioni Core Image — in un thread in background, non in quello principale, per non bloccare l'interfaccia.

Modifica Non Distruttiva tramite AdjustmentData

PHAdjustmentData è il meccanismo chiave che consente la modifica non distruttiva in Photo Editing Extension. È un oggetto che contiene informazioni sulle modifiche applicate in un formato arbitrario. L'estensione serializza parametri di filtri, maschere e impostazioni in AdjustmentData e li salva insieme all'immagine modificata.

Quando la foto viene riaperta, l'estensione legge AdjustmentData, ripristina lo stato precedente dell'interfaccia e consente all'utente di continuare la modifica dallo stesso punto. Se l'estensione non è installata, la foto viene visualizzata nell'ultima versione salvata, mentre l'originale viene archiviato separatamente.

Secondo la documentazione Apple, PHAdjustmentData memorizza formatIdentifier e formatVersion — stringhe per identificare il formato dei dati. Quando si aggiorna l'estensione, è necessario verificare la versione e gestire correttamente i formati vecchi.

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

Al momento di finishContentEditing, l'estensione scrive AdjustmentData nell'oggetto PHContentEditingOutput insieme al file immagine modificato. Il sistema salva quindi entrambi i componenti: la versione per la visualizzazione e i metadati per ripristinare la sessione di modifica.

Integrazione con l'App Foto

Photo Editing Extension appare automaticamente nel menu dell'app Foto dopo aver installato l'app che la contiene. L'utente apre una foto, seleziona Modifica e nella riga inferiore degli strumenti vengono mostrate tutte le estensioni di modifica installate — sia di sistema che di terze parti.

Registrazione dell'Estensione

L'estensione viene registrata tramite Info.plist dell'app principale con la chiave NSExtensionActivationRule, che specifica quali tipi di contenuto attivano l'estensione. Per un editor di foto, ActivationRule richiede generalmente image — l'estensione non apparirà per video o Live Photos.

Apple raccomanda di specificare tipi di attivazione concreti per non sovraccaricare il menu di modifica. Se l'estensione supporta solo JPEG e HEIC, vale la pena limitare l'attivazione a questi formati.

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>

Interazione con l'Utente

Dopo aver selezionato un'estensione, iOS crea un processo separato con un UIViewController personalizzato che viene visualizzato sopra l'interfaccia di Foto. L'utente vede la sua foto, gli strumenti dell'estensione e i pulsanti Annulla/Fatto. L'estensione non può modificare la navigazione al di fuori del proprio controller né accedere ad altre parti del sistema.

Secondo le Linee Guida per l'Interfaccia Umana di Apple, l'interfaccia dell'estensione deve essere minima e funzionale — senza pubblicità, link estranei o elementi di navigazione superflui. Si consiglia di utilizzare UIScrollView per visualizzare la palette degli strumenti e non ingombrare lo schermo.

Domande Frequenti

Come ottiene Photo Editing Extension l'accesso alla foto?

L'estensione riceve PHContentEditingInput con l'URL del file immagine completo tramite il metodo beginContentEditing(with:). L'accesso viene concesso solo a una foto selezionata — senza diritti su altre risorse della libreria.

L'estensione può modificare la foto originale?

No, l'originale non viene mai modificato. L'estensione crea una nuova versione tramite PHContentEditingOutput e AdjustmentData memorizza i parametri delle modifiche per la possibilità di tornare allo stato originale.

Quali tipi di file supporta Photo Editing Extension?

L'estensione funziona con tutti i formati supportati da PhotoKit: JPEG, HEIC, RAW, PNG, TIFF e Live Photos. Le limitazioni vengono impostate tramite NSExtensionActivationRule nell'Info.plist dell'estensione.

Quanto tempo è consentito per la modifica?

iOS assegna fino a 30 secondi per l'operazione finishContentEditing. Se il limite viene superato, l'estensione viene terminata forzatamente e le modifiche non vengono salvate. L'elaborazione in background con CIFilter non prolunga questo tempo.

Posso usare Core Image e Metal nell'estensione?

Sì, Core Image (CIFilter) e Metal (per shader personalizzati) sono completamente supportati. Apple raccomanda di scaricare i calcoli pesanti su thread in background tramite Grand Central Dispatch.

Riepilogo

  • Photo Editing Extension è uno strumento di modifica integrabile nell'app Foto che funziona senza cambiare app
  • L'architettura utilizza PHContentEditingController per gestire la sessione di modifica e ricevere dati di input
  • PhotoKit fornisce PHAsset, PHImageManager e PHContentEditingInput per accedere alle risorse multimediali del dispositivo
  • PHAdjustmentData consente la modifica non distruttiva — serializzazione dei parametri di modifica con possibilità di annullamento
  • L'estensione funziona in un sandbox con un limite di 30 secondi e accesso a una sola foto per sessione
  • Sono supportati Core Image, Metal e tutti i formati PhotoKit: JPEG, HEIC, RAW, PNG, TIFF e Live Photos

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche