0Pricing
Swift Academy · Lezione

Panoramica delle estensioni delle app

Comprenda le estensioni di condivisione, azione e altro.

Panoramica delle estensioni delle app è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.

Cosa sono le estensioni dell'app

Un'estensione dell'app consente all'app di fornire funzionalità all'interno di altre app o superfici del sistema: condivisione di contenuti, tastiere personalizzate, indicizzazione Spotlight e altro. Ogni estensione è un target separato, con un proprio ciclo di vita, sandbox e punto di ingresso definito dal sistema.

// Extensions run in their own process, launched
// by the host (Photos, Safari, Messages, the system),
// not by your main app.

Host, contenitore e sandbox

Ci sono tre componenti: l'app host invoca l'estensione, l'app contenitore la distribuisce e l'estensione stessa viene eseguita in una sandbox. L'estensione non può comunicare liberamente con l'app: le due componenti comunicano tramite un App Group, mai accedendo direttamente alla memoria.

import Foundation
// Container app + Extension target share data via
// an App Group, e.g. group.com.example.app
let group = "group.com.example.app"
_ = group

Share Extension

Una Share Extension appare nel foglio di condivisione del sistema e consente agli utenti di inviare contenuti (testo, URL, immagini) da qualsiasi app alla propria app. Specializza o ospita un view controller e legge gli elementi condivisi dal contesto dell'estensione.

import Foundation
// Share extension reads incoming items:
// extensionContext?.inputItems
//   each NSExtensionItem has attachments (NSItemProvider)
let share = "appears in the share sheet"
_ = share

Lettura degli elementi condivisi

I contenuti condivisi arrivano come allegati NSItemProvider. Controlli l'identificatore del tipo e carichi il valore in modo asincrono. È così che una share extension acquisisce l'URL o l'immagine che l'utente sta condividendo.

import UniformTypeIdentifiers
func handle(_ provider: NSItemProvider) {
    if provider.hasItemConformingToTypeIdentifier(
        UTType.url.identifier) {
        provider.loadItem(
            forTypeIdentifier: UTType.url.identifier) {
            value, _ in
            print("shared url:", value ?? "none")
        }
    }
}

Action Extension

Un'Action Extension trasforma o visualizza i contenuti sul posto, ad esempio traducendo il testo selezionato o annotando un PDF, e può restituire un risultato all'host. A differenza di una share extension, è pensata per agire sui contenuti anziché inviarli altrove.

import Foundation
// Action extension may return modified items:
// extensionContext?.completeRequest(
//     returningItems: outputItems)
let action = "acts on content, can return a result"
_ = action

Notification Service Extension

Una Notification Service Extension intercetta le notifiche push in arrivo con mutable-content: 1 per modificarle prima della visualizzazione, ad esempio decrittografando il corpo, scaricando un allegato multimediale o riscrivendo il titolo, entro un breve limite di tempo.

import UserNotifications
// Override in UNNotificationServiceExtension:
// didReceive(_ request:, withContentHandler:)
//   mutate bestAttemptContent, then call the handler
let service = "modifies push before it shows"
_ = service

Notification Content Extension

Una Notification Content Extension fornisce un'interfaccia utente personalizzata per una notifica espansa, ad esempio una mappa, un lettore multimediale o controlli interattivi, mostrata quando l'utente tiene premuto il banner. È associata a una categoria di notifica.

import UserNotifications
// UNNotificationContentExtension renders a custom view
// for a given UNNotificationCategory when expanded.
let content = "custom expanded notification UI"
_ = content

Il ciclo di vita di completeRequest

Le estensioni hanno vita breve. Al termine, chiami extensionContext?.completeRequest(returningItems:completionHandler:) per segnalare il completamento e consentire all'host di chiudere l'estensione. Per interrompere l'operazione, utilizzi cancelRequest(withError:). Mantenere aperto il processo spreca risorse e potrebbe causarne la terminazione.

import Foundation
func finish(context: NSExtensionContext?) {
    context?.completeRequest(
        returningItems: [], completionHandler: nil)
}

Altri punti di estensione

iOS offre numerosi punti di estensione: tastiere personalizzate, provider di documenti, indicizzazione Spotlight, blocchi dei contenuti di Safari, intent Siri, modifica delle foto ed estensioni File Provider. Ognuno è conforme a un protocollo definito dal sistema, dichiarato da un NSExtensionPointIdentifier nel relativo Info.plist.

// Info.plist of an extension declares its point:
// NSExtension > NSExtensionPointIdentifier
//   e.g. com.apple.share-services
//        com.apple.usernotifications.service
let point = "each extension declares its point"
_ = point

Limiti di memoria e tempo

Le estensioni vengono eseguite con limiti più rigidi rispetto all'app principale: meno memoria e un breve budget di tempo effettivo. Esegua il minimo indispensabile, eviti allocazioni di grandi dimensioni e, quando possibile, deleghi l'elaborazione pesante all'app principale tramite l'archiviazione condivisa.

import Foundation
// Tight memory + short runtime.
// Pattern: extension stages data in the App Group,
// the main app processes it fully on next launch.
let limits = "keep extensions lean and fast"
_ = limits

Condivisione del codice tra target

Per evitare di duplicare la logica, inserisca modelli condivisi e helper in un framework o pacchetto Swift da cui dipendano sia l'app sia l'estensione. Includa solo ciò che serve a ciascun target: l'estensione si collega allo stesso codice senza copiarlo.

import Foundation
// Shared Swift package 'AppCore' linked by:
//   - main app target
//   - share extension target
//   - widget extension target
let shared = "one source of truth for models"
_ = shared

Verifica rapida

Ricordi come un'estensione comunica con l'app contenitore.

Riepilogo

Ha esaminato le estensioni dell'app:

  • Le estensioni sono target separati e isolati in una sandbox, avviati da un host; tra i tipi disponibili ci sono Share Extension, Action Extension, Notification Service Extension e Notification Content Extension.
  • Legga i contenuti in arrivo tramite NSItemProvider e termini l'esecuzione con completeRequest.
  • Ogni estensione dichiara il proprio NSExtensionPointIdentifier ed esegue il lavoro entro limiti rigidi di memoria e tempo.
  • Condivida i dati tramite un App Group e riutilizzi il codice attraverso un pacchetto condiviso.

Domande Frequenti

La lezione «Panoramica delle estensioni delle app» è gratuita?

Sì — il testo completo di «Panoramica delle estensioni delle app» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.

Cosa imparerò in «Panoramica delle estensioni delle app»?

Comprenda le estensioni di condivisione, azione e altro. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Swift Academy?

Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Panoramica delle estensioni delle app»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Swift Academy?

Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Creazione di un widget WidgetKit
  2. Provider e snapshot delle timeline
  3. Panoramica delle estensioni delle app
  4. App Intents e Shortcuts
← Torna a Swift Academy