Swift Testing vs XCTest: Müssen unabhängige Entwickler 2026 vollständig migrieren?

Diese Entscheidungshilfe zeigt unabhängigen Entwicklern, warum eine vollständige Umschreibung bestehender XCTest-Suites im Jahr 2026 meist nicht sinnvoll ist. Sie ordnet neue Tests, UI- und Performance-Tests, Swift Packages sowie Remote-CI nach Migrationspriorität und enthält eine prüfbare Abnahmestrategie.

Swift Testing vs XCTest sollte 2026 nicht zu einer vollständigen Neuschreibung führen: Neue Unit- und fachliche Integrationstests gehören bevorzugt in Swift Testing, während bestehende XCTest-Tests schrittweise migriert werden und UI-, Performance- sowie bestimmte Objective-C-Tests in XCTest bleiben. Diese Aufteilung ist für Projekte mit Remote-CI besonders wichtig, weil eine erzwungene Vereinheitlichung die Rückverfolgbarkeit von Fehlern verschlechtern kann.

Für wen diese Entscheidungshilfe gedacht ist:
Für unabhängige Entwickler, die eine große XCTest-Suite betreuen und ihre bestehende Regressionsbasis nicht durch eine Komplettmigration gefährden möchten.
Für neue Projekte, Swift-Package-Maintainer und Teams, die Tests über einen Remote Mac oder eine CI/CD-Pipeline mit konsistentem Toolchain-Stand ausführen.

00Migrationsgrenze nach Testart

Die erste Entscheidung sollte nicht vom Dateinamen, sondern von der Fähigkeit des Tests ausgehen. Ein Test, der Geschäftslogik direkt aufruft, folgt anderen Regeln als ein Test, der eine Benutzeroberfläche bedient oder Laufzeitverhalten misst.

Testtyp Entscheidung 2026 Begründung für die Abgrenzung
Neue Unit-Tests Migrieren zu Swift Testing Moderne Makros, Traits und parametrische Testfälle passen gut zu neuer Swift-Fachlogik.
Fachliche Integrationstests Vorrangig Swift Testing Direkte Aufrufe von Services und Modulen lassen sich klar als Swift-Test ausdrücken.
Bestehende, selten geänderte Unit-Tests Zunächst XCTest behalten Eine Umschreibung ohne konkreten Wartungsvorteil bindet Zeit und erhöht das Änderungsrisiko.
UI-Automatisierung XCTest behalten UI-Fahrten, Elemente, Bildschirme und Systeminteraktionen benötigen weiterhin die XCTest-Infrastruktur.
Performance-Messungen XCTest behalten Mess- und Baseline-Szenarien sollten nicht in reine Logiktests umgewandelt werden.
Bestimmte Objective-C-Ausnahmen XCTest behalten oder separat prüfen Sprachbrücken und spezielle Ausnahmefälle können von der Migrationsunterstützung abweichen.

Apple beschreibt Swift Testing als ergänzenden modernen Testansatz und stellt zugleich eine offizielle Übersicht zum Testen in Xcode bereit. Daraus folgt keine pauschale Abkündigung von XCTest. Auch die Apple-Dokumentation zur Migration von XCTest sollte deshalb als Anleitung für eine schrittweise Umstellung gelesen werden, nicht als Aufforderung, jede Testdatei sofort umzuschreiben.

Für die Entscheidung zählen mindestens drei versteckte Kosten:

  • Verlust der Testsemantik: Eine mechanische Ersetzung von Assertions kann verändern, wann ein Test abbricht, welche Vorbedingung sichtbar wird und welchem Fehler ein Fehlschlag zugeordnet wird.
  • Unklare CI-Diagnose: Wenn Discovery, Test Plan oder Ergebnisdateien nach der Migration anders funktionieren, kann eine Pipeline zwar noch rot werden, aber weniger brauchbare Hinweise liefern.
  • Doppelte Pflege während der Übergangsphase: Gemeinsame Helper, Fixtures und Testdaten müssen so gestaltet werden, dass beide Frameworks dieselbe fachliche Aussage prüfen, ohne zwei abweichende Implementierungen zu erzeugen.

Die Frage „Kann Swift Testing XCTest vollständig ersetzen?“ ist daher nur für einen begrenzten Teil der Suite mit Ja zu beantworten: bei neuen, direkt ausführbaren Swift-Tests häufig; bei UI-Automatisierung, Performance-Messung und einigen Objective-C-Szenarien nicht als allgemeine Regel.

01Neue Projekte mit Swift Testing

Für ein neues iOS- oder macOS-Projekt empfiehlt sich eine kleine Swift-Testing-Basis, statt zunächst eine alte XCTest-Struktur nachzubauen. Der Test soll eine fachliche Regel prüfen, nicht die Testbibliothek selbst. Ein minimales Muster kann so aussehen:

import Testing
@testable import AppCore

struct PriceCalculatorTests {
    @Test("berechnet den Nettobetrag korrekt")
    func calculatesNetAmount() {
        let result = PriceCalculator(gross: 119, taxRate: 0.19).net
        #expect(result == 100)
    }
}

Das Beispiel enthält bewusst keine realen Projektpfade, Konten, Schemes oder Protokollausgaben. Für produktive Tests sind die Werte an die Domäne anzupassen; sie dürfen nicht nur deshalb als „migriert“ gelten, weil die Syntax kompakter wirkt.

Vier Bausteine lösen unterschiedliche Wartungsprobleme:

  • @Test macht aus einer Methode einen Testfall, ohne dass die Suite an die ältere Methodenkonvention gebunden wird.
  • #expect formuliert eine überprüfbare Erwartung und unterstützt eine aussagekräftige Fehlerdiagnose.
  • #require eignet sich für Vorbedingungen, ohne die der restliche Test keinen sinnvollen Aussagewert hätte.
  • Traits und parametrische Tests bündeln Varianten, die sonst als viele nahezu identische Methoden gepflegt würden.

Die Swift-Testing-Dokumentation von Apple und das offizielle Swift-Testing-Repository sind für die konkrete Syntax maßgeblich. Entscheidend ist jedoch die Grenze: Sobald ein Test einen Bildschirm öffnen, ein UI-Element bedienen oder eine Performance-Messung mit etablierter XCTest-Auswertung durchführen muss, sollte das neue Projekt zusätzlich ein XCTest-UI-Tests-Target behalten.

Bedingte Auswahl für ein neues Projekt

  • Wenn der Test ausschließlich Swift-Code, Geschäftsregeln, Parser, Mapper oder Services direkt aufruft, dann Swift Testing verwenden.
  • Wenn der Test mehrere Module fachlich verbindet, aber keine Benutzeroberfläche und keine Geräteinteraktion benötigt, dann Swift Testing als erste Option wählen.
  • Wenn der Test Bildschirmnavigation, Accessibility-Elemente oder Systemdialoge steuert, dann XCTest UI Tests beibehalten.
  • Wenn eine Laufzeitmessung, Baseline oder Performance-Auswertung erforderlich ist, dann XCTest nicht nur aus Gründen der Einheitlichkeit entfernen.
  • Wenn der Test Objective-C-Ausnahmen oder eine besondere Sprachbrücke validiert, dann zunächst einen kleinen Kompatibilitätstest ausführen und die bestehende XCTest-Variante nur nach belegter Gleichwertigkeit ablösen.

Die offiziellen Xcode-Hinweise zum Hinzufügen von Tests helfen dabei, die Targets und Schemes korrekt zu trennen. Die Trennung verhindert, dass ein Team aus einer vermeintlichen Framework-Frage eine unnötige Umstrukturierung des gesamten Projekts macht.

02Bestehende Apps nach Änderungsfrequenz

Bei einer vorhandenen App ist die Anzahl der Testdateien kein sinnvoller Migrationsplan. Eine große, selten angefasste Suite kann stabiler sein als wenige Tests, die bei jeder Produktänderung angepasst werden. Deshalb sollte die Priorität aus dem Änderungsverhalten des Projekts entstehen.

Drei Wartungsgruppen

Erstens: Tests, die gerade geändert werden.
Wenn ein Entwickler ohnehin eine fachliche Regel erweitert oder einen fehlerhaften Test repariert, ist dies der günstigste Zeitpunkt für eine Umstellung. Die Änderung erhält einen überprüfbaren fachlichen Anlass, und die alte sowie die neue Variante können direkt verglichen werden.

Zweitens: gemeinsam genutzte Helper.
Fixtures, Factory-Methoden, Zeit- und Netzwerkabstraktionen oder Testdaten werden oft von vielen Tests verwendet. Diese Komponenten sollten vor der breiten Migration untersucht werden. Ein gemeinsamer Helper ist nur dann wirklich wiederverwendbar, wenn beide Frameworks dieselbe Vorbereitung, Isolation und Aufräumlogik erhalten.

Drittens: stabile Tests mit niedriger Änderungsrate.
Solche Tests bleiben zunächst in XCTest. Die Migration erhält erst dann Priorität, wenn ein konkreter Vorteil entsteht, etwa eine notwendige parametrische Struktur oder eine bessere Einbindung in neue Swift-Module.

Apple behandelt die Organisation von Tests als eigenen Teil der Feedbackqualität; die Dokumentation zur Testorganisation in Xcode ist deshalb relevanter als ein bloßer Vergleich von Attributen und Assertions.

Gemeinsamer Target-Betrieb

Swift Testing und XCTest können in einem Test-Bundle parallel vorkommen, sofern Projektstruktur, Toolchain, Scheme und Testausführung diesen Mischbetrieb korrekt unterstützen. Das bedeutet jedoch nicht, dass jede Kombination automatisch dieselben Discovery- oder Filtereigenschaften besitzt. Ein Test Plan kann Testgruppen, Konfigurationen und Ausschlüsse unterschiedlich behandeln; swift test folgt wiederum dem Swift-Package-Workflow und ist nicht einfach ein zweiter Name für den Xcode-Testlauf.

Vor jeder Migration sollte der Entwickler deshalb folgende Beweise sichern:

  • Ein absichtlich fehlschlagender Test wird vor und nach der Änderung entdeckt.
  • Die Fehlermeldung verweist auf denselben fachlichen Fehler und nicht nur auf eine syntaktische Assertion.
  • Skip- und Condition-Logik verhalten sich gleich.
  • Ein #require-Fehler beendet nur den davon abhängigen Testteil und verschleiert nicht die eigentliche Ursache.
  • Die Ergebnisdatei lässt erkennen, ob der Fehler aus Swift Testing, XCTest oder einem UI-Tests-Target stammt.

Achtung: „Beide Frameworks kompilieren“ ist keine ausreichende Abnahme. Ein Bundle kann erfolgreich gebaut werden, während Discovery, Testfilter, Test Plan oder Ergebnisarchivierung im CI-Lauf anders reagieren als im lokalen Xcode-Fenster.

03UI, Performance und Objective-C im Doppelbetrieb

Der Doppelbetrieb ist in diesen Fällen keine automatisch abzubauende technische Schuld. Er ist eine bewusste Zuordnung nach Testfähigkeit:

  • Swift Testing prüft fachliche Logik, Zustandsübergänge, Datenverarbeitung und direkt aufrufbare Swift-Komponenten.
  • XCTest übernimmt UI-Automatisierung, die Bedienung einer laufenden Anwendung, bestimmte Performance-Szenarien und Fälle, die an vorhandene Objective-C-Testmechanismen gebunden sind.
  • Gemeinsame Testdaten und Helper dürfen geteilt werden, wenn sie keine implizite Annahme über das jeweilige Assertion-Modell enthalten.
  • Test Plan und Scheme müssen beide Testarten ausdrücklich einschließen, wenn die Regression vollständig bleiben soll.

UI-Tests sollten nicht in Unit-Tests umbenannt werden, nur weil eine Migrationstabelle sonst vollständiger aussieht. Ein Test, der eine Ansicht öffnet und eine Systeminteraktion kontrolliert, prüft einen anderen Vertrag als ein Test, der einen View-Model-Zustand direkt auswertet. Wird diese Grenze verwischt, sinkt die Aussagekraft der Suite.

Für Performance-Tests gilt eine ähnliche Vorsicht. Eine fachliche Berechnung kann in Swift Testing abgedeckt werden; daraus folgt aber nicht, dass eine Messung von Ausführungszeiten, Speicherverhalten oder wiederholten Abläufen dieselbe Testart ist. Die konkrete Unterstützung kann sich außerdem zwischen stabiler Xcode-Version und Beta-Werkzeugen verändern. Xcode 27 muss zum genannten Stand als Beta behandelt werden; die Xcode-27-Beta-Release-Notes sind daher vor jeder Pipeline-Entscheidung zu prüfen.

04Swift Package und Plattformgrenzen

Swift Package Manager und eine Apple-Plattform-App haben nicht denselben Testeingang. Ein Package kann Tests über swift test ausführen, während eine App ihre Tests über Xcode, Scheme und Test Plan organisiert. Ein erfolgreiches Ergebnis im Package-Workflow beweist deshalb nicht automatisch, dass UI-, Signierungs- oder geräteabhängige Tests der App in gleicher Weise funktionieren.

Die Plattformfrage sollte in drei Ebenen zerlegt werden:

  1. Reine Swift-Logik: Kann sie ohne Apple-spezifische APIs gebaut und ausgeführt werden, ist eine frühere Prüfung auf einer anderen unterstützten Plattform denkbar.
  2. Apple-spezifische Integration: Sobald Frameworks, App-Lifecycle, Bundle-Ressourcen, Simulatoren oder Plattformdienste beteiligt sind, wird macOS als Prüfplattform relevant.
  3. App-Store- und Gerätevalidierung: Archive, UI-Automatisierung auf Apple-Plattformen und die endgültige Integration in Xcode benötigen einen reproduzierbaren Apple-Toolchain-Stand.

Diese Aufteilung verhindert eine häufige Fehlinterpretation: Ein grüner swift test-Lauf wird nicht als Beweis für eine vollständig grüne Xcode-Testpipeline verwendet. Für jede Ebene müssen Einstieg, Testumfang und Ergebnisformat separat dokumentiert werden.

05Remote-CI mit reproduzierbarer Abnahme

Ein Remote Mac ist für die Migration dann sinnvoll, wenn nicht nur ein einzelner Testlauf, sondern die Wiederholbarkeit der gesamten Testaufgabe geprüft werden soll. Gerade bei zwei Frameworks müssen Entwickler zuerst die Umgebung einfrieren, bevor sie Unterschiede in den Ergebnissen bewerten.

Fünf Schritte für die Abnahme

  1. Toolchain festhalten: Xcode-Version, Swift-Version, Betriebssystem, Scheme und verwendeten Test Plan in der CI-Konfiguration dokumentieren. Für Xcode 27 ist zusätzlich der konkrete Beta-Stand zu vermerken, weil sich Beta-Verhalten ändern kann.

  2. Testeingänge trennen: Den Swift-Package-Lauf, den Xcode-Testlauf und den UI-Testlauf nicht unter einer unpräzisen Bezeichnung zusammenfassen. Jeder Eingang benötigt einen eigenen Befehl oder einen klaren Abschnitt im Pipeline-Protokoll.

  3. Baseline erzeugen: Vor der Migration werden Discovery, erfolgreiche Tests, absichtlich ausgelöste Fehler, übersprungene Tests und die erzeugten Ergebnisdateien archiviert. Es geht nicht um eine behauptete Beschleunigung, sondern um Vergleichbarkeit.

  4. Kleine Testgruppe migrieren: Zuerst einen veränderten Unit-Test, einen parametrischen Fall und einen gemeinsam genutzten Helper umstellen. Danach wird dieselbe Fehlerbedingung erneut ausgelöst. Erst wenn die fachliche Aussage und die Fehlerzuordnung übereinstimmen, folgt die nächste Gruppe.

  5. Unterbrechung simulieren: Der Remote-Lauf wird nach einem kontrollierten Abbruch oder Neustart wiederholt. Die Abnahme ist erst belastbar, wenn Unit-Tests und UI-Tests erneut gestartet werden können und die Ergebnisdateien vollständig am vorgesehenen Speicherort ankommen.

Die Apple-Anleitung zum Ausführen und Interpretieren von Tests sollte für die Auswertung der Ergebnisse herangezogen werden. Die Release Notes und die Migrationsdokumentation sind vor dem produktiven Umschalten nochmals zu vergleichen, insbesondere wenn Xcode 27 von Beta zu Release Candidate oder zur finalen Version wechselt.

Bedingungen für die strengere Prüfung

Ein sofortiger Wechsel in die strengste Interoperabilitätsprüfung ist nicht immer der beste erste Schritt. Wenn gemeinsame Helper noch unterschiedliche Initialisierung oder Aufräumlogik besitzen, kann ein harter Umschaltpunkt die Pipeline unübersichtlich machen. Besser ist folgende Reihenfolge:

  • Wenn beide Frameworks entdeckt werden und die gemeinsame Testdatenbasis stabil ist, dann die Interoperabilitätsprüfung erweitern.
  • Wenn Discovery oder Ergebniszuordnung abweicht, dann zunächst Test Plan, Scheme und Filter vergleichen.
  • Wenn nur UI-Tests scheitern, dann das UI-Tests-Target und die Simulator- beziehungsweise Geräteumgebung isoliert prüfen, statt Swift Testing als Ursache anzunehmen.
  • Wenn ein Neustart Ergebnisdateien unvollständig hinterlässt, dann zuerst Artefaktpfad, Berechtigungen und Aufräumprozess korrigieren.
  • Wenn ein Fehler nur in der Beta-Version erscheint, dann ihn als versionsabhängig dokumentieren und nicht als allgemeine Framework-Grenze verallgemeinern.

Wer die Remote-Mac-Umgebung von NUKCLOUD für solche Testläufe einsetzt, sollte die Abnahme anhand des eigenen Test Plans durchführen. Entscheidend sind nicht allgemeine Leistungsversprechen, sondern der konkrete Ablauf aus Checkout, Testausführung, Ergebnisarchivierung und Wiederanlauf. Für CI/CD-Integrationen kann zusätzlich eine Anleitung zur iOS-Testautomatisierung als Ausgangspunkt dienen, sofern sie mit dem tatsächlich verwendeten Scheme und Test Plan abgeglichen wird.

06Entscheidungsplan für die Migration

Die folgende Bedingungsliste ist für eine laufende App belastbarer als ein pauschales „alles neu“:

  • Wenn ein Test neu geschrieben wird und direkt Swift-Geschäftslogik prüft, dann Swift Testing wählen.
  • Wenn ein bestehender XCTest-Test regelmäßig wegen einer Produktänderung angefasst wird, dann bei dieser Änderung eine inkrementelle Migration prüfen.
  • Wenn ein Test stabil ist und keine aktuelle Wartung verursacht, dann XCTest vorerst behalten.
  • Wenn ein Test UI-Fahrten, Performance-Messungen oder spezielle Objective-C-Ausnahmen abdeckt, dann XCTest beibehalten.
  • Wenn ein gemeinsamer Helper von beiden Frameworks verwendet wird, dann zuerst seine Semantik und Isolation abnehmen.
  • Wenn eine CI-Pipeline beide Frameworks ausführt, dann Ergebnisse, Fehlerzuordnung und Artefakte getrennt vergleichen.
  • Wenn der Remote-Lauf nach Unterbrechung nicht reproduzierbar ist, dann die Migration nicht als abgeschlossen markieren.
Entscheidungspunkt Swift Testing priorisieren XCTest priorisieren Noch nicht entscheiden
Test greift direkt auf Swift-Fachlogik zu Ja Nur bei bestehender stabiler Suite Bei unklarer Helper-Semantik
UI-Steuerung oder Systemdialog Nein Ja Bei vermischtem Unit- und UI-Test
Performance-Baseline Nein Ja Wenn Messziel nicht dokumentiert ist
Neue parametrische Testfälle Ja Nicht als Standard Wenn Toolchain-Unterstützung offen ist
Seltene Bestandsfälle Nur bei konkretem Nutzen Ja Wenn Fehlersemantik nicht verglichen wurde
Remote-CI-Artefakte Nach erfolgreicher Abnahme Parallel weiterführen Wenn Restart-Test fehlt

Diese Matrix verhindert, dass die Migration nach Dateianzahl geplant wird. Sie zwingt das Projekt stattdessen, pro Test den Zweck, die erforderliche Infrastruktur und das Abnahmekriterium zu benennen.

07Gegenüberstellung der Betriebsmodelle

Für unabhängige Entwickler besteht die eigentliche Infrastrukturentscheidung nicht nur zwischen zwei Testframeworks. Es geht auch darum, wo beide Frameworks zuverlässig und wiederholbar laufen.

Betriebsmodell Stärken Reale Nachteile Geeignet, wenn
Lokaler Mac Direkte Diagnose, schnelle interaktive UI-Prüfung, physischer Zugriff Gerät muss verfügbar bleiben; lokale Toolchain kann von CI abweichen; Speicher- und Wartungsaufwand liegen beim Entwickler Regelmäßige interaktive Entwicklung und vorhandene Hardware zusammenfallen
Remote Mac Separater Testhost, planbare Umgebung, geeignet für unbeaufsichtigte Läufe Netzwerkzugriff, Sitzungsverwaltung, Berechtigungen und Artefakttransport müssen geprüft werden CI, nächtliche Regressionen oder fehlende lokale Apple-Hardware im Vordergrund stehen
Gemischter Betrieb Lokale Entwicklung plus reproduzierbare Remote-Abnahme Zwei Umgebungen müssen bei Xcode, Swift, Scheme und Test Plan synchron bleiben Entwickler lokal arbeiten, der verbindliche Regressionstest aber remote laufen soll

Bei einer Remote-Umgebung sollten außerdem Datenschutz und Zugriffsrechte dokumentiert werden. Testdaten dürfen keine unnötigen personenbezogenen Daten enthalten, und Logs sowie xcresult-Artefakte müssen auf Aufbewahrung, Zugriff und Löschung geprüft werden. Ein root-berechtigter Remote-Host ist technisch flexibel, verlangt aber eine strengere Trennung von Zugangsdaten, Zertifikaten und temporären Testdateien. Für die organisatorische Prüfung kann die NUKCLOUD-Vertragsseite herangezogen werden; sie ersetzt keine projektspezifische DSGVO-Bewertung.

Vor dem Go-live sollte die folgende Liste vollständig abgehakt werden:

  • [ ] Jede Testgruppe ist als „migrieren“, „beibehalten“ oder „prüfen“ klassifiziert.
  • [ ] Xcode-, Swift- und Betriebssystemstand sind in der CI dokumentiert.
  • [ ] Scheme und Test Plan sind versioniert und reproduzierbar.
  • [ ] Unit-, Integration- und UI-Eingänge sind getrennt auswertbar.
  • [ ] Ein absichtlich ausgelöster Fehler bleibt nach der Migration diagnostizierbar.
  • [ ] Skip-Bedingungen und Vorbedingungen liefern dieselbe fachliche Aussage.
  • [ ] Swift Testing und XCTest laufen parallel, bevor eine Variante entfernt wird.
  • [ ] Ergebnisdateien werden nach einem normalen Lauf und nach einem Neustart archiviert.
  • [ ] Testdaten, Zertifikate, Logs und Zugriffsrechte erfüllen die internen Datenschutzvorgaben.
  • [ ] Beta-spezifische Beobachtungen sind von stabilen Aussagen getrennt.

Für neue Projekte lautet die Empfehlung damit klar: Swift Testing bildet die Basis für neue Logik- und Integrationstests, XCTest bleibt als gezieltes Werkzeug für UI und Performance vorhanden. Für bestehende Apps ist die bessere Reihenfolge „bei Änderungen migrieren, stabile Tests beobachten, Spezialfälle behalten“. Ein vollständiger Austausch ist erst dann vertretbar, wenn die konkrete Suite ihre bisherige Abdeckung, Fehlerzuordnung und CI-Artefakte nachweisbar gleichwertig reproduziert.

Wer derzeit auf einem lokalen Mac testet, hat zudem zwei praktische Nachteile: Die Maschine muss für unbeaufsichtigte Regressionen dauerhaft verfügbar sein, und Abweichungen zwischen lokaler Xcode-Installation und CI-Toolchain können Fehler schwer lokalisierbar machen. Ein eigener Mac verursacht außerdem Anschaffungs-, Wartungs- und Ausfallkosten, während ein gewöhnlicher nicht-macOS-Server die Apple-spezifischen Testeingänge nicht vollständig abdeckt. Wenn für einige Wochen oder Monate eine stabile Testumgebung benötigt wird, kann das Mieten eines Mac von NUKCLOUD die passendere Zwischenlösung sein, weil ein realer Remote Mac den vollständigen Test Plan ausführen kann, ohne dass eigens eine zusätzliche lokale Maschine dauerhaft betrieben werden muss. Für den konkreten Bedarf sollte der Entwickler erst nach der oben beschriebenen Abnahme prüfen, welche NUKCLOUD-Mac-Konfiguration zu Testumfang und Laufzeit passt.

Zum Abschluss sollte jedes Projekt drei Listen führen: migrieren für neue oder regelmäßig geänderte Swift-Tests, beibehalten für UI-, Performance- und begründete Objective-C-Szenarien sowie prüfen für Fälle mit unklarer Interoperabilität. Wenn der lokale Mac die parallele Regression nicht dauerhaft ausführen kann, sollte der nächste Schritt nicht die pauschale Entfernung von XCTest sein, sondern die Prüfung eines Remote-Mac-Testservers mit dem echten Scheme, Test Plan und den vorgesehenen Ergebnisdateien.