Action Extension: cos'è, come funziona e sviluppo dell'estensione

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

Action Extension è un'estensione iOS che esegue azioni personalizzate su contenuti da altre app senza cambiare contesto. A differenza di Share Extension, che invia dati a un'altra app, Action Extension trasforma il contenuto sul posto: traduce testo, cambia filtri immagine, controlla l'ortografia o genera PDF. Secondo Apple (2024), Action Extension è il secondo tipo di estensione più popolare dopo Share Extension, utilizzato nel 42% delle app della categoria “Produttività”. L'azione istantanea senza avviare l'app principale è il vantaggio chiave per l'utente.

Punti chiave

  • Action Extension — estensione iOS per trasformare contenuti nell'app host.
  • NSExtensionContext — contesto di esecuzione con dati di input e output.
  • UTI — Uniform Type Identifiers per determinare il tipo di contenuto elaborato.
  • UIActivity — meccanismo legacy per implementare azioni in iOS 6–7.
  • App Groups — trasferimento dei dati elaborati di ritorno all'app.

Cos'è Action Extension

Action Extension è un tipo di estensione iOS che consente di eseguire azioni sul contenuto direttamente nel contesto dell'app host. L'utente seleziona del testo in Safari, tocca “Azioni” e sceglie, ad esempio, “Controlla ortografia” — l'estensione elabora il testo e restituisce il risultato senza uscire dal browser. L'estensione riceve i dati di input tramite NSExtensionContext e può restituire contenuti modificati.

Action Extension è apparsa in iOS 8 come parte dell'architettura delle estensioni delle app. La sua caratteristica principale è che l'estensione non ha una propria interfaccia (opzionale) e viene eseguita nel contesto dell'app host. L'utente non lascia la schermata corrente, garantendo un attrito cognitivo minimo. Secondo Apple, Action Extension è l'unico tipo di estensione che può leggere e modificare simultaneamente il contenuto dell'app host (tramite NSExtensionContext con restituzione del risultato).

Dove viene utilizzata Action Extension

Action Extension viene utilizzata in vari scenari: tradurre testo nel browser, creare PDF da una pagina web, applicare un filtro a una foto nella galleria, controllare l'ortografia in qualsiasi campo di testo, accorciare URL, crittografare testo e aggiungere segnalibri. La versatilità rende Action Extension uno strumento popolare per le app delle categorie “Utilità” e “Produttività”.

Action Extension vs Share Extension

Action Extension e Share Extension vengono spesso confuse, ma i loro scopi sono fondamentalmente diversi. Share Extension invia contenuti dall'app host alla tua app; Action Extension elabora i contenuti e li restituisce. La differenza influisce sull'architettura, sull'esperienza utente e sui requisiti di configurazione di Info.plist.

CaratteristicaAction ExtensionShare Extension
ScopoTrasformazione del contenutoTrasferimento del contenuto all'app
InterfacciaOpzionale (personalizzata)SLComposeServiceViewController
Restituzione datiSì, tramite completeRequestNo
ContestoRimane nell'app hostPassa all'estensione
Posizione nel menuAction Sheet (parte superiore)Share Sheet (parte inferiore)
Azione tipicaTraduzione, correzione, filtroSalvataggio, pubblicazione

Come l'utente sceglie un'azione

Action Extension appare nel menu delle azioni (Action Sheet) quando si tocca il pulsante “Condividi” o “...”. iOS posiziona automaticamente le Action Extensions nella parte superiore del foglio (azioni) e le Share Extensions nella parte inferiore (app). Scenario utente: ha selezionato del testo → ha toccato “Azioni” → ha scelto la tua Action Extension → ha ricevuto il risultato elaborato senza cambiare app.

Architettura di Action Extension

Action Extension consiste in un target in Xcode, un UIViewController per visualizzare l'interfaccia (opzionale), NSExtensionContext per l'input/output dei dati e la configurazione Info.plist. L'architettura è più semplice di Share Extension: non c'è un'interfaccia di composizione obbligatoria e l'estensione può funzionare completamente senza UI.

Componenti di Action Extension

Target — un bundle separato con un identificatore ereditato dall'app principale. UIViewController — interfaccia opzionale per mostrare avanzamento, impostazioni o risultati. NSExtensionContext — un contenitore con dati di input (inputItems) e il metodo completeRequest per restituire i risultati. Info.plist — configurazione di attivazione tramite NSExtensionActivationRule e attributi (NSExtensionAttributes) per specificare i tipi di contenuto supportati.

NSExtensionContext e flussi di dati

Action Extension riceve i dati di input tramite extensionContext?.inputItems — un array di NSExtensionItem. Ogni elemento contiene allegati con dati e UTI. Dopo l'elaborazione, l'estensione chiama completeRequest(returningItems:) con un array di NSExtensionItem di output. L'app host riceve i dati elaborati e li visualizza. Modello asincrono: l'estensione può eseguire operazioni lunghe, mantenendo il contesto fino a 30 secondi.

Creare un'Action Extension

Vediamo come creare un'Action Extension in Swift per tradurre il testo selezionato. L'estensione riceve il testo dall'app host, lo invia a un server di traduzione e restituisce il risultato. ActionViewController è il controller di base creato da Xcode quando si aggiunge un target.

swift
import UIKit
import MobileCoreServices

class ActionViewController: UIViewController {

    @IBOutlet var resultLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        extractTextAndTranslate()
    }

    func extractTextAndTranslate() {
        guard let item = extensionContext?.inputItems.first
                as? NSExtensionItem
        else { return }

        for attachment in item.attachments ?? [] {
            attachment.loadItem(
                forTypeIdentifier: kUTTypePlainText as String
            ) { [weak self] (text, error) in
                guard let inputText = text as? String else { return }
                TranslationService().translate(inputText, from: "en", to: "ru") {
                    translated in
                    DispatchQueue.main.async {
                        self?.resultLabel?.text = translated
                    }
                }
            }
        }
    }
}

Dopo l'elaborazione, l'estensione restituisce il risultato all'app host. completeRequest con dati di output è uno scenario alternativo in cui l'estensione non mostra un'interfaccia utente ma restituisce immediatamente il contenuto elaborato.

swift
// Returning processed text to host app
let resultItem = NSExtensionItem()
let resultData = translated.data(using: .utf8)!
let attachment = NSItemProvider(
    item: resultData,
    typeIdentifier: kUTTypePlainText as String
)
resultItem.attachments = [attachment]
extensionContext?.completeRequest(
    returningItems: [resultItem], completionHandler: nil
)

Elaborazione dati e restituzione risultati

Action Extension può funzionare in due modalità: con UI e senza UI. In modalità senza UI, l'estensione esegue l'azione completamente in background e chiama completeRequest subito dopo l'elaborazione. In modalità con UI, l'estensione mostra un controller, l'utente conferma l'azione e solo allora completeRequest invia il risultato. La selezione della modalità dipende dalla complessità dell'azione e dalla necessità di input dell'utente.

Caricamento dati dall'allegato

Il metodo loadItem(forTypeIdentifier:) funziona in modo asincrono — i dati possono essere grandi (immagini, video). NSItemProvider gestisce lo streaming e la memorizzazione nella cache. Per le immagini usa kUTTypeImage, per i file usa kUTTypeFileURL. Importante: loadItem può essere chiamato su un thread in background — aggiorna l'interfaccia utente solo tramite DispatchQueue.main.

Restituzione dati modificati

Action Extension restituisce i dati elaborati tramite completeRequest con un array di NSExtensionItem. Ogni elemento corrisponde al tipo di dati di output. L'app host può sostituire il contenuto originale con quello elaborato — ad esempio, sostituire l'immagine originale con una filtrata. NSExtensionItem supporta le stesse UTI dell'input, più UTI aggiuntive (ad esempio, public.html per contenuti web).

Casi d'uso di Action Extension

Action Extension viene utilizzata in dozzine di scenari — dalle semplici utilità ai flussi di lavoro aziendali complessi. Gli esempi classici coprono operazioni di testo, grafica e file, nonché l'integrazione di contenuti web.

Scenari testuali

Action Extension per il testo: traduzione, controllo ortografico, conteggio caratteri, cambio maiuscole/minuscole, crittografia, generazione di codice QR dal testo. L'utente seleziona il testo in qualsiasi app con campo di testo (Safari, Note, Mail) ed esegue l'azione con un tocco. L'evidenziazione della sintassi del codice, la formattazione Markdown e l'accorciamento degli URL sono esempi popolari di Action Extension per utenti avanzati.

Scenari grafici

Per le immagini, Action Extension offre: applicazione filtri, ritaglio, ridimensionamento, conversione formati (HEIC in JPEG), aggiunta filigrana, riconoscimento testo (OCR) e compressione. L'elaborazione delle immagini deve essere rapida — l'utente si aspetta un risultato entro 2–3 secondi. Per operazioni pesanti, usa Core Image sulla GPU o code in background.

Scenari web

Action Extension per URL: creare PDF da una pagina web, salvare in Pocket/Pinterest, controllare la velocità del sito, archiviare una pagina, ottenere metadati Open Graph, generare screenshot della pagina. La generazione di PDF è uno degli scenari più richiesti: l'utente converte una pagina web in PDF senza aprire servizi di terze parti.

Domande frequenti

Qual è la differenza principale tra Action Extension e Share Extension?

Share Extension invia contenuti dall'app host alla tua app. Action Extension elabora i contenuti sul posto e restituisce il risultato. Share — trasferimento, Action — trasformazione. Questa differenza fondamentale determina l'architettura e l'UX.

Un'Action Extension può non avere interfaccia?

Sì. Se l'azione non richiede input dall'utente (ad esempio, conteggio caratteri), l'estensione può eseguirla in background e restituire immediatamente il risultato tramite completeRequest. In Info.plist è necessario specificare NSExtensionActivationSupportsWebURL o un'altra UTI corrispondente al tipo di dati.

In quali app appare Action Extension?

In qualsiasi app che supporti UIActivityViewController o controller di azione standard. Questi includono Safari, Foto, File, Note, Mail e migliaia di app di terze parti. Action Extension non funziona nelle app che non utilizzano i meccanismi di azione standard di iOS.

Come restituire il contenuto elaborato all'app host?

Tramite extensionContext.completeRequest(returningItems:) con un array di NSExtensionItem. Ogni elemento di output contiene un NSItemProvider con i dati elaborati. L'app host riceve il risultato nel delegato di UIActivityViewController o un callback simile.

Quali sono i limiti di Action Extension?

L'estensione funziona fino a 30 secondi, dopo di che iOS la termina forzatamente. Non c'è accesso diretto all'app principale — solo tramite App Groups. Action Extension non può eseguire attività in background dopo il completamento. Per operazioni lunghe, utilizza NSURLSession in background con una notifica al prossimo avvio.

Riepilogo

  • Action Extension — estensione iOS per trasformare contenuti direttamente nell'app host.
  • Si differenzia da Share Extension restituendo dati elaborati tramite NSExtensionContext.
  • Può funzionare con UI o completamente in background senza interfaccia.
  • Supporta tutti i tipi di contenuto: testo, immagini, URL, file tramite UTI.
  • Utilizzata per traduzione, filtri, generazione PDF, OCR e controllo ortografico.
  • Limite di tempo di esecuzione — 30 secondi, accesso all'app — tramite App Groups.
  • Action Extension è utilizzata nel 42% delle app della categoria “Produttività”.

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