DevOps / CI·CD 22. April 2026

2026-04-22 iOS Keychain & Provisioning-Hygiene für CI auf headless gemietetem Cloud-Mac

MacXCode Engineering-Team 22. April 2026 ~18 Min. Lesezeit

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
Zahlen, die zählen: planen Sie 7–14 Tage Überlapp bei Rotationsfenstern, halten Sie mindestens 2 gültige Signaturidentitäten pro Umgebung, und budgetieren Sie 120–320 GB schnelles NVMe pro parallelem 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.

  1. Preflight — Keychain-Liste und Standard prüfen.
  2. Unlock — genehmigtes nicht-interaktives Unlock (Passwort aus Secret Manager, nicht Klartext im Repo).
  3. Listen partitionierencodesign und productbuild dürfen auf den Private Key, ohne unnötige Erweiterung.
  4. 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

Sicherheitshinweis: Schlüsselbundpasswort im Klartext auf Disk ist schlimmer als API-Tokens im Repo — nutzen Sie dieselbe Secret-Injektion wie für isoliertes DerivedData und rotieren Sie bei Rollenwechsel.

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.

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