Skip to content
Alle Artikel

App Intents in iOS 27: Siri, App Schemas und der semantische Index

So funktionieren App Intents mit Siri in iOS 27: App Schemas, IndexedEntity und semantischer Index, Bildschirmerkennung und IntentValueRepresentation auf dem iPhone Duo.

Von der AppleDuo-RedaktionVeröffentlicht 7 Min. Lesezeit

Auch verfügbar auf:EnglishEspañolFrançais日本語Türkçe

Auf dieser Seite
  1. Was sind App Intents in iOS 27?
  2. Wie helfen App Schemas und Domains Siri, Ihre App zu verstehen?
  3. Wie mache ich die Inhalte meiner App für Siri auffindbar?
  4. Was tun, wenn sich meine Inhalte nicht indexieren lassen?
  5. Woher weiß Siri, was in meiner App auf dem Bildschirm zu sehen ist?
  6. Wie teile ich über Siri Daten mit anderen Apps?
  7. Was ändert sich für Siri auf dem iPhone Duo?
  8. Die wichtigsten Punkte

Siri kann in iOS 27 Inhalte in Apps finden, mit ihnen arbeiten und verstehen, was auf dem Bildschirm zu sehen ist. Nichts davon geschieht, solange Ihre App sich nicht so beschreibt, dass Siri es lesen kann. Diese Beschreibung sind App Intents: dasselbe Framework, das hinter Kurzbefehlen und Spotlight-Aktionen steckt, in iOS 27 erweitert um App Schemas, den semantischen Index und neue Wege, Daten zwischen Apps auszutauschen. Dieser Leitfaden geht jeden Baustein in der Reihenfolge durch, in der Apple ihre Einführung empfiehlt.

Der Beitrag basiert auf Apples WWDC26-Sessions und Dokumentation, einem Artikel von Jordan Morgan und Beiträgen des iOS-Entwicklers @sarunw. Das AppleDuo-Team hat diesen Code nicht ausgeliefert. Mehrere APIs sind neu in iOS 27 und Xcode 27, andere reichen bis iOS 18 oder iOS 26 zurück, und Details können sich zwischen Releases ändern.

Was sind App Intents in iOS 27?

Wie @sarunw es formuliert, ist ein App Intent eine Aktion, die Ihre App ausführen kann. Sobald Sie ihn definiert haben, ist er im ganzen System verfügbar: in Kurzbefehlen, Spotlight und Widgets. In der WWDC26-Session Build intelligent Siri experiences with App Schemas bezeichnet Apple App Intents als Grundlage für die Integration mit Siri und Apple Intelligence.

Ein einfacher Intent hat einen Titel und eine Methode perform(). Diese Form gibt es seit iOS 16:

struct OpenInboxIntent: AppIntent {
    static var title: LocalizedStringResource = "Open Inbox"
    static var openAppWhenRun = true

    func perform() async throws -> some IntentResult {
        // Zum Posteingang navigieren
        return .result()
    }
}

Neu in iOS 27 ist, wie viel weiter Siri diese Aktionen tragen kann. Apples Sichtweise: Siri übernimmt das Sprachverständnis, während sich Ihre App auf die Aktion konzentriert. Damit diese Aufteilung funktioniert, muss Siri wissen, was jede Aktion und jedes Stück Inhalt bedeutet.

Wie helfen App Schemas und Domains Siri, Ihre App zu verstehen?

@sarunw fasst es in drei Bausteinen zusammen. App Intents beschreiben die Aktion. App Schemas geben ihr eine Bedeutung, die Siri versteht. Domains fassen zusammengehörige Schemas zusammen.

Apple beschreibt Schemas als Spezialisierung von App Intents: Sie sind weiterhin App Intents, aber so geformt, dass Siri weiß, wie sie zu verarbeiten sind. Sie wenden eines mit einem Makro vor der Deklaration an: AppIntent(schema:), AppEntity(schema:) oder AppEnum(schema:). Apples Seite App schema domains nennt drei Gruppen:

Domain-GruppeBeispieleFunktioniert mit
Primäre DomainsAudio, Calendar, Camera, Clock, Mail, Maps, Messages, Notes, Phone, Photos, Reminders, System und In-App-SucheApple Intelligence und Siri
Domains für einen einzelnen ZweckAssistant, Visual IntelligenceEine bestimmte Systemoberfläche
Kurzbefehl-spezifische DomainsBooks, Browser, Files, Journaling, Presentation, Reader, Spreadsheet, Whiteboard, Word ProcessorNur Kurzbefehle, nicht Siri

Schema-Domains gab es erstmals mit iOS 18. In der WWDC26-Session übernimmt Apples Beispiel-Messaging-App das Schema sendMessage aus der Messages-Domain. Xcode 27 prüft außerdem beim Build auf zugehörige Schemas: Übernehmen Sie sendMessage ohne draftMessage, erhalten Sie einen Build-Fehler mit einem Fix-it, der den Stub erzeugt.

Wenn Ihr Inhalt zu keinem Schema passt, können Sie trotzdem einfache App Intents ausliefern. Jordan Morgans Artikel zu iOS 27 merkt an, dass noch nicht klar ist, wie viel vom neuen Siri-Verhalten Apps außerhalb eines Schemas erreicht.

Wie mache ich die Inhalte meiner App für Siri auffindbar?

Aktionen sind nur die halbe Geschichte; Siri muss auch das finden, wovon eine Person spricht. @sarunw nennt vier Schritte, die der Reihenfolge in Apples Session entsprechen:

SchrittAPIWarum
1. Inhalt beschreibenAppEntitySagt, was etwas ist, wie es identifiziert wird und welche Eigenschaften wichtig sind
2. Bedeutung geben@AppEntity(schema:)Sagt Siri, um welche Art von Inhalt es sich handelt
3. IndexierenIndexedEntityLegt Entities im semantischen Index des Systems ab
4. FallbackEntityStringQueryFindet Inhalte, die Sie nicht im Voraus indexieren können

Die Schritte 2 und 3 treffen in einer einzigen Deklaration zusammen. Dies ist die Nachrichten-Entity aus Apples WWDC26-Session:

@AppEntity(schema: .messages.message)
struct MessageEntity: IndexedEntity {

    // Der Textinhalt der Nachricht
    @Property(indexingKey: \.textContent)
    var body: AttributedString?
}

@sarunw zerlegt das in drei Entscheidungen: die Art des Inhalts, dass er in den Index gehört, und welches Feld indexiert wird. Laut Apple ist die Übernahme von IndexedEntity der primäre Weg, die Auflösung von Entities zu ermöglichen, denn indexierte Entities gelangen in den semantischen Index, mit dem Siri nach Bedeutung statt nach exakten Wörtern abgleicht.

Der Teil mit indexingKey ist eine Übersetzung. Wie @sarunw erklärt, heißt Ihre Eigenschaft body, Spotlight speichert ihren Wert aber als textContent. Ohne diese Zuordnung kann das System nicht wissen, welches Ihrer Felder den Nachrichtentext enthält.

Welche Teile sind neu?

IndexedEntity kam mit iOS 18 und @Property(indexingKey:) mit iOS 26, laut Apples Seite App Intents updates. iOS 27 fügt hinzu, dass Siri diesen Index für semantisches Matching nutzt, sowie neue Typen wie IndexedEntityQuery. In der Code-along-Session hält Apple den Index außerdem aktuell, indem nach dem Erstellen oder Aktualisieren von Inhalten indexAppEntities auf einem CSSearchableIndex aufgerufen wird und nach dem Löschen deleteAppEntities.

Was tun, wenn sich meine Inhalte nicht indexieren lassen?

Manche Inhalte lassen sich nicht im Voraus indexieren: Sie liegen auf einem Server, ändern sich ständig oder sind zu umfangreich. Für diese Fälle verweist Apple auf EntityStringQuery. Siri übergibt Ihrer App die Worte der Person, und Ihre App liefert die passenden Entities zurück. Dies ist Apples Beispiel:

struct ContactQuery: EntityStringQuery {
    func entities(matching string: String) async throws -> [ContactEntity] {
        let predicate = #Predicate<Person> { person in
            person.name.localizedStandardContains(string)
        }
        let descriptor = FetchDescriptor<Person>(predicate: predicate)
        let matches = try modelContext.fetch(descriptor)
        return matches.map(\.entity)
    }
}

Eine String-Query gleicht Text ab, nicht Bedeutung, und sie führt bei jeder Anfrage Ihren Code aus. Bevorzugen Sie IndexedEntity, wo immer es geht, und behalten Sie String-Queries für den Rest.

Woher weiß Siri, was in meiner App auf dem Bildschirm zu sehen ist?

@sarunw merkt an, dass Siri in iOS 27 lesen kann, was auf Ihrem Bildschirm zu sehen ist, Sie ihr aber sagen müssen, welche App Entity eine View darstellt. Apples Artikel Providing contextual cues to Apple Intelligence and Siri beschreibt zwei Wege, und die WWDC26-Session nennt die Regel: Verwenden Sie eine User Activity, wenn es ein primäres Element auf dem Bildschirm gibt, und View-Annotationen, wenn mehrere relevante Elemente sichtbar sind.

Wenden Sie bei einer Liste appEntityIdentifier(_:) auf jede Zeile an:

List {
    ForEach(messages) { message in
        MessageRow(message: message)
            .appEntityIdentifier(
                EntityIdentifier(
                    for: MessageEntity.self,
                    identifier: message.id
                )
            )
    }
}

Wenn ein einzelnes Element den Bildschirm füllt, annotieren Sie es mit einer NSUserActivity und setzen die Eigenschaft appEntityIdentifier der Activity. In SwiftUI gibt Ihnen der Modifier userActivity die Activity zum Konfigurieren. Apples Code-along wendet .userActivity mit einem EntityIdentifier auf die Detailansicht eines Termins an, zeigt den Code aber nicht, daher ist dies unsere Skizze:

EventDetailView(event: event)
    .userActivity("com.example.viewEvent") { activity in
        activity.title = event.title
        activity.appEntityIdentifier = EntityIdentifier(
            for: EventEntity.self,
            identifier: event.id
        )
    }

Beide APIs gab es schon vor iOS 27: Apples Dokumentation führt den SwiftUI-Modifier ab iOS 18.4 und die Eigenschaft von NSUserActivity ab iOS 18.2. Apple warnt außerdem davor, nicht zugehörige Entities anzuhängen: Eine Annotation sollte die Daten widerspiegeln, die die View zeigt. Für selbst gezeichnete Inhalte ohne eine View pro Entity verwenden Sie appEntityUIElements(_:).

Wie teile ich über Siri Daten mit anderen Apps?

Transferable ist das Protokoll hinter ShareLink und Drag and Drop. In iOS 27 nutzt Siri es ebenfalls. Sie geben eine IntentValueRepresentation zurück, und eine einzige Konformität deckt beide Richtungen ab.

Der Grund: Reine Dateien und Daten haben Grenzen. Apples Beispiel: Karten kann mit dem Bild einer Sehenswürdigkeit keine Wegbeschreibung dorthin erstellen. Für Personen, Orte und Namen übergibt IntentValueRepresentation (neu in iOS 27) einen Systemtyp, den andere Apps direkt verwenden können, etwa IntentPerson, PlaceDescriptor oder PersonNameComponents. Der Export aus Apples Session:

extension ContactEntity: Transferable {

    static var transferRepresentation: some TransferRepresentation {
        IntentValueRepresentation(
            exporting: \.person
        )
    }
}

Eingehende Werte nehmen einen von zwei Wegen. Apples Regel lautet: Inhalte, die bereits existieren, auflösen, und Inhalte, die noch nicht existieren, importieren. Wie @sarunw IntentValueQuery beschreibt, übergibt das System den eingehenden Wert, und Sie suchen in Ihren eigenen Daten und geben zurück, was passt:

struct ContactEntityQuery: IntentValueQuery {

    func values(for input: [IntentPerson]) async throws -> [ContactEntity] {
        let names = input.map(\.displayName)
        let descriptor = FetchDescriptor<Contact>()
        let contacts = try model.mainContext.fetch(descriptor)
        let matches = contacts.filter { contact in
            names.contains(where: { name in
                contact.name.localizedStandardContains(name)
            })
        }
        return matches.map(\.entity)
    }
}

Wenn nichts passt, erstellen Sie den Inhalt mit IntentValueRepresentation(exporting:importing:), das eine Closure entgegennimmt, die aus der eingehenden IntentPerson eine neue Entity baut. IntentValueQuery selbst stammt aus iOS 26, wo es für Visual Intelligence eingeführt wurde.

Ein Hinweis zur Vorsicht: Ein Entwickler berichtete in den Forums, dass die Export-Closures in einer Beta von iOS 27 nie ausgeführt wurden und Siri stattdessen um eine Klarstellung bat. Der Thread hat keine bestätigte Antwort, testen Sie also mit dem finalen Build.

Was ändert sich für Siri auf dem iPhone Duo?

An den APIs nichts. Wir haben keine Siri- oder App-Intents-API speziell für das iPhone Duo gefunden; der obige Code ist auf jedem iPhone mit iOS 27 derselbe.

Was sich ändert, ist die Fläche. Wenn das iPhone Duo aufgeklappt ist, meldet das innere Display in beide Richtungen reguläre Size Classes, daher zeigen viele Apps gleichzeitig eine Seitenleiste, eine Liste und eine Detailansicht. Unser Leitfaden zu Size Classes auf dem iPhone Duo behandelt diese Layout-Veränderung. Mehr auf dem Bildschirm bedeutet mehr, das Siri bei „dieses hier“ oder „die dritte Nachricht“ auflösen muss, und mehr Stellen, an denen eine fehlende Annotation Siri raten lässt.

Ein paar praktische Prüfungen:

  • Jede Spalte annotieren. Wenn eine geteilte Anordnung eine Liste neben einer Detailansicht zeigt, geben Sie den Listenzeilen appEntityIdentifier und der Detailansicht eine User Activity.
  • Annotationen an sichtbare Daten binden. Wenn das Gerät gefaltet wird und sich Ihr Layout ändert, sollten die Annotationen den Views folgen, die tatsächlich auf dem Bildschirm sind.
  • In Stufen validieren. Apple schlägt das Framework AppIntentsTesting für die Logik vor, dann Kurzbefehle für die Form des Intents, Spotlight für die Indexierung und Siri für den gesamten Ablauf.

Für die übrige Arbeit bei der Anpassung einer App nutzen Sie unsere Checkliste zur iPhone Duo Vorbereitung.

Die wichtigsten Punkte

  • App Intents beschreiben Aktionen; App Schemas, angewendet mit @AppIntent(schema:) und @AppEntity(schema:), geben ihnen eine Bedeutung, die Siri versteht; Domains fassen die Schemas zusammen.
  • Machen Sie Inhalte in vier Schritten auffindbar: App Entity, App Schema, IndexedEntity für den semantischen Index und EntityStringQuery als Fallback.
  • @Property(indexingKey:) ordnet Ihr Feld dem von Spotlight zu, etwa body zu textContent.
  • Für die Bildschirmerkennung verwenden Sie appEntityIdentifier auf Listenzeilen und NSUserActivity, wenn ein einzelnes Element den Bildschirm füllt.
  • Übernehmen Sie Transferable mit IntentValueRepresentation (iOS 27), um Daten zu teilen, und IntentValueQuery, um eingehende Werte abzugleichen.
  • Das iPhone Duo nutzt dieselben APIs; seine größere Fläche bringt lediglich mehr Inhalt auf den Bildschirm, der annotiert werden will.

Planen Sie als Nächstes Ihre App Store Screenshots für das iPhone Duo oder stöbern Sie in Apps und Spielen, die bereits für den Falz gebaut sind.

Häufige Fragen

Was brauche ich, damit meine App in iOS 27 mit Siri funktioniert?

Definieren Sie Ihre Aktionen als App Intents und Ihre Inhalte als App Entities und lassen Sie sie dann App Schemas aus einer passenden Domain wie Messages oder Calendar entsprechen. Schemas sagen Siri, was ein Intent oder eine Entity bedeutet, daher schreiben Sie keine Trainingsphrasen.

Was bewirkt IndexedEntity für Siri?

Wenn Sie IndexedEntity übernehmen, gelangen Ihre App Entities in den semantischen Index des Systems, sodass Siri sie anhand ihrer Bedeutung statt exakter Wörter findet. Apple nennt es den primären Weg, die Auflösung von Entities zu ermöglichen.

Wofür ist @Property(indexingKey:) da?

Es ordnet eine Eigenschaft Ihrer Entity einem Spotlight-Attribut zu. Zum Beispiel kann eine Nachrichten-Eigenschaft namens body unter dem Schlüssel textContent indexiert werden, sodass das System weiß, dass dieses Feld den Nachrichtentext enthält.

Woher weiß Siri, was auf dem Bildschirm meiner App zu sehen ist?

Sie sagen es ihr. Wenden Sie den Modifier appEntityIdentifier auf jede Zeile einer Liste an, damit jedes sichtbare Element einer App Entity zugeordnet ist, oder hängen Sie eine NSUserActivity mit einem appEntityIdentifier an, wenn ein einzelnes Element den Bildschirm füllt.

Wie lasse ich eine andere App über Siri meine Daten nutzen?

Lassen Sie Ihre App Entity Transferable entsprechen und geben Sie eine IntentValueRepresentation zurück, die einen Systemtyp wie IntentPerson exportiert. Um eingehende Werte anzunehmen, gleichen Sie sie mit einer IntentValueQuery ab, oder erstellen Sie neue Inhalte mit der Import-Variante.

Gibt es eine Siri-API speziell für das iPhone Duo?

Nicht, dass wir eine gefunden hätten. Die Siri-Integration nutzt auf jedem iPhone dieselben App-Intents-APIs. Auf dem größeren inneren Display des iPhone Duo kann mehr Inhalt gleichzeitig zu sehen sein, daher ist es wichtiger, jedes sichtbare Element zu annotieren.

Quellen

  1. Build intelligent Siri experiences with App Schemas (WWDC26) · Apple Developer
  2. Code-along: Make your app available to Siri (WWDC26) · Apple Developer
  3. Providing contextual cues to Apple Intelligence and Siri · Apple Developer Documentation
  4. App schema domains · Apple Developer Documentation
  5. App Intents updates · Apple Developer Documentation
  6. appEntityIdentifier(_:) · Apple Developer Documentation
  7. iOS 27, Your App, and Siri · Swiftjective-C (Jordan Morgan)
  8. An App Intent is an action your app can do · @sarunw on X
  9. App Intents, App Schemas and domains · @sarunw on X
  10. Making your app's content findable by Siri, in four steps · @sarunw on X
  11. Three things make a message searchable by meaning · @sarunw on X
  12. Three decisions, one declaration · @sarunw on X
  13. indexingKey is a translation · @sarunw on X
  14. Siri can read what's on your screen in iOS 27 · @sarunw on X
  15. When one item fills the screen, annotate it with NSUserActivity · @sarunw on X
  16. In iOS 27, Siri uses Transferable too · @sarunw on X
  17. IntentValueQuery: match the incoming value, or create it · @sarunw on X
  18. Folded, iPhone Duo is an iPhone. Unfolded, it's an iPad · @sarunw on X
  19. Is .appEntityIdentifier + Transferable the intended way to let Siri send an on-screen image to another app? · Apple Developer Forums

Machen Sie das Scharnier zum Teil Ihrer App.

Wir stellen Apps und Spiele vor, die mit dem iPhone Duo wirklich etwas anfangen. Schicken Sie uns Ihre mit einem Link zum App Store – oder sehen Sie sich an, was andere gebaut haben.

[email protected]