App Extensions e integrazioni di sistema nello sviluppo mobile: cosa sono, tipi e come funzionano

Autore: IT Sectr Pubblicato: 2026-06-22 Tempo di lettura: 11 min

Le App Extensions sono moduli eseguibili separati che estendono le capacità di un'app mobile oltre la sua interfaccia principale: Today Widget sulla schermata Home, gestione delle chiamate VoIP tramite CallKit e reazione agli eventi di sistema tramite BroadcastReceiver. Le integrazioni di sistema consentono a un'app di interagire con il sistema operativo a un livello profondo, sbloccando funzionalità non disponibili per le schermate normali. Secondo la Documentazione per Sviluppatori Apple, ogni estensione viene eseguita in un processo isolato e gestita dal sistema indipendentemente dall'app principale. Le App Extensions in un'app mobile consentono di implementare funzionalità non disponibili nel processo principale.

Punti chiave

  • App Extensions — binari separati all'interno di un'app che estendono la sua funzionalità oltre il processo principale
  • CallKit — un framework per integrare le chiamate VoIP nell'interfaccia di chiamata di sistema dell'iPhone
  • BroadcastReceiver — un componente Android che reagisce ai messaggi di broadcast di sistema
  • AppWidgetProvider — una classe base per creare widget su Android con supporto RemoteViews
  • Content Provider — un componente Android per condividere dati tra app tramite ContentResolver

App Extensions su iOS: widget ed estensioni per la condivisione di contenuti

Le App Extensions su iOS sono apparse in iOS 8 e sono diventate il fondamento delle integrazioni di sistema nello sviluppo mobile. Sono binari separati inclusi nell'app principale, ma avviati in un processo isolato. Ogni estensione ha il proprio Info.plist e un punto di ingresso definito tramite NSExtensionPrincipalClass. Il sistema gestisce il ciclo di vita delle App Extensions — non possono rimanere in background dopo aver completato un'attività.

WidgetKit e Today Widget

WidgetKit (iOS 14+) è un framework moderno per creare widget sulla schermata Home. WidgetKit utilizza SwiftUI per descrivere l'interfaccia e TimelineProvider per definire gli orari di aggiornamento. I widget sono disponibili in tre dimensioni: piccolo (2×2 celle), medio (4×2) e grande (4×4). Il vecchio Today Widget basato su UICollectionViewController è ancora supportato, ma Apple consiglia di migrare a WidgetKit. Le App Extensions su WidgetKit non supportano animazioni, input da tastiera o gesti — sono elementi statici o pseudo-animati con aggiornamenti periodici.

Share Extension e Action Extension

Share Extension consente di inviare contenuti da qualsiasi app alla tua tramite il foglio di condivisione di sistema. Share Extension riceve i dati tramite NSExtensionItem e utilizza SLComposeServiceViewController per l'interfaccia. Action Extension elabora i contenuti sul posto — ad esempio, traduce il testo nel browser senza passare a un'altra app. Entrambi i tipi devono completare il lavoro in un tempo limitato, altrimenti il sistema "uccide" l'estensione. Questa è una limitazione importante delle App Extensions in un'app mobile — le attività in background non sono disponibili a livello di estensione.

CallKit, PushKit e SiriKit — integrazioni di sistema per voce e notifiche

Le integrazioni di sistema su iOS vanno ben oltre i widget: CallKit, PushKit e SiriKit consentono a un'app mobile di funzionare a livello di sistema. Questi framework richiedono entitlements speciali, ma offrono all'utente un'esperienza fluida — le chiamate tramite CallKit appaiono come normali chiamate telefoniche e Siri gestisce le richieste senza aprire l'app.

CallKit — chiamate VoIP nell'interfaccia di sistema

CallKit integra le chiamate di app di terze parti nella schermata di chiamata di sistema, inclusa la schermata bloccata. CXProvider registra l'app come servizio VoIP e CXCallController gestisce le chiamate. CallKit blocca automaticamente le chiamate duplicate e supporta Call Directory Extension per bloccare i numeri indesiderati. Le integrazioni di sistema nello sviluppo mobile con CallKit sono fondamentali per le app di comunicazione vocale — WhatsApp, Skype e Zoom lo utilizzano per visualizzare le chiamate in arrivo.

PushKit — notifiche push in background

PushKit consegna le notifiche push direttamente all'app mobile senza mostrarle all'utente. PushKit riattiva l'app da uno stato "ucciso" e passa i dati tramite il delegato PKPushRegistryDelegate. Questo è il meccanismo principale per le app VoIP: PushKit consegna le informazioni sulla chiamata e CallKit le visualizza. PushKit ha una priorità di consegna più alta rispetto alle notifiche push normali e non richiede la visualizzazione di un banner. Le App Extensions nelle app mobili spesso combinano PushKit con CallKit per la comunicazione vocale.

SiriKit e Intents Extension

SiriKit consente di gestire le richieste tramite Siri e l'app Comandi. Intents Extension è un'App Extension separata che registra gli intent supportati e li elabora. SiriKit supporta oltre 20 domini: chiamate, messaggi, pagamenti, note, allenamenti. I Comandi Rapidi consentono all'utente di creare automazioni — ad esempio, "Invia un messaggio in WhatsApp tramite Siri." Le integrazioni di sistema con SiriKit e Comandi Rapidi aumentano il coinvolgimento poiché l'utente esegue azioni senza aprire l'app.

BroadcastReceiver e servizi di sistema su Android

BroadcastReceiver è un componente Android che reagisce ai messaggi di broadcast di sistema. A differenza delle App Extensions iOS, BroadcastReceiver non richiede un binario separato — è sufficiente registrare il ricevitore nel manifest o nel codice tramite Context.registerReceiver. Le integrazioni di sistema su Android spesso iniziano con BroadcastReceiver: dall'avvio di un servizio all'accensione del dispositivo alla reazione alla connessione di rete.

IntentFilter per eventi di sistema

IntentFilter lega BroadcastReceiver a uno specifico evento di sistema. Eventi tipici: BOOT_COMPLETED (accensione dispositivo), CONNECTIVITY_ACTION (cambio rete), BATTERY_LOW (batteria scarica), TIME_SET (cambio ora). Il ricevitore viene registrato in AndroidManifest.xml o tramite Context.registerReceiver per la registrazione dinamica. La registrazione dinamica è preferibile — non richiede permessi nel manifest e funziona solo mentre l'app è attiva. Le App Extensions su Android non esistono come concetto, ma BroadcastReceiver svolge un ruolo simile — estende le capacità dell'app attraverso integrazioni di sistema.

NotificationListenerService e AccessibilityService

NotificationListenerService è un servizio che riceve tutte le notifiche di sistema. NotificationListenerService richiede il permesso BIND_NOTIFICATION_LISTENER_SERVICE e l'accesso tramite le impostazioni di accessibilità. AccessibilityService è uno strumento più potente per l'integrazione di sistema: può leggere il contenuto dello schermo, simulare clic e automatizzare azioni. Entrambi i servizi richiedono un'attivazione esplicita da parte dell'utente nelle impostazioni, migliorando la sicurezza. Le integrazioni di sistema nelle app mobili tramite AccessibilityService vengono utilizzate per compilatori automatici, lettori di schermo e strumenti di accessibilità.

kotlin
class BootReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
            WorkManager.getInstance(context)
                .enqueueUniqueWork("post-boot", ...)
        }
    }
}

L'esempio registra un BroadcastReceiver per l'evento BOOT_COMPLETED. WorkManager viene utilizzato per l'esecuzione differita di attività dopo l'accensione del dispositivo — questo è l'approccio standard per le app Android.

App Widget Provider — creazione di widget su Android

App Widget Provider su Android è l'equivalente delle App Extensions iOS nel contesto dei widget: è un componente che visualizza contenuti interattivi sulla schermata Home. A differenza di WidgetKit, i widget Android possono accettare input dell'utente — clic, interruttori e gesti. App Widget Provider viene registrato nel manifest tramite una descrizione XML della dimensione e della frequenza di aggiornamento.

RemoteViews e AppWidgetProvider

RemoteViews descrive l'interfaccia del widget tramite un layout XML e supporta solo un insieme limitato di View. RemoteViews non consente View personalizzate — solo componenti standard: TextView, ImageView, Button, ProgressBar. AppWidgetProvider è la classe base che gestisce gli aggiornamenti, l'attivazione e l'eliminazione del widget. Il metodo onUpdate viene chiamato tramite timer usando updatePeriodMillis o tramite WorkManager per un controllo preciso. Le integrazioni di sistema con i widget su Android richiedono cautela — aggiornamenti troppo frequenti scaricano la batteria.

Glance API (Jetpack) — approccio moderno

Glance API è una libreria Jetpack per creare widget utilizzando Kotlin DSL invece di XML. Glance API viene compilata in RemoteViews e supporta una sintassi simile a Compose: GlanceComposable, Column, Row, Text. La libreria risolve il problema del codice XML complesso e consente di testare i widget tramite JUnit. Glance API non supporta ancora tutte le funzionalità di RemoteViews — per widget interattivi complessi, l'approccio classico è migliore. Le App Extensions nello sviluppo mobile su Android si stanno evolvendo verso Glance API, semplificando la creazione e la manutenzione dei widget.

Content Provider, FileProvider e condivisione dati tra app

Content Provider è un componente Android per condividere dati strutturati tra app tramite un'interfaccia unificata ContentResolver. A differenza delle App Extensions iOS, Content Provider non crea un processo separato — i dati vengono richiesti in modo sincrono nel contesto dell'app chiamante. Content Provider è il fondamento delle integrazioni di sistema su Android: contatti, file multimediali, calendario e app standard lo utilizzano per pubblicare dati.

FileProvider per la condivisione sicura di file

FileProvider è una sottoclasse di ContentProvider per il trasferimento sicuro di file tra app. FileProvider genera URI temporanei content:// invece dei percorsi file:// diretti, che sono proibiti su Android 7+. Per utilizzarlo, è necessario specificare files-path o external-files-path nella configurazione XML. Le App Extensions nello sviluppo mobile su Android non esistono come concetto separato, ma FileProvider svolge la loro funzione — estende le capacità di condivisione dei dati oltre una singola app.

Equivalente iOS: File Provider Extension

Su iOS, il ruolo della condivisione di file è svolto da File Provider Extension. File Provider Extension pubblica i file dell'app nell'app File tramite NSFileProviderManager. A differenza di FileProvider, l'estensione iOS richiede un binario separato e viene eseguita in un processo isolato. File Provider Extension supporta NSFileProviderItem per la descrizione dei file e NSFileProviderEnumerator per la navigazione nelle cartelle. Le integrazioni di sistema nelle app mobili tramite File Provider Extension consentono all'utente di gestire i file dell'app dall'app File senza aprirla.

swift
class MyFileProviderExtension: NSFileProviderExtension {
    override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
        return MyFileProviderItem(identifier: identifier)
    }
}

L'esempio mostra un'implementazione minima di File Provider Extension in Swift. Il metodo item(for:) restituisce un oggetto NSFileProviderItem per identificatore — il sistema lo chiama quando visualizza i file nell'app File.

Domande frequenti

Cosa sono le App Extensions su iOS?

Le App Extensions sono binari separati che estendono la funzionalità dell'app oltre il suo processo: Today Widget, Share Extension, Action Extension, Keyboard Extension e altri tipi che vengono eseguiti in un ambiente isolato.

Qual è la differenza tra CallKit e PushKit?

CallKit integra le chiamate VoIP nell'interfaccia di chiamata di sistema con visualizzazione sulla schermata bloccata. PushKit consegna notifiche push in background senza mostrarle all'utente — riattiva l'app per elaborare dati, come le informazioni su una chiamata in arrivo.

Cos'è BroadcastReceiver su Android?

BroadcastReceiver è un componente Android che reagisce ai messaggi di broadcast di sistema: accensione del dispositivo (BOOT_COMPLETED), connessione di rete (CONNECTIVITY_ACTION), cambi di modalità aereo e altri eventi del sistema operativo.

Come creare un widget su Android?

Utilizza AppWidgetProvider con RemoteViews per creare l'interfaccia del widget o Glance API (Jetpack) per l'approccio Kotlin DSL. Il widget viene registrato nel manifest tramite una descrizione XML che specifica la dimensione e la frequenza di aggiornamento.

A cosa serve Content Provider?

Content Provider è un componente Android per condividere dati tra app tramite ContentResolver. Viene utilizzato per accedere a contatti, file multimediali e qualsiasi dato strutturato da altre app.

Riepilogo

  • App Extensions — il fondamento delle integrazioni di sistema su iOS: widget, condivisione, elaborazione di contenuti ed estensioni tastiera in processi isolati
  • CallKit e PushKit — una coppia di framework per chiamate VoIP: PushKit consegna i dati, CallKit visualizza l'interfaccia di chiamata
  • BroadcastReceiver — l'equivalente Android delle App Extensions per reagire agli eventi di sistema senza un binario separato
  • AppWidgetProvider — un componente per widget su Android con supporto RemoteViews e Glance API
  • Content Provider e FileProvider — meccanismi di condivisione dati tra app su Android tramite ContentResolver
  • File Provider Extension — l'equivalente iOS di FileProvider per pubblicare file nell'app File da un processo isolato
  • Le integrazioni di sistema nello sviluppo mobile uniscono App Extensions, BroadcastReceiver, CallKit e Content Provider in un unico ecosistema

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