AppIntent ist ein Apple-Framework, das in iOS 16 als Ersatz für das veraltete Intents framework eingeführt wurde und eine deklarative API zur Integration von Apps mit Siri, Shortcuts und Spotlight bietet. Im Gegensatz zum alten Ansatz, der eine separate Intent Definition File und ObjC-Codegenerierung erforderte, verwendet AppIntent reines Swift mit den Protokollen AppIntent und AppEnum. Laut der Apple Developer Dokumentation, 2026 reduziert AppIntent die Code menge für die Erstellung eines Intents im Durchschnitt um 60% im Vergleich zum Intents framework, und die Integrationszeit für Siri-Befehle sinkt von mehreren Tagen auf wenige Stunden.
Wichtige Punkte
AppIntent ist ein Apple-Framework zur deklarativen Beschreibung von Befehlen, die Ihre App auf Anfrage von Siri, Shortcuts, Spotlight, Control Center und Action Button ausführen kann. Es basiert auf dem AppIntent-Protokoll, in dem der Entwickler den Namen des Intents, seine Parameter und die perform()-Methode — die ausführbare Logik — beschreibt. Das Framework generiert automatisch eine Benutzeroberfläche zum Konfigurieren von Parametern in der Shortcuts-App und Sprachphrasen für Siri.
Vor AppIntent verwendeten Entwickler das Intents framework — ein System, das auf der Intents Definition File basierte, Objective-C-Code generierte und die Einrichtung einer separaten Intents Extension erforderte. Dieser Prozess war umständlich: Selbst ein einfacher Intent erforderte bis zu 5 Konfigurationsdateien. AppIntent beseitigt diese Komplexität — ein Intent wird in einer einzigen Swift-Datei beschrieben, und das System generiert automatisch alles, was für die Integration mit Siri und Shortcuts erforderlich ist.
Laut der WWDC 2024 Session „Dive deeper into App Intents" sieht Apple AppIntent als zentralen Mechanismus zur Erweiterung der App-Funktionalität über die traditionelle Benutzeroberfläche hinaus. Zum Zeitpunkt der Veröffentlichung von iOS 18 verwenden bereits über 70% der Apps aus den Top 100 des App Store AppIntent für die Integration mit Shortcuts und Siri, und der durchschnittliche iOS 18-Benutzer startet 4–6 Intents pro Tag über Sprachbefehle oder Widgets.
Intents framework (iOS 10–15) erforderte das Erstellen einer .intentdefinition-Datei, das Generieren von ObjC/Swift-Klassen über Xcode, das Einrichten einer Intents Extension und der App Intent Configuration. AppIntent (iOS 16+) ersetzt diese Pipeline vollständig durch reinen Swift-Code ohne Generierung, Erweiterungen oder zusätzliche Konfigurationen. Dadurch wird der Intent-Erstellungsprozess für den durchschnittlichen iOS-Entwickler zugänglich, ohne dass ein Studium von SiriKit erforderlich ist.
Der Hauptvorteil von AppIntent ist die Deklarativität. Der Entwickler beschreibt, was der Intent tut, nicht wie er in das System integriert wird. Das Framework selbst kümmert sich um Siri-Dialogszenarien, die Parameteranzeige in Shortcuts und die Kontextübergabe zwischen Intents. Im alten Intents framework musste jeder Aspekt der Integration manuell codiert werden, einschließlich INUIHostedView zur Anzeige der Intent-Benutzeroberfläche.
| Merkmal | Intents framework | AppIntent |
|---|---|---|
| Codeumfang | 100–300 Zeilen pro Intent | 30–60 Zeilen |
| Erforderliche Dateien | .intentdefinition, Extension, Config | 1 Swift-Datei |
| Codegenerierung | Erforderlich (Xcode -> ObjC) | Nicht erforderlich |
| Asynchronität | Nur Completion Handler | async/await + Fortschritt |
| IntentDialog | Nein | Integrierte Siri-Dialoge |
AppIntent ist das zentrale Protokoll, das einen Intent definiert. Es enthält einen title (Name für Siri), description (Beschreibung in Shortcuts), Parameter (über @Parameter) und die perform()-Methode, die IntentResult zurückgibt. Das Ergebnis kann IntentDialog (Siri-Dialog), ein an Shortcuts zurückzugebender Wert oder ein Fehler sein. Jeder Intent kann auch suggestedInvocationPhrase bereitstellen — einen Satz für den Sprachaufruf.
AppEntity beschreibt Entitäten, mit denen Intents arbeiten. Wenn eine App beispielsweise Projekte verwaltet, enthält AppEntity Project id, displayRepresentation (wie die Entität in der Benutzeroberfläche angezeigt wird) und defaultQuery (wie Entitäten durchsucht werden). AppEnum ist eine Aufzählung für Auswahlparameter, die automatisch eine Benutzeroberfläche mit einem Picker-Element in Shortcuts generiert. Anstatt manuell eine Parameterliste zu erstellen, reicht es aus, ein enum zu deklarieren, das AppEnum entspricht.
enum TaskPriority: String, AppEnum {
case low, medium, high
static var typeDisplayRepresentation: TypeDisplayRepresentation =
"Priority"
var displayRepresentation: DisplayRepresentation {
switch self {
case .low: "Low"
case .medium: "Medium"
case .high: "High"
}
}
}
struct CreateTaskIntent: AppIntent {
static var title: LocalizedStringResource = "Create Task"
@Parameter(title: "Task Name")
var taskName: String
@Parameter(title: "Priority")
var priority: TaskPriority
func perform() async throws -> some IntentResult {
try await TaskManager.shared
.createTask(name: taskName, priority: priority)
return .result(dialog: "Task created")
}
}
Die Parameter von AppIntent werden über den Property Wrapper @Parameter deklariert, der automatisch in die Shortcuts-Benutzeroberfläche und Siri-Sprach anfragen integriert wird. Jeder Parameter hat einen title (wird in Shortcuts angezeigt) und kann eine Beschreibung, Standardwerte und Einschränkungen enthalten. AppIntent unterstützt Standardtypen: String, Int, Double, Bool sowie benutzerdefinierte Typen über AppEntity und AppEnum.
Die Parameter validierung erfolgt in der perform()-Methode vor der Ausführung der Logik. Bei ungültigen Parametern gibt der Intent einen Fehler über IntentError zurück. Für komplexe Validierungen kann die validate()-Methode implementiert werden, die vor perform() aufgerufen wird und dem Benutzer bereits vor der Befehlsausführung über IntentDialog Rückmeldung geben kann. Dies ist besonders nützlich für Siri-Sprachszenarien, in denen es einfacher ist, den Benutzer erneut zu fragen, als einen falschen Befehl auszuführen.
struct SendMessageIntent: AppIntent {
static var title: LocalizedStringResource = "Send Message"
@Parameter(title: "Recipient")
var recipient: String
@Parameter(title: "Message")
var message: String
func validate() throws {
guard message.count >= 1 else {
throw IntentError.invalidMessage
}
}
func perform() async throws -> some IntentResult {
try await Messenger.shared
.send(recipient: recipient, text: message)
return .result(dialog: "Sent!")
}
}
Ein vollständiges Beispiel eines Intents zum Durchsuchen von Notizen in einer App demonstriert die Arbeit mit AppEntity und EntityQuery. SearchNotesIntent nimmt eine Suchzeichenfolge entgegen und gibt eine Liste gefundener Notizen zurück. AppEntity Note beschreibt die Notizstruktur und EntityQuery implementiert die Suche im Speicher. Das Ergebnis wird über IntentResult mit einem Array von Entitäten zurückgegeben, das Shortcuts dem Benutzer anzeigt.
struct Note: AppEntity {
let id: UUID
let title: String
let content: String
static var typeDisplayRepresentation: TypeDisplayRepresentation =
"Note"
var displayRepresentation: DisplayRepresentation {
DisplayRepresentation(title: "(title)")
}
}
struct SearchNotesIntent: AppIntent {
static var title: LocalizedStringResource = "Search Notes"
@Parameter(title: "Query")
var query: String
func perform() async throws -> some IntentResult {
let results = await NoteStore.shared
.search(query)
.map { $0.toEntity() }
return .result(value: results)
}
}
Nach der Deklaration eines AppIntent erfolgt die Integration mit Shortcuts und Siri automatisch. Die Shortcuts-App scannt alle AppIntents aus installierten Apps und zeigt sie in der Liste verfügbarer Aktionen an. Der Benutzer kann einen Intent zu seinem Kurzbefehl hinzufügen, seine Parameter konfigurieren und mit anderen Aktionen kombinieren. Für Siri erscheinen Intents als Sprachbefehle ohne zusätzliche Einrichtung durch den Entwickler.
Der Entwickler kann die Integration verbessern, indem er suggestedInvocationPhrase hinzufügt — einen empfohlenen Satz für den Sprachaufruf. Zum Beispiel für einen Aufgabe-hinzufügen-Intent: suggestedInvocationPhrase = „Add new task". Siri analysiert diesen Satz und schlägt ihn dem Benutzer beim Erlernen von Sprachbefehlen vor. Es kann auch categories angegeben werden — die Intent-Kategorie (create, view, search, edit), die Shortcuts dabei hilft, Aktionen nach Bedeutung zu gruppieren.
| Kategorie | Beispiel | Verhalten in Shortcuts |
|---|---|---|
| .create | CreateTaskIntent | Wird mit anderen Erstellungsaktionen gruppiert |
| .view | ViewWeatherIntent | Wird in der Kategorie „Anzeigen" angezeigt |
| .search | SearchNotesIntent | Wird als Suchaktion markiert |
| .edit | UpdateTaskIntent | Wird mit Bearbeitungsaktionen gruppiert |
Häufig gestellte Fragen
Nein. AppIntent benötigt keine separate Intents Extension. Intents werden direkt in die Hauptanwendung kompiliert, was die Architektur vereinfacht und die Notwendigkeit der prozessübergreifenden Kommunikation beseitigt.
AppIntent ist auf iOS 16+, iPadOS 16+, macOS 13+, watchOS 9+ verfügbar. Für iOS 15 und älter muss das Intents framework verwendet werden. Es wird empfohlen, beide APIs für eine breite Geräteabdeckung zu unterstützen.
IntentsResult unterstützt String, Int, Double, Bool, AppEntity-Arrays, IntentDialog und benutzerdefinierte Typen. Komplexe Datenstrukturen werden über EntityQuery zurückgegeben, das automatisch in die Shortcuts-Benutzeroberfläche integriert wird.
Ja, über AppIntentsPackage — ein Paket, das die Ausführung von Intents auf der Serverseite ermöglicht. Dies ist nützlich für Apps mit Serverlogik, bei denen Intents auf Daten zugreifen müssen, die lokal nicht verfügbar sind.
Verwenden Sie den iOS 16+-Simulator mit der Shortcuts-App. Fügen Sie den Intent zu einem Shortcuts-Befehl im Simulator hinzu und führen Sie ihn aus. Für Siri-Szenarien ist ein physisches Gerät erforderlich, da der Simulator keine Spracheingabe unterstützt.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch