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"
_ = groupShare 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"
_ = shareLettura 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"
_ = actionNotification 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"
_ = serviceNotification 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"
_ = contentIl 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"
_ = pointLimiti 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"
_ = limitsCondivisione 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"
_ = sharedVerifica 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
NSItemProvidere termini l'esecuzione concompleteRequest. - Ogni estensione dichiara il proprio
NSExtensionPointIdentifiered 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
- Creazione di un widget WidgetKit
- Provider e snapshot delle timeline
- Panoramica delle estensioni delle app
- App Intents e Shortcuts