2026 Swift Testing sur Mac loué à la journée : coexistence XCTest, aide-mémoire #expect et matrice décisionnelle 1–3 jours
Xcode 26 affiche les gabarits @Test, mais supprimer d’un coup des milliers de XCTestCase est risqué—les suites UI et performance restent sur XCTest. Sur la machine principale cohabitent certificats et branches d’essai ; un remplacement total des targets de test peut rougir la CI une semaine. Ce guide s’adresse aux leads iOS qui doivent migrer les unités en 1–3 jours tout en gardant des targets mixtes : trois irritants, matrice de coexistence, sept étapes, tableau de triage, trois métriques—avec liens vers la concurrence stricte Swift 6, le nœud CI macOS et la FAQ SSH/VNC.
Sommaire
01. Trois irritants
1) Contamination DerivedData : Swift Testing exécute en parallèle par défaut. Singletons legacy et UserDefaults partagés provoquent des échecs intermittents.
2) Migrer UI/performance trop tôt : En Xcode 26, l’UI et les benchmarks restent sur XCTest. Sans frontière documentée, le périmètre dérape.
3) Vert en local, rouge en CI : Nouveau target absent du scheme ou -only-testing obsolète—sans second Mac propre, on accuse le framework.
02. Matrice de coexistence
| Type | Choix | Contrôle sur Mac loué |
|---|---|---|
| Unités Swift pures | Swift Testing en priorité | Sendable |
| Paramétré | @Test(arguments:) | Index d’échec lisible |
| UI / XCUITest | Garder XCTest | Test Plan séparé |
| Performance | Garder XCTest | Fenêtre CPU baseline |
| SPM testTarget | Swift Testing + swift test | double chemin vert |
03. Correspondances #expect
import Testing
struct TierTests {
@Test(arguments: [0, 1, 99])
func label(for count: Int) {
#expect(!PriceTier.label(for: count).isEmpty)
}
}
04. Sept étapes
- Gel : versions Xcode/Swift ; lire le runbook Swift 6 si concurrence en parallèle.
- Coexistence : conserver
*UITests/performance ; nouveau target unitaire Swift Testing. - Lots : logique pure d’abord, ≤30 cas par lot.
- Tags / sérialisation : Keychain, fichiers, réseau.
- CI : aligner scheme avec le guide nœud macOS.
- Preuve :
xcresult, double framework vert. - Effacement : clés, DerivedData ; FAQ SSH/VNC.
05. Triage et métriques
| Symptôme | Action | À éviter |
|---|---|---|
| Local vert, CI rouge | Comparer scheme et args CI | Désactiver le parallèle en CI |
| Échecs aléatoires | serialized / suites isolées | Parallèle global off |
| Module Testing introuvable | Lier Testing, Swift ≥ 6 | @Test dans l’app |
- M1 : 45–70 % des unités migrables en premier (hors UI/perf).
- M2 : 15–40 % de gain de durée grâce au parallèle.
- M3 : ~25 % de discussions revert en moins après double vert sur Mac loué.
06. CI Linux vs Mac journalier
Le swift test Linux ne couvre pas simulateur iOS, Test Plans, orchestration UI. Pour une recette reproductible à deux frameworks, découplée du poste principal : Apple Silicon + Xcode 26. La location journalière compresse le CAPEX sur 1–3 jours. Guide tarifaire, FAQ.
07. FAQ
Coexistence longue ? Oui, jusqu’à alternative officielle UI/performance.
Disque ? Moins de 15 Go libres : simulateur et tests parallèles ralentissent.