CI/CD 1. September 2026 ca. 12 Min. AppIntentsTesting App Intents

AppIntentsTesting-Autotests: Remote-Mac-Leitfaden 2026

Dieser Leitfaden zeigt unabhängigen iOS- und macOS-Entwicklern, wie AppIntentsTesting als echte Integrationsprüfung eingesetzt wird. Sie erhalten eine Szenario-orientierte Abdeckung für Intent-Ketten, Entity Query, Spotlight, Signierung und unbeaufsichtigte CI/CD-Läufe auf einem Remote-Mac.

AppIntentsTesting-Autotests: Remote-Mac-Leitfaden 2026

Dieser Leitfaden zeigt unabhängigen iOS- und macOS-Entwicklern, wie AppIntentsTesting als echte Integrationsprüfung eingesetzt wird. Sie erhalten eine Szenario-orientierte Abdeckung für Intent-Ketten, Entity Query, Spotlight, Signierung und unbeaufsichtigte CI/CD-Läufe auf einem Remote-Mac.

Symptom: Shortcuts funktioniert bei der manuellen Prüfung, aber ein fehlerhaftes Entity Query oder eine nicht mehr erreichbare Intent-Kette wird erst durch eine Nutzerrückmeldung entdeckt.

Schnellste Lösung: Legen Sie AppIntentsTesting-Autotests in einem UI Testing Target an, prüfen Sie echte App Intents samt Entity, Query und Systemintegration und führen Sie die kritischen Szenarien auf einem dauerhaft verfügbaren Remote-Mac aus.

Dieser Ansatz passt zu Projekten, die bereits App Intents einsetzen und stille Rückfälle in Siri, Shortcuts oder Spotlight vermeiden müssen. Er eignet sich außerdem für kleine Teams mit CI/CD sowie für Windows- und Linux-Entwickler, denen kein ständig verfügbarer Apple-Silicon-Mac zur Verfügung steht.

Hinweis: AppIntentsTesting befindet sich laut der offiziellen Apple-Dokumentation und den WWDC26-Beispielen im Beta-Kontext. Prüfen Sie API, Xcode-Version, Signierung und Laufzeitumgebung erneut, sobald Xcode 27 den Release Candidate oder die stabile Version erreicht.

01

Versionsstand und Prüfgrenzen

Zum Stand 01.09.2026 sind die offiziellen Beta-Dokumente zu App Intents Testing und die WWDC26-Beispiele veröffentlicht. Apple führt in seinen Veröffentlichungsnotizen Xcode 27 Beta 6 vom 24.08.2026 und iOS 27 Beta 7 vom selben Datum. Diese Angaben stammen aus den offiziellen Apple-Veröffentlichungsnotizen.

Die Versionsnummern sind für die Planung relevant, aber keine dauerhafte Kompatibilitätszusage. Ein Test, der mit einer Beta funktioniert, kann sich bis zum Release Candidate bei API-Verhalten, Simulator-Laufzeit, Target-Anforderungen oder Testausgaben ändern. Die Xcode-Systemanforderungen von Apple sollten deshalb direkt vor der Einrichtung und nach jedem größeren Update kontrolliert werden.

AppIntentsTesting ist nicht einfach eine weitere Ebene für gewöhnliche Unit-Tests:

  • Ein Unit-Test prüft isolierte Swift-Logik, etwa eine Parser- oder Validierungsfunktion.
  • Ein XCUITest steuert typischerweise die sichtbare Benutzeroberfläche und prüft Interaktionen.
  • AppIntentsTesting ruft den relevanten App-Intent-Pfad über einen eigenen Testprozess und die reale App-Integration auf.
  • Siri- und Shortcuts-Prüfungen durch Menschen zeigen, ob sich die Funktion im Alltag verständlich und erwartbar anfühlt.
  • Spotlight-Tests müssen zusätzlich klären, ob die Daten überhaupt indexiert und anschließend korrekt gefunden werden.

Die automatische Prüfung deckt also Integrationscode ab, ersetzt aber nicht die abschließende manuelle Kontrolle mit Siri, Shortcuts und Spotlight.

02

Testarchitektur im UI Testing Target

Warum AppIntentsTesting im UI Testing Target liegt

AppIntentsTesting gehört in ein UI Testing Target, weil der Test nicht nur eine einzelne Methode aufruft. Er muss die Verbindung zwischen Testprozess, signierter App, registriertem Intent, Entity-Daten, Query-Logik und Systemintegration erreichen. Apples offizielle Anleitung zum Testen von App-Intent-Code beschreibt genau diesen Integrationscharakter.

Das Target benötigt eine eindeutige Beziehung zu drei Projektbestandteilen:

  1. dem UI Testing Target, in dem die Testfälle liegen,
  2. der App, deren Bundle Identifier in der Projektkonfiguration eindeutig eingetragen ist,
  3. dem gemeinsamen Signierungsteam, das Test-Bundle und Anwendung vertrauenswürdig miteinander verbindet.

Bundle Identifier, Team-ID, Testpfade und Kontodaten gehören in Dokumentation und CI-Protokollen nur als anonymisierte Platzhalter. Verwenden Sie beispielsweise APP_BUNDLE_ID, TEAM_IDENTIFIER, TEST_USER und CI_WORKSPACE, statt reale Werte in diesen Leitfaden oder in öffentlich sichtbare Logs zu übernehmen.

Minimaler Intent als Referenz

Beginnen Sie nicht mit einer vollständigen Shortcuts-Automation. Erstellen Sie zunächst einen Intent ohne Netzwerkzugriff, Cloud-Abhängigkeit, persönlichen Account oder zufällige Daten. Der Intent sollte eine deterministische Eingabe annehmen und einen ebenso deterministischen Wert zurückgeben.

Dieser erste Test beantwortet eine begrenzte, aber wichtige Frage: Kann der Testprozess die App erreichen, den Intent erkennen, Parameter korrekt konvertieren und den Intent ausführen? Trennen Sie die Ergebnisse in drei Fehlerklassen:

  • Entdeckungsfehler: Der Test findet den Intent, das Target oder die erwartete Registrierung nicht.
  • Parameterfehler: Eine Eingabe wird nicht in den erwarteten Typ, Identifier oder Wert umgewandelt.
  • Ausführungsfehler: Der Intent wird gestartet, scheitert aber innerhalb seiner Geschäftslogik oder bei einer Abhängigkeit.

Diese Trennung verhindert, dass ein Signierungsproblem als fachlicher Fehler behandelt wird. Sie macht außerdem deutlich, welcher Entwickler den Fehler beheben muss: Projektkonfiguration, Datenmodell oder Intent-Implementierung.

03

Entity Query und verkettete Aufgaben

Ein App Intent mit statischen Parametern ist nur die niedrigste Prüfzone. In produktiven Shortcuts müssen Entities häufig über einen lesbaren Namen gesucht, über einen Identifier aufgelöst und anschließend als Eingabe an einen weiteren Intent übergeben werden.

Abdeckung von Entity Query

Für jede wichtige Entity sollten Sie mindestens drei Eigenschaften separat prüfen:

  • eine Zeichenkettenabfrage mit einem bekannten Testnamen,
  • die Auflösung eines bekannten Identifiers,
  • die Vollständigkeit der zurückgegebenen Felder.

Ein Query kann beispielsweise den richtigen Datensatz finden, aber einen veralteten Anzeigenamen oder ein leeres Zusatzfeld liefern. In Shortcuts wirkt sich das als fehlende Auswahl, falsche Zuordnung oder unverständliche Bestätigung aus. Für die Prüfung verwenden Sie feste Datensätze wie ENTITY_ALPHA und ENTITY_BETA; diese Werte dürfen nicht aus dem persönlichen Entwicklerkonto geladen werden.

Die Query-Logik muss auch mit leeren oder unbekannten Suchbegriffen umgehen. Ein einzelner erfolgreicher Treffer reicht nicht als Beweis, dass die Auswahl im Alltag stabil ist. Prüfen Sie deshalb zusätzlich, ob ein unbekannter Identifier kontrolliert abgewiesen wird und ob eine leere Ergebnisliste nicht fälschlich als gültige Entity weitergereicht wird.

Übergabe zwischen zwei Intents

Legen Sie anschließend eine kurze, aber echte Intent-Kette an:

  1. Intent A sucht oder erzeugt eine definierte Entity.
  2. Das Ergebnis von Intent A wird als Parameter an Intent B übergeben.
  3. Intent B verwendet Identifier und relevante Felder und liefert ein überprüfbares Resultat.
  4. Der Test vergleicht nicht nur den Exit-Status, sondern auch die fachlich erwartete Ausgabe.

Damit prüfen Sie Parameterübergabe, Typkompatibilität und Serialisierung gemeinsam. Ein Test, der lediglich beide Intents einzeln erfolgreich ausführt, würde einen Fehler zwischen den beiden Schritten übersehen.

Die Testdaten müssen nach jedem Lauf wieder in einen bekannten Zustand gelangen. Legen Sie keine Daten an, die mit einem persönlichen Apple-Account, zufälligen Zeitstempeln oder einem gemeinsam genutzten Simulatorzustand verbunden sind. Parallel laufende Jobs können sonst denselben Datensatz ändern und scheinbar zufällige Fehlschläge erzeugen.

04

Spotlight und sichtbare Systemoberflächen

Spotlight-Indexierung getrennt bewerten

Die Suche nach einer bekannten Entity in Spotlight ist eine andere Fehlerklasse als ein fehlerhaftes Entity Query. Unterscheiden Sie mindestens diese Zustände:

  • Die Indexierung wurde noch nicht erzeugt.
  • Der Index enthält einen älteren oder bereits entfernten Datensatz.
  • Der Datensatz ist vorhanden, aber die Such- oder Filterlogik liefert ihn nicht.
  • Die Entity wird gefunden, verweist aber auf eine ungültige Detailansicht.

Apples Hinweise zur Verfügbarkeit von App Entities in Spotlight und die Dokumentation zu Core Spotlight sollten die Grundlage für die erwarteten Indexierungs- und Löschschritte bilden. Testen Sie nicht unmittelbar nach jeder Änderung blind gegen eine Suchanfrage. Warten Sie auf den im Projekt vorgesehenen Indexierungszustand und protokollieren Sie, ob der Index neu aufgebaut, aktualisiert oder bereinigt wurde.

View Annotation kontrollieren

Für eine sichtbare App-Oberfläche sollte ein Test-Intent zu einer eindeutig bestimmbaren Seite navigieren. Danach kontrolliert der Test, ob die View Annotation tatsächlich die erwartete Entity offenlegt und nicht nur eine optisch ähnliche Ansicht anzeigt.

Diese Prüfung ist besonders wertvoll, wenn der Intent-Aufruf zwar erfolgreich ist, aber die anschließende Navigation auf einem Standardbildschirm endet. Verwenden Sie stabile Testkennungen und keine Bildschirmkoordinaten. Eine Koordinate kann sich durch Gerätegröße, Sprache oder Accessibility-Einstellungen ändern, während eine definierte Entity-Referenz die fachliche Absicht des Tests beschreibt.

Die automatisierte Spotlight- und Annotation-Prüfung darf nicht als vollständiger Siri- oder Shortcuts-Ersatz gelten. Die finale manuelle Abnahme sollte weiterhin Sprachvarianten, Rückfragen, Bestätigungen, Abbruch, Berechtigungen und die Verständlichkeit der Ergebnisansicht abdecken. Apples WWDC26-Ablauf zur Prüfung von App-Intent-Systemerlebnissen ist dafür die passende Referenz.

05

Umgebungsisolation und Bereinigung

Ein zuverlässiger AppIntentsTesting-Lauf beginnt mit einer kontrollierten Ausgangslage. Verwenden Sie ein ausschließlich für Tests bestimmtes Intent-Einstiegssignal, das in einer Debug-Konfiguration verfügbar ist, nicht auffindbar bleibt und keine Veröffentlichungsschnittstelle bildet.

Der Ablauf sollte diese Zustände selbstständig herstellen:

  • Testdaten anlegen oder auf einen bekannten Ausgangswert zurücksetzen,
  • die definierte Seite über einen Test-Intent öffnen,
  • Entity Query und Intent-Kette ausführen,
  • Spotlight-Daten aktualisieren und die erwartete Entity suchen,
  • alle erzeugten Daten am Ende löschen.

Die Initialisierung und Bereinigung müssen auch dann ausgeführt werden, wenn ein Zwischenschritt fehlschlägt. Andernfalls hinterlässt ein abgebrochener Job Daten, die den nächsten Lauf beeinflussen. Für parallele CI-Aufträge braucht jeder Lauf einen eigenen Namensraum, beispielsweise RUN_IDENTIFIER, statt denselben festen Datensatz zu überschreiben.

Prüfen Sie vor dem Archivieren der Release-App, dass der Testeinstieg nicht enthalten ist. Das betrifft nicht nur den Quellcode, sondern auch Feature Flags, Debug-Konfigurationen, Testdaten, sichtbare Intent-Namen und Berechtigungen. Ein interner Test-Intent, der versehentlich in einer Produktionssignatur landet, ist ein Veröffentlichungsrisiko.

06

Entscheidungsrahmen für Testarten

Die folgende Gegenüberstellung verhindert, dass ein einzelner Testtyp für alle Fehler verwendet wird:

Prüfbereich Geeigneter Test Aussage bei Erfolg Nicht abgedeckt
Reine Swift-Logik Unit-Test Berechnung und Validierung funktionieren isoliert Registrierung, Signierung und Systemintegration
Sichtbare Navigation XCUITest Oberfläche reagiert auf definierte Interaktionen Vollständige Entity- und Intent-Kette
Intent, Entity und Query AppIntentsTesting App-Intent-Pfad ist über den Testprozess erreichbar Verständlichkeit einer echten Siri-Unterhaltung
Spotlight-Daten Spotlight- beziehungsweise Core-Spotlight-Prüfung Indexierung und bekannte Suche liefern den erwarteten Datensatz Sprachliche Qualität der Siri-Antwort
End-to-End-Abnahme Manuelle Siri- und Shortcuts-Prüfung Nutzererlebnis wirkt vollständig und verständlich Dauerhafte Regressionserkennung bei jedem Commit

Für einen Beta-Einstieg genügt ein kleiner Satz aus einem deterministischen Intent, einer Entity-Abfrage, einer verketteten Aufgabe, einer Spotlight-Suche und einem Neustartlauf. Erweitern Sie erst danach um Berechtigungen, Fehlerdialoge und sprachabhängige Varianten.

07

Remote-Mac und unbeaufsichtigte CI/CD-Läufe

Kann AppIntentsTesting in CI/CD laufen?

Ja, sofern die Umgebung die von Apple erwarteten Projekt-, Signierungs-, Simulator- und Testbedingungen reproduzierbar bereitstellt. Der entscheidende Punkt ist nicht die grafische Fernbedienung, sondern ein Apple-Silicon-Mac mit festem Xcode- und SDK-Stand, verfügbarer Simulator-Laufzeit, korrekt installierten Targets und einem nach Neustarts wiederherstellbaren Testzustand.

Ein Remote-Mac eignet sich deshalb als iOS-Build- und Testserver, wenn der Job ohne dauerhaft geöffnete Fernsteuerung gestartet werden kann. Für die laufende Wartung kann VNCMac für einen gemieteten Remote-Mac geprüft werden; die konkrete Eignung hängt von Xcode-Version, Laufzeit, Signierung und dem gewünschten Zugriffspfad ab.

Signierung auf dem Remote-Mac

Die Code-Signierung muss auf dem Testknoten nicht nur einmal funktionieren, sondern nach einer Abmeldung, einem Neustart und einer erneuten CI-Anmeldung reproduzierbar sein. Halten Sie Zertifikate, Provisioning Profiles, Bundle Identifier und Team-Zuordnung getrennt für Debug-, Test- und Release-Aufgaben.

Apple beschreibt die gemeinsame Nutzung von Team-Signaturzertifikaten. Nutzen Sie diese Anleitung als Referenz und speichern Sie keine privaten Schlüssel, Session-Tokens oder App-Store-Credentials in frei lesbaren Repository-Dateien. In Logs gehören nur maskierte Werte; Pfade sollten als CI_WORKSPACE und Konten als TEST_ACCOUNT erscheinen.

Getrennte Job-Routen

Ordnen Sie die Aufgaben nach ihrer Aussage:

CI/CD-Route Typischer Inhalt Bedeutung eines Fehlers Reaktion
Schneller Commit-Job Unit-Tests und ausgewählte App-Intent-Basistests Logik oder grundlegende Intent-Erreichbarkeit ist gestört Merge blockieren, wenn Kernfunktion betroffen ist
Integrationsjob Entity Query, Parameterkette, Spotlight und Navigation Systemintegration oder Testdaten sind nicht reproduzierbar Artefakte prüfen und Umgebung isolieren
Veröffentlichungsjob Release-Signatur, Archive und Upload-Vorbereitung Produktionssignierung oder Release-Konfiguration ist fehlerhaft Nicht veröffentlichen, Credentials und Profile prüfen
Nacht- oder Wartungslauf Neustart, vollständige Bereinigung und Wiederholung Remote-Mac oder Wiederherstellung ist nicht dauerhaft belastbar Knoten reparieren, bevor weitere Tests darauf vertrauen

Die Route sollte xcresult, Konsolenausgabe und Umgebungsdaten als Artefakte speichern. Dazu gehören Xcode-Version, SDK, Simulator-Laufzeit, Git-Revision, verwendete Konfigurationsbezeichnung und ein anonymisierter Fehlerstatus. So lässt sich ein fehlgeschlagenes Entity Query untersuchen, ohne die Remote-Sitzung live beobachten zu müssen.

08

Wiederanlauf und Zustandsprüfung

Die wichtigste Remote-Mac-Prüfung ist kein einzelner grüner Lauf, sondern die Wiederherstellung nach einem kontrollierten Neustart. Prüfen Sie nacheinander:

  1. Der Mac startet und ist über den vorgesehenen Administrationsweg erreichbar.
  2. Der CI-Runner beziehungsweise der geplante Job startet ohne manuelle Desktop-Anmeldung.
  3. Xcode erkennt Projekt, Simulator und Test Target.
  4. Die erforderliche Signierungsidentität ist verfügbar, ohne Geheimnisse im Log auszugeben.
  5. Testdaten werden neu initialisiert, statt aus einem alten Simulatorzustand zu stammen.
  6. xcresult und Konsolenlogs werden auch nach dem Neustart am erwarteten Ort abgelegt.

Bei einem Remote-Mac darf die Testausführung nicht davon abhängen, dass eine VNC-Sitzung geöffnet bleibt. VNC ist für Diagnose und manuelle Abnahme nützlich; der eigentliche CI-Lauf sollte über einen reproduzierbaren Runner, SSH oder eine vergleichbare nicht-interaktive Steuerung erfolgen.

Wer mehrere Regionen oder Zugriffswege vergleichen muss, kann etwa die Remote-Mac-Standorte in Europa und Asien prüfen. Für die Testqualität ist jedoch die feste Werkzeugkette wichtiger als ein vermeintlich günstiger Standort: Ein wechselndes SDK, eine fehlende Simulator-Laufzeit oder ein abgelaufenes Profil erzeugt mehr Wartungsarbeit als eine kleine Standortdifferenz.

09

Mindestabnahme und Einsatzentscheidung

Bewerten Sie die Einführung mit einer klaren Abnahmeliste:

  • Ein unabhängiger Intent wird über AppIntentsTesting entdeckt und erfolgreich ausgeführt.
  • Parameter werden in den erwarteten Typ und Wert umgewandelt.
  • Eine bekannte Entity wird über Zeichenkette und Identifier gefunden.
  • Das Ergebnis des ersten Intents kann an den zweiten Intent übergeben werden.
  • Spotlight findet eine frisch angelegte und anschließend bereinigte Entity.
  • Eine Testnavigation öffnet die erwartete Seite und annotiert die richtige Entity.
  • Ein Lauf nach Neustart erzeugt dieselben Artefakte und Ergebnisse.
  • Die Release-Konfiguration enthält keinen sichtbaren Testeinstieg.
  • Siri und Shortcuts werden zusätzlich manuell mit realistischen Formulierungen geprüft.

Die Entscheidung hängt vom Reifegrad des Projekts ab:

  • Nur lokale Erprobung: sinnvoll, wenn App Intents gerade eingeführt werden und die API noch stark von Beta-Änderungen betroffen ist.
  • Prüfung bei jedem relevanten Commit: sinnvoll, wenn eine zentrale Intent-Kette bereits produktive Nutzer erreichen kann.
  • Dauerhafter Remote-Mac-Testknoten: sinnvoll, wenn mehrere Entwickler, regelmäßige Releases oder wiederkehrende Spotlight- und Signierungsfehler den manuellen Aufwand erhöhen.

AppIntentsTesting sollte in der Beta-Phase zunächst die kritischen Pfade absichern, nicht sämtliche manuellen Abnahmen ersetzen. Halten Sie für API-Änderungen eine Rückfallmöglichkeit bereit, etwa einen kleineren klassischen UI-Test und eine dokumentierte manuelle Siri-/Shortcuts-Prüfung. Nach dem Xcode-27-Release-Candidate und erneut nach der stabilen Veröffentlichung müssen API, Toolchain und Testergebnisse neu verifiziert werden.

Wenn die aktuelle Lösung aus einem persönlichen Entwicklungs-Mac, gelegentlich gestarteten Simulatoren und manuell erneuerten Signierungsprofilen besteht, entstehen drei konkrete Nachteile: Der Rechner ist nicht dauerhaft verfügbar, der Testzustand bleibt häufig an einer lokalen Sitzung hängen und Fehler lassen sich ohne gespeicherte Artefakte nur schwer nachstellen. Für eine kurze Migrationsphase oder ein kleines Projekt kann das ausreichen; als dauerhafte Regressionserkennung ist es jedoch unnötig fragil.

Sobald die Mindestabnahme mit dem eigenen Projekt erfolgreich ist, ist ein eigener Remote-Mac-Testknoten die sachlichere Alternative zu einem ungenutzten Mac-Kauf. Wenn kein Apple-Silicon-Mac dauerhaft für Xcode 27 bereitsteht, können Sie bei VNCMac einen Remote-Mac für einen festen Testzeitraum prüfen und zunächst mit den eigenen Intent-Tests, einem Neustartlauf sowie der xcresult-Ablage validieren, ob die Umgebung den Anforderungen entspricht. Für dauerhaft schwere Builds oder notwendige physische Geräteanschlüsse bleibt ein eigener Mac die passendere Wahl; für zeitlich begrenzte Tests und unbeaufsichtigte CI/CD-Läufe bietet die Miete dagegen einen kontrollierbaren Einstieg.