DevOps / CI·CD
11 avril 2026
Xcode SwiftPM registre, resolve et cache CI sur Mac cloud loué (2026)
MacXCode Engineering Team · ~16 min
Sur des hôtes Apple Silicon loués à Singapour, Tokyo, Séoul, Hong Kong, US East, les échecs viennent souvent du fetch de dépendances : jetons registre, Package.resolved obsolète, jobs concurrents sur le même cache SPM. Lisez aussi SwiftPM vs CocoaPods, jobs xcodebuild parallèles et runner self-hosted.
Pourquoi la région compte
- Les chemins d’egress et listes IP diffèrent entre SG et US.
- Git LFS / artefacts binaires : RTT élevé ⇒ préchauffage du cache.
- Multi-tenant : évitez le partiage naïf de
~/Library/Caches/org.swift.swiftpm.
Règle :
Package.resolved commité sur les branches release ; resolve lecture seule sur main.Auth sans GUI
Secrets CI → ~/.netrc, mode 600, suppression post-job.
Politique de lock
| Branche | Politique | CI |
|---|---|---|
main | Lock obligatoire | Échec si graphe change |
| Feature | Mises à jour bot | PR avec nouveau lock |
| Lib | Souvent sans lock | Lock éphémère en CI |
Chemins
| Chemin | Rôle | Note |
|---|---|---|
SourcePackages | Sources | Isolation par job |
| DerivedData | Index | Limites parallèles |
| Cache global | Téléchargements | Couche warm RO + écritures isolées |
Étapes CI SSH
swift package resolve — alignez signature et resolve avec le même utilisateur que l’archive distante.
Matrice régionale
| Sujet | Mesure | Mitigation |
|---|---|---|
| RTT registre | TTFB | Miroir |
| GitHub | 429 | Backoff |
| Disque | fs_usage | Volume dédié |
FAQ
| Q | R |
|---|---|
| Désactiver le cache ? | Seulement en debug corruption. |
| Xcode Cloud ? | Voir cloud vs dédié. |
| Déterminisme | Checksum du lock en CI. |
Mac mini M4
NVMe rapide et mémoire unifiée pour resolve + compile. Tarifs, Aide.
Articles liés :