Share Extension — cos'è, come funziona e sviluppo dell'estensione

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

Share Extension è un'estensione iOS che aggiunge la tua app al menu Condividi di sistema. L'utente può inviare contenuti da Safari, Foto, File o qualsiasi altra app direttamente nella tua — senza copiare e passare da una finestra all'altra. Secondo Apple (2024), le app con Share Extension ricevono il 35% in più di contenuti utente rispetto alle app senza funzionalità di condivisione. L'estensione elabora testo, immagini, video, URL e file tramite un'interfaccia unificata NSExtensionItem.

Punti chiave

  • Share Extension — estensione iOS per inviare contenuti a un'app da altri programmi.
  • NSExtensionItem — contenitore per trasferire dati tra l'app host e l'estensione.
  • Info.plist — configurazione dei tipi di contenuto che l'estensione elabora.
  • SLServiceTypes — mappatura sui social network (Twitter, Facebook) per la modalità legacy.
  • App Groups — archiviazione condivisa per trasferire dati tra estensione e app.

Cos'è Share Extension

Share Extension è un tipo di estensione iOS che appare nel menu Condividi di sistema quando si seleziona contenuto in qualsiasi app. L'utente evidenzia testo in Safari, tocca Condividi e vede la tua app nell'elenco delle azioni disponibili. Dopo la selezione, il contenuto viene passato all'estensione per l'elaborazione: salvataggio, pubblicazione, invio o trasformazione.

A differenza di Action Extension, Share Extension è specializzata nella ricezione di contenuti da app esterne. Action Extension, invece, invia dati dalla tua app verso l'esterno. Share Extension è un punto di ingresso per i contenuti utente, un elemento chiave per l'acquisizione utenti: gli utenti provano la tua app tramite Share Extension senza installarla completamente. L'App Store vieta le app la cui unica funzione è mostrare pubblicità tramite Share Extension (App Store Review Guideline 4.2).

Perché Share Extension è importante per la tua app

Share Extension abbassa la barriera d'ingresso: gli utenti inviano contenuti alla tua app da un contesto familiare — browser, galleria, file manager. Secondo Branch (2024), le app con Share Extension mostrano una fidelizzazione del 28% superiore al 7° giorno. Un effetto aggiuntivo è la viralità: ogni volta che un utente vede la tua app nel foglio Condividi, si verifica un branding passivo senza spese pubblicitarie.

Come funziona Share Extension

Il meccanismo di Share Extension si basa sul trasferimento di contenuti tramite contenitori di sistema NSExtensionItem. L'app host (Safari, Foto) impacchetta il contenuto selezionato in un NSExtensionItem con un tipo specificato (public.image, public.url, public.plain-text). Il sistema passa questo contenitore all'estensione, che estrae i dati tramite extensionContext.inputItems.

Ciclo di vita dell'estensione

Share Extension viene eseguita in un processo separato con tempo di esecuzione limitato — circa 30 secondi per l'elaborazione. L'estensione non deve eseguire operazioni sincrone lunghe. Per caricare file grandi, utilizza NSURLSession con configurazione in background. SLComposeServiceViewController è la classe base per Share Extension con anteprima del contenuto e pulsante di invio.

Tipi di dati e Uniform Type Identifiers

iOS utilizza Uniform Type Identifiers (UTI) per determinare il tipo di contenuto trasferito. UTI principali per Share Extension: public.image (foto, screenshot), public.url (link), public.plain-text (testo), public.video (file video) e public.file-url (file). L'estensione registra le UTI supportate in Info.plist tramite la chiave NSExtensionActivationRule.

Architettura dell'estensione

Share Extension è composta da tre componenti: il target in Xcode, SLComposeServiceViewController e la configurazione Info.plist. L'architettura determina quali tipi di contenuto vengono elaborati, come viene visualizzata l'interfaccia e dove vengono salvati i dati.

ComponenteScopoCaratteristiche
TargetTarget dell'estensione in XcodeBundle separato con un identificatore
ViewControllerInterfaccia e logica di elaborazioneSLComposeServiceViewController o personalizzato
Info.plistConfigurazione di attivazione e UTINSExtensionActivationRule con predicati
App GroupsArchiviazione condivisa con l'appUserDefaults suite per il trasferimento dati

NSExtensionActivationRule

L'elemento chiave della configurazione di Share Extension è la regola di attivazione. Determina in quali condizioni l'estensione appare nel foglio Condividi. La regola viene impostata in Info.plist come dizionario con vincoli: numero massimo di immagini, lunghezza minima del testo, presenza obbligatoria di URL. La regola standard attiva l'estensione per un qualsiasi singolo tipo di contenuto.

objective-c
// Info.plist — NSExtensionActivationRule per Share Extension
<key>NSExtensionActivationRule</key>
<dict>
    <key>NSExtensionActivationSupportsImageWithMaxCount</key>
    <integer>5</integer>
    <key>NSExtensionActivationSupportsText</key>
    <true/>
    <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
    <integer>1</integer>
</dict>

Creazione di Share Extension

Consideriamo un esempio pratico di creazione di una Share Extension in Swift per un'app di segnalibri. L'estensione riceve un URL da Safari, mostra un'interfaccia di anteprima e salva il link in App Group. SLComposeServiceViewController fornisce un'interfaccia utente pronta con un campo di testo e un pulsante Pubblica.

swift
import Social
import MobileCoreServices

class ShareViewController: SLComposeServiceViewController {

    override func isContentValid() -> Bool {
        return !(contentText?.isEmpty() ?? true)
    }

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

        for attachment in item.attachments ?? [] {
            attachment.loadItem(forTypeIdentifier: kUTTypeURL as String) {
                [weak self] (item, error) in
                if let url = item as? URL {
                    BookmarkService().save(url, title: self?.contentText)
                }
                self?.extensionContext?.completeRequest(
                    returningItems: [], completionHandler: nil)
            }
        }
    }
}

Dopo l'invio del contenuto, l'estensione termina chiamando completeRequest — questo è un passaggio obbligatorio; senza di esso, il sistema non rilascerà il processo dell'estensione. Importante: Share Extension viene eseguita in un ambiente limitato con accesso limitato alla rete e al file system — utilizza sessioni in background per il caricamento di contenuti.

Elaborazione dei tipi di contenuto

Share Extension deve gestire correttamente diversi tipi di dati in ingresso: testo, immagini, video, URL e file. Ogni tipo utilizza la propria UTI e metodo di estrazione. Gestione universale — iterando su attachment.attachments con controlli hasItemConformingToTypeIdentifier.

Gestione delle immagini

Le immagini vengono passate come public.image con la possibilità di recuperarle tramite UIImage o Data. Per immagini grandi, utilizza jpegData(compressionQuality:) prima del salvataggio. Share Extension non deve modificare l'immagine originale senza esplicita autorizzazione dell'utente. Si consiglia di salvare l'originale in App Group e creare un'anteprima per la visualizzazione nell'interfaccia.

Gestione di URL e testo

Safari e altri browser passano gli URL come public.url e il testo selezionato come public.plain-text. Un singolo NSExtensionItem può contenere entrambi i tipi simultaneamente — l'URL della pagina e il testo selezionato su di essa. Share Extension deve controllare tutti gli allegati ed estrarre i dati rilevanti. Scenario combinato: salvare l'URL come segnalibro e il testo come nota allegata.

App Groups e trasferimento dati

Share Extension e l'app principale vengono eseguite in processi diversi e non hanno accesso condiviso al file system. Lo scambio di dati utilizza il meccanismo degli App Groups: un contenitore condiviso con un identificatore group.*. Dopo aver salvato i dati in App Group, l'estensione notifica l'app tramite CFNotificationCenter o Darwin Notify.

Configurazione degli App Groups

Gli App Groups vengono attivati nelle Capabilities del target: seleziona App Groups e aggiungi un identificatore (ad esempio, group.com.example.myapp). Entrambi i target — l'app principale e l'estensione — devono avere accesso allo stesso gruppo. UserDefaults suite consente di leggere e scrivere dati nell'archiviazione condivisa con overhead minimo.

swift
// Salvataggio dati in App Group da Share Extension
let sharedDefaults = UserDefaults(suiteName: "group.com.example.myapp")
let bookmark: [String: Any] = [
    "url": url.absoluteString,
    "title": contentText ?? "",
    "date": Date().timeIntervalSince1970
]
sharedDefaults?.set(bookmark, forKey: "bookmark_\(Date().timeIntervalSince1970)")
sharedDefaults?.synchronize()

Domande frequenti

In cosa si differenzia Share Extension da Action Extension?

Share Extension riceve contenuti da altre app nella tua. Action Extension, invece, esegue un'azione sul contenuto all'interno dell'app host — tradurre testo, modificare un'immagine. Share Extension è ricezione, Action Extension è trasformazione.

Quali UTI devo specificare in Info.plist?

Dipende dal tipo di contenuto che la tua app elabora. Per i segnalibri — public.url. Per un editor di foto — public.image. Per le note — public.plain-text. Per più tipi, utilizza NSExtensionActivationRule con una combinazione di predicati AND/OR.

Perché Share Extension non appare nel foglio Condividi?

Una causa comune è una regola NSExtensionActivationRule errata o una discrepanza di UTI. Verifica in Info.plist: la regola di attivazione deve corrispondere al tipo di contenuto testato. Assicurati anche che l'estensione sia abilitata in Impostazioni → la tua app → Siri e Ricerca. Xcode clean build spesso risolve il problema.

Quanto tempo ha Share Extension per elaborare?

Il sistema assegna circa 30 secondi per l'esecuzione. Dopodiché, iOS termina forzatamente il processo dell'estensione. Per operazioni di lunga durata, utilizza una NSURLSession in background e gestisci il risultato al prossimo avvio dell'app.

Posso mostrare un'interfaccia personalizzata in Share Extension?

Sì, invece di SLComposeServiceViewController puoi utilizzare un UIViewController normale. In questo caso, hai il controllo completo dell'interfaccia. Tuttavia, devi implementare tu stesso i pulsanti di invio e annullamento. Interfaccia personalizzata è consigliata per scenari di elaborazione contenuti non standard.

Riepilogo

  • Share Extension — estensione iOS che aggiunge la tua app al menu Condividi di sistema.
  • Il contenuto viene trasferito tramite NSExtensionItem con Uniform Type Identifiers.
  • La configurazione di attivazione viene impostata in Info.plist tramite NSExtensionActivationRule.
  • SLComposeServiceViewController — interfaccia base con anteprima e pubblicazione.
  • App Groups — meccanismo di scambio dati tra estensione e app.
  • Share Extension opera in un ambiente limitato (30 sec, accesso limitato).
  • Le app con Share Extension ricevono il 35% in più di contenuti utente.

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