2026-04-22 iOS Keychain & Provisioning-Hygiene für CI auf headless gemietetem Cloud-Mac
Release-Manager und iOS-CI-Betreiber, die Apple-Silicon-Macs über SSH mieten, stoßen auf dieselbe Wand: Archive lokal erfolgreich, derselbe Branch auf dem Remote-Builder mit errSecInternalComponent, „kein Signaturzertifikat“ oder veralteten Provisioning-UUIDs. Dieser Leitfaden vom 2026-04-22 erklärt, wie Login-Schlüsselbund, Provisioning Profiles und codesign-Identitäten für unbeaufsichtigte Jobs in HK / JP / KR / SG / US zusammenpassen. Sie erhalten zwei Vergleichstabellen, gehärteten SSH-Workflow, numerisches NVMe-Budget und Links zu automatischer vs. manueller Signierung, Export & ASC-API und parallelem xcodebuild.
Fehlerfläche auf headless Buildern
Im Gegensatz zu Laptops mit UI läuft auf gemieteten Cloud-Macs xcodebuild oft aus nicht-interaktiven Shells. Die häufigsten Brüche ordnen sich drei Schichten zu: Schlüsselbundzustand, Profilfrische, Identitätsmismatch.
| Symptom | Typische Ursache | Erste Instrumentierung |
|---|---|---|
errSecInternalComponent beim codesign |
Gesperrter Login-Schlüsselbund oder verbotene Private-Key-Nutzung | security list-keychains + Unlock-Audit für CI-User |
| Profil „enthält kein Signaturzertifikat“ | UUID auf Disk ≠ eingebettetes Profil im Target | ~/Library/MobileDevice/Provisioning Profiles vs. Xcode-Bericht |
| Branch A ok, Branch B nicht | Mehrere Identitäten gleicher CN; falsche gewählt | security find-identity -v -p codesigning + explizites CODE_SIGN_IDENTITY |
xcodebuild archive, wenn Symbole und thinned slices wachsen — siehe dSYM-Retention.
Signaturmodi: Entscheidungsmatrix
Bevor Sie den Schlüsselbund anfassen, entscheiden Sie, ob der Builder auf automatische Signatur mit verwalteten Profilen oder manuelle Signatur mit versionierten Profilen setzt. Antwort hängt von Zertifikatsrotation und gemeinsam genutztem Host ab.
| Modus | Am besten wenn | Ops-Aufwand | Risiko auf SSH-only-Mac |
|---|---|---|---|
| Automatisch + Xcode-verwaltet | Schnelle Iteration, wenige Bundle-IDs | Geringeres Profil-Babysitting | Mittel — abhängig von Apple-ID-Session |
| Manuell + committete Profile | Enterprise-Pipelines, reproduzierbare Archive | Höhere Rotationsdisziplin | Gering — explizite UUIDs und Identitäten |
| Ephemerer Schlüsselbund pro Job | Multi-Tenant-Hosts | Höchster Automationsaufwand | Geringstes Leck zwischen Teams bei richtiger Umsetzung |
Schlüsselbund-Disziplin für SSH-Sitzungen
CI-Benutzer auf Cloud-Macs sollten login.keychain-db wie eine Live-Datenbank behandeln: nur ein Automationsprinzipal importiert, Unlock-Schritte sind explizit.
- Preflight — Keychain-Liste und Standard prüfen.
- Unlock — genehmigtes nicht-interaktives Unlock (Passwort aus Secret Manager, nicht Klartext im Repo).
- Listen partitionieren —
codesignundproductbuilddürfen auf den Private Key, ohne unnötige Erweiterung. - Post-Job — temporäre Zertifikate löschen und verwaiste Identitäten leicht säubern.
security unlock-keychain -p "$KEYCHAIN_PASSWORD" ~/Library/Keychains/login.keychain-db
Lebenszyklus der Provisioning Profiles
Profile auf Disk müssen spiegeln, was Xcode beim Archiv auflöst. Invarianten:
- Dateiname = Profil-UUID
<UUID>.mobileprovision— Marketing-Umbenennungen brechen Automation still. - Ablaufalarme T-30, T-14, T-7 für App-Store-Profile; ASC-APIs können Polling unterfüttern.
- Nach Refresh überholte UUIDs löschen, damit Xcode kein „fast richtiges“ Profil wählt.
Kombinieren Sie mit Exportoptionen & ASC-API, damit Uploads nicht mit grünem Archiv aber abgelaufenem Verteilprofil im Cache laufen.
Identitäten, embedded.mobileprovision und Export
Mit security find-identity -v -p codesigning auflisten und CODE_SIGN_IDENTITY in CI-Matrizen festnageln. Beim IPA-Export muss das eingebettete Profil zum Kanal passen (TestFlight vs. Ad Hoc). Bei Crash-Symbolik dSYM-Bundles anbinden, damit UUIDs durchgängig stimmen.
Geheimnislayout & NVMe-Budget
Multi-Projekt-Teams in Singapur und US East planen überlappende Archive. Trennen Sie:
- Signaturwurzeln — getrennte Verzeichnisse pro Team unter kontrolliertem
/var/lib/ci-Präfix. - DerivedData — pro-Job-tmp-Wurzeln wie im Isolationsartikel.
- Artefaktretention — drei neueste
.xcarchive-Bäume für Rollback, ältere Slices stutzen.
Bei Parallelisierung paralleles xcodebuild befolgen, damit CPU-Druck keine Signatur-Retries maskiert, die Keychain-Fehler verbergen.
Verwandte Guides auf MacXCode
Strategie mit automatisch vs. manuell, Kontogrundlagen in der Hilfe, dedizierte Signatur-Hosts regional über Preise.
FAQ: Schlüsselbund & Profile
| Frage | Praktische Antwort |
|---|---|
| Eine Apple-ID über mehrere CI-User teilen? | Vermeiden — Servicekonten pro App-Familie segmentieren und Logins vierteljährlich prüfen. |
| Brauche ich VNC? | Nur für erste Vertrauensprompts; Regelbetrieb SSH + Logs. Siehe VNC-Guide. |
| Schnellster Rollback bei Signaturbruch? | Profilset von gestern aus VCS wiederherstellen, Identitäten aus Offline-Backup reimportieren — dann einmal rebuilden, nicht fünfmal blind. |
Warum Mac mini M4 Bare Metal beim Signaturdurchsatz gewinnt
Mac mini M4-Knoten liefern vorhersagbare codesign-Latenz, weil Krypto und I/O lokales NVMe treffen ohne Hypervisor, der Interrupt-Budget klaut — entscheidend für Archiv → Export → Upload unter SLA. MacXCode-Präsenz in HK / JP / KR / SG / US erlaubt Signatur-Hosts nah an Tester mit identischem SSH-Workflow, 1–2 TB Speicheroptionen und Bare-Metal-Isolation statt „noisy neighbor“-Identitätskonflikten in überbuchten VMs. Mehr Apps als Schlüssel? Kapazität über Preise erhöhen statt einen Schlüsselbund zu überlasten.
Signatur-tauglichen Cloud-Mac mieten
Apple Silicon · SSH-first · Regionale Knoten