Laptop mit Unit-Tests, isoliertes macOS für Swift Testing und XCTest

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.

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

TypEmpfehlungMiet-Mac-Check
Reine Swift-Unit-TestsSwift Testing zuerstSendable
Parametrisiert@Test(arguments:)Fehlerindex in CI-Logs
UI / XCUITestXCTest behaltenTest Plan trennen
PerformanceXCTest behaltenCPU-Fenster für Baseline
SPM testTargetSwift Testing + swift testbeide 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

  1. Einfrieren: xcodebuild -version, SWIFT_VERSION je Test-Target; bei Parallel-Concurrency Swift-6-Runbook lesen.
  2. Koexistenz: *UITests/Performance behalten, neues Swift-Testing-Unit-Target.
  3. Batches: reine Logik zuerst, ≤30 Fälle pro Batch.
  4. Tags/Serialisierung: Keychain, Dateien, Netzwerk isolieren.
  5. CI: Scheme und -parallel-testing-enabled mit CI-Knoten-Guide abgleichen.
  6. Nachweis: xcresult, beide Frameworks grün.
  7. Löschen: Keys, DerivedData; SSH/VNC-FAQ.

05. Triage & Kennzahlen

SymptomErste AktionAnti-Pattern
Lokal grün, CI rotScheme vs. CI-ArgsParallel in CI aus
Zufallsrotserialized / eigene SuitesParallel global aus
Testing fehltModul 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.