2026 Swift Testing auf Tagesmiet-Mac: XCTest-Koexistenz, #expect-Spickzettel und 1–3-Tage-Entscheidungsmatrix
Xcode 26 liefert @Test-Vorlagen, aber tausende XCTestCase-Klassen lassen sich nicht an einem Tag löschen—UI- und Performance-Suites bleiben an XCTest gebunden. Auf dem Hauptrechner liegen Zertifikate und Experiment-Branches; ein Big-Bang am Test-Target färbt die CI eine Woche rot. Dieser Leitfaden richtet sich an iOS-Leads, die in 1–3 Tagen Unit-Tests auf Swift Testing heben und gemischte Targets behalten: drei Pain Points, Koexistenz-Matrix, sieben Schritte, Triage-Tabelle, drei Kennzahlen—mit Links zu Swift-6-Strenge-Nebenläufigkeit, CI-macOS-Knoten und SSH/VNC-FAQ.
Inhalt
01. Drei Pain Points
1) DerivedData-Kreuzkontamination: Swift Testing parallelisiert standardmäßig. Alte XCTest-Serialisierung, Singletons und geteilte UserDefaults erzeugen Flakes.
2) UI/Performance fälschlich migrieren: In Xcode 26 bleiben UI-Automatisierung und Benchmarks bei XCTest. Ohne dokumentierte Grenzen explodiert der Scope.
3) Lokal grün, CI auf altem Scheme: Fehlende Test-Actions oder -only-testing auf Legacy-Klassen—ohne zweiten sauberen Mac wird das Framework beschuldigt.
02. Koexistenz-Matrix
| Typ | Empfehlung | Miet-Mac-Check |
|---|---|---|
| Reine Swift-Unit-Tests | Swift Testing zuerst | Sendable |
| Parametrisiert | @Test(arguments:) | Fehlerindex in CI-Logs |
| UI / XCUITest | XCTest behalten | Test Plan trennen |
| Performance | XCTest behalten | CPU-Fenster für Baseline |
| SPM testTarget | Swift Testing + swift test | beide Pfade grün |
03. #expect-Mapping
import Testing
struct TierTests {
@Test(arguments: [0, 1, 99])
func label(for count: Int) {
#expect(!PriceTier.label(for: count).isEmpty)
}
}
04. Sieben Schritte
- Einfrieren:
xcodebuild -version,SWIFT_VERSIONje Test-Target; bei Parallel-Concurrency Swift-6-Runbook lesen. - Koexistenz:
*UITests/Performance behalten, neues Swift-Testing-Unit-Target. - Batches: reine Logik zuerst, ≤30 Fälle pro Batch.
- Tags/Serialisierung: Keychain, Dateien, Netzwerk isolieren.
- CI: Scheme und
-parallel-testing-enabledmit CI-Knoten-Guide abgleichen. - Nachweis:
xcresult, beide Frameworks grün. - Löschen: Keys, DerivedData; SSH/VNC-FAQ.
05. Triage & Kennzahlen
| Symptom | Erste Aktion | Anti-Pattern |
|---|---|---|
| Lokal grün, CI rot | Scheme vs. CI-Args | Parallel in CI aus |
| Zufallsrot | serialized / eigene Suites | Parallel global aus |
| Testing fehlt | Modul linken, Swift ≥ 6 | @Test im App-Target |
- K1: 45–70 % der Unit-Tests sind erste Migrationskandidaten (ohne UI/Performance).
- K2: Laufzeit oft 15–40 % kürzer durch Parallelisierung.
- K3: Nach Miet-Mac-Doppel-Grün ~25 % weniger Test-Revert-Diskussionen in 2 Wochen.
06. Linux-CI vs Tagesmiet-Mac
Linux-swift test deckt nicht iOS-Simulator, Test Plans, UI-Orchestrierung ab. Für reproduzierbare Doppel-Framework-Abnahme jenseits des Hauptrechners: Apple Silicon + Xcode 26. Tagesmiete presst CAPEX auf 1–3 Tage. Preisleitfaden, FAQ.
07. FAQ
Langfristige Koexistenz? Ja, bis UI/Performance-Alternativen reif sind.
Platte? Unter 15 GB frei werden Simulator und parallele Tests träge.