DevOps / CI·CD
11. April 2026
Xcode SwiftPM-Paketregistrierung, Resolve und CI-Cache auf gemietetem Cloud-Mac (2026)
MacXCode Engineering-Team · ~16 Min.
Auf Apple-Silicon-Buildern in SG/JP/KR/HK/US East scheitern Pipelines oft am Dependency-Fetch, nicht am Compiler. Ergänzend: SwiftPM vs CocoaPods, parallele xcodebuild-Jobs, Self-Hosted Runner.
Warum Regionen zählen
- Egress-Routen und IP-Allowlists unterscheiden sich.
- Git LFS / Binärartefakte: RTT ⇒ warme Caches.
- Multi-Tenant: kein blindes Teilen von
~/Library/Caches/org.swift.swiftpm.
Regel:
Package.resolved auf Release-Branches committen; auf main read-only resolve.Auth ohne GUI
CI-Secrets → ~/.netrc, Modus 600, nach dem Job löschen.
Lock-Policy
| Branch | Policy | CI |
|---|---|---|
main | Lock Pflicht | Fehler bei Graphänderung |
| Feature | Bot-Updates | PR mit neuem Lock |
| Library | oft kein Lock | ephemerer Lock in CI |
Pfade
| Pfad | Rolle | Hinweis |
|---|---|---|
SourcePackages | Quellen | pro Job isolieren |
| DerivedData | Index | Parallel-Limits |
| Globaler SPM-Cache | Downloads | RO-Warm + isolierte Writer |
SSH-CI-Schritte
swift package resolve — Signierung und Resolve im selben Benutzer wie Remote-Archive.
Regionalmatrix
| Thema | Messung | Gegenmaßnahme |
|---|---|---|
| RTT | TTFB | Spiegel |
| GitHub | 429 | Backoff |
| Disk | fs_usage | eigenes Volume |
FAQ
| Frage | Antwort |
|---|---|
| Cache deaktivieren? | Nur bei Korruptionsdebug. |
| Xcode Cloud? | Siehe Vergleich. |
| Determinismus | Checksum von Package.resolved in CI. |