Fünf Signaturen, die Cloud-Mac-Notarisierung falsch einordnen
Wenn Sie Developer-ID-Notarisierung und Stapler-Validierung auf gemieteten Bare-Metal-Cloud-Macs auslagern, sehen Ausfälle selten wie ein fehlendes xcodebuild-Flag aus. Typisch sind intermittierende notarytool-Warteschlangen, unterschiedliche HTTPS_PROXY-Vererbung zwischen interaktivem SSH und launchd-Jobs, Keychain-Suchpfade, die driftieren, sobald jemand ein Distributionszertifikat in die Login-Keychain importiert, und temporäre ZIP-Staging-Verzeichnisse, die mit DerivedData auf demselben APFS-Volume konkurrieren. Dieser Abschnitt benennt fünf reproduzierbare Fehldeutungen, damit Ihr Incident-Channel aufhört, Apple pauschal zu beschuldigen, und stattdessen Logs anhängt.
Die erste Signatur ist ein Netzwerk-Timeout in notarytool, während curl zu Apple-Endpunkten gesund wirkt. Häufig erbt der Kindprozess eine andere Proxy-Konfiguration oder einen anderen PATH als Ihre Debug-Shell, oder TLS-Inspektion unterscheidet GUI-Login von nicht-interaktiven Sessions. Drucken Sie env in exakt derselben Benutzersitzung wie submit, vergleichen Sie scutil --proxy, und wiederholen Sie einen minimalen ZIP-Upload, bevor Sie die Region wechseln.
Die zweite Signatur ist ein plötzlicher Invalid-Hinweis für eine Bundle-ID, die gestern noch funktionierte. Meist liegt ein Entitlements-Drift, ein exportOptions-Plist-Mismatch oder automatisches Signing vor, das Profile still wechselt. Diffen Sie _CodeSignature und exportOptions, bevor Sie Xcode neu installieren.
Die dritte Signatur ist stapler validate auf dem Build-Host, während Kunden weiterhin beschädigte Software sehen. Oft wurde ein Zwischenartefakt geheftet oder später erneut komprimiert. Hashen Sie die am Edge heruntergeladene Datei und vergleichen Sie mit dem Ticket-Artefakt.
Die vierte Signatur ist Flaky-Verhalten nur beim Time-Sharing mehrerer Entwickler. Fast immer ist die Keychain-Suchreihenfolge oder gemeinsame Login-Keychains betroffen. Verschieben Sie Distribution-Identitäten in eine dedizierte Datei-Keychain und dokumentieren Sie das Apple-Team als Single Source of Truth.
Die fünfte Signatur sind Upload-Fehler trotz freiem Speicher laut df. Burst-IO zwischen ZIP-Staging, Git-Objekten und Indexing-Spikes ist typisch. Setzen Sie TMPDIR für Notarisierung auf einen separaten Pfad und beobachten Sie iostat.
Wenn Logs personenbezogene Tokens enthalten, sollten Aufbewahrungsfristen und Zugriffskontrolle zur DSGVO passen: nur das Notarisierungs-Konto darf Archive lesen, Rotation muss dokumentiert sein.
Timeout trotz gesundem curl:Proxy, PATH und TLS-Inspektion zuerst prüfen.
Gestern ok, heute Invalid:Entitlements und exportOptions diffen.
Validate ok, Kunde sieht Schaden:Staple-Ziel und CDN-Bytes prüfen.
Nur bei Time-Sharing flaky:Datei-Keychain und Benutzer trennen.
df frei, Upload bricht:TMPDIR trennen und IO messen.
Nach der Benennung der Signatur schreiben Sie Policy: Notarisierungs-Sitzungen bleiben getrennt von experimentellem Signing, und Mono-Repo-Klone folgen dem flachen Klon-Runbook, damit Git-Objekte ZIP-Staging nicht verhungern.
Sobald notarytool in CI und interaktive SSH-Sitzungen gemischt wird, entstehen Race Conditions um TMPDIR, Codesigning-Identitäten und HTTP-Proxies, die sich nur unter Last zeigen.
Für Metro-Standorte wie Singapur, Tokio, Seoul, Hongkong, US-Ost und US-West ist die Frage weniger Latenz als stabile Uhrzeit, konsistente TLS-Kette und dokumentierte Keychain-Datei.
Wenn Sie Protokolle mit App-spezifischen Passwörtern archivieren, definieren Sie Zweckbindung, Zugriffsrollen und Löschfristen, damit die Verarbeitung personenbezogener Metadaten zur DSGVO passt.
Ein dedizierter Notarisierungs-Host reduziert die Wahrscheinlichkeit, dass ein Entwickler versehentlich ein Ad-hoc-Zertifikat importiert und damit die Suchreihenfolge der Keychain verändert.
Staging von ZIP-Dateien parallel zu großen Git-Arbeitskopien erzeugt IO-Spikes, die wie Netzwerkprobleme aussehen, obwohl der eigentliche Engpass lokal ist.
Stapler muss auf dem exakten Distributionsartefakt laufen, das später ausgeliefert wird, sonst validiert Gatekeeper einen anderen Byte-Stream als den Download des Kunden.
Wartungsfenster sollten Uploads von interaktivem Xcode-Indexing trennen, damit CPU und IO nicht gleichzeitig mit notarytool konkurrieren.
Runbooks brauchen Artefakte: Ticketfelder, Tarballs mit exportOptions, plist-Snapshots und UTC-Zeitstempel, damit Postmortems nicht auf Erinnerungen basieren.
Dedizierte Hosts versus gemischte Entwicklerarbeitsplätze
Es gibt keine ewig richtige Topologie, nur die Frage, ob Sie erklären können, welche Benutzersitzung, welche Keychain-Datei und welcher Ausgangspfad jede Submission nutzte. Die Matrix ist bewusst grob, damit Plattform und Release in zehn Minuten Zertifikatsrisiko, menschliche Störung, IO, Region und Mietlaufzeit abstimmen.
| Dimension | Dedizierter Notarisierungs-Host | Gemischt mit Xcode | Unbeaufsichtigter CI-Host |
|---|---|---|---|
| Zertifikatsrisiko | Niedrig mit Datei-Keychain | Höher bei gemischtem Signing | Mittel, Rotation planen |
| Menschliche Störung | Gering | Hoch | Gering, Nachtfenster |
| IO | Temp isolierbar | DerivedData-Konkurrenz | Klon + Temp trennen |
| Region | Signatar-Zeitzone | Dev-Zeitzone | Registry und Git |
| Miete | Tagesmiete dann Monat | Wöchentlich prüfen | Quartal mit Cleanup |
Stabilität hängt weniger von Ping ab davon, ob submit, staple und validate dieselbe auditierbare Sitzung teilen.
Dokumentieren Sie pro Host Team-ID und Keychain-Pfad, sonst wirken Entitlements-Änderungen wie regionale Instabilität. Notarisierung reagiert empfindlicher auf Uhr, Proxy und Temp-IO als auf reine RTT.
Sobald notarytool in CI und interaktive SSH-Sitzungen gemischt wird, entstehen Race Conditions um TMPDIR, Codesigning-Identitäten und HTTP-Proxies, die sich nur unter Last zeigen.
Für Metro-Standorte wie Singapur, Tokio, Seoul, Hongkong, US-Ost und US-West ist die Frage weniger Latenz als stabile Uhrzeit, konsistente TLS-Kette und dokumentierte Keychain-Datei.
Wenn Sie Protokolle mit App-spezifischen Passwörtern archivieren, definieren Sie Zweckbindung, Zugriffsrollen und Löschfristen, damit die Verarbeitung personenbezogener Metadaten zur DSGVO passt.
Ein dedizierter Notarisierungs-Host reduziert die Wahrscheinlichkeit, dass ein Entwickler versehentlich ein Ad-hoc-Zertifikat importiert und damit die Suchreihenfolge der Keychain verändert.
Staging von ZIP-Dateien parallel zu großen Git-Arbeitskopien erzeugt IO-Spikes, die wie Netzwerkprobleme aussehen, obwohl der eigentliche Engpass lokal ist.
Stapler muss auf dem exakten Distributionsartefakt laufen, das später ausgeliefert wird, sonst validiert Gatekeeper einen anderen Byte-Stream als den Download des Kunden.
Wartungsfenster sollten Uploads von interaktivem Xcode-Indexing trennen, damit CPU und IO nicht gleichzeitig mit notarytool konkurrieren.
Runbooks brauchen Artefakte: Ticketfelder, Tarballs mit exportOptions, plist-Snapshots und UTC-Zeitstempel, damit Postmortems nicht auf Erinnerungen basieren.
notarytool und stapler als auditierbares Gerüst
Die stabile Annahme ist, dass jede notarytool-Ausführung dieselbe vererbte Umgebungskette nutzt, nicht halb CI und halb manueller SSH-Fix. Speichern Sie App-Store-Connect-Zugangsdaten mit Profilnamen in der Keychain und frieren Sie die Reihenfolge ein: store-credentials, submit --wait, log, stapler staple, stapler validate.
xcrun notarytool store-credentials "AC_PROFILE" --keychain "$HOME/Library/Keychains/ci-notary.keychain-db" --apple-id "..." --team-id "..." --password "app-spezifisch" xcrun notarytool submit ./Dist/MyApp.zip --keychain-profile "AC_PROFILE" --wait xcrun notarytool log SUBMISSION_ID --keychain-profile "AC_PROFILE" xcrun stapler staple ./Dist/MyApp.zip xcrun stapler validate ./Dist/MyApp.zip
Dokumentieren Sie drei Keychain-Klassen auf einer Wiki-Seite: Login, System, dedizierte Datei-Keychain. Datei-Keychains ersetzen die gesamte Oberfläche nach Korruption schneller als Einzelzertifikate zu jagen.
Hinweis: Archivieren Sie notarytool-Log-JSON neben dem Artefakt-Hash.
Sobald notarytool in CI und interaktive SSH-Sitzungen gemischt wird, entstehen Race Conditions um TMPDIR, Codesigning-Identitäten und HTTP-Proxies, die sich nur unter Last zeigen.
Für Metro-Standorte wie Singapur, Tokio, Seoul, Hongkong, US-Ost und US-West ist die Frage weniger Latenz als stabile Uhrzeit, konsistente TLS-Kette und dokumentierte Keychain-Datei.
Wenn Sie Protokolle mit App-spezifischen Passwörtern archivieren, definieren Sie Zweckbindung, Zugriffsrollen und Löschfristen, damit die Verarbeitung personenbezogener Metadaten zur DSGVO passt.
Ein dedizierter Notarisierungs-Host reduziert die Wahrscheinlichkeit, dass ein Entwickler versehentlich ein Ad-hoc-Zertifikat importiert und damit die Suchreihenfolge der Keychain verändert.
Sechsstufiges Runbook von Tagesmiete bis Monatsvertrag
Jeder Schritt soll ein Artefakt erzeugen: Ticketfeld, Tarball oder Zeitstempel-Log, damit Wissen nicht in einem Postfach verschwindet.
Rollen einfrieren:Benutzer, Keychain-Pfad, Team-ID dokumentieren.
exportOptions sichern:Tarball mit UTC-Zeitstempel.
Tagesmiete burn-in:Kleiner ZIP-End-to-End.
Temp trennen:Nicht mit DerivedData teilen.
Uhr und Proxy:Besitzer für NTP und TLS-Store.
Monatsrhythmus:Wöchentlich DerivedData, monatlich Logs.
Staging von ZIP-Dateien parallel zu großen Git-Arbeitskopien erzeugt IO-Spikes, die wie Netzwerkprobleme aussehen, obwohl der eigentliche Engpass lokal ist.
Stapler muss auf dem exakten Distributionsartefakt laufen, das später ausgeliefert wird, sonst validiert Gatekeeper einen anderen Byte-Stream als den Download des Kunden.
Wartungsfenster sollten Uploads von interaktivem Xcode-Indexing trennen, damit CPU und IO nicht gleichzeitig mit notarytool konkurrieren.
Runbooks brauchen Artefakte: Ticketfelder, Tarballs mit exportOptions, plist-Snapshots und UTC-Zeitstempel, damit Postmortems nicht auf Erinnerungen basieren.
Schwellen für Uhr, Speicher und Temp-Wasserstände
Diese Schwellen sind Kommunikationsleitplanken, keine Herstellergarantien. Kalibrieren Sie mit eigenen Histogrammen, halten Sie sie aber explizit für Postmortems.
Uhr:Wenn Abweichung über etwa zwei Minuten und intermittierende Ablehnungen, zuerst NTP.
16 GB gemischt:Indexing, ZIP, Simulator gleichzeitig erzeugen Swap-Last als Sizing-Vorfall.
Temp-Wasserstand:Etwa 30 GB Kopf für Notarisierungs-Temp, unter 15 GB keine großen Archive.
Achtung: Schwellen sind Leitplanken, keine Cloud-SLA.
Nur auf Reboot-Theater oder ein einzelnes Büro-MacBook zu setzen, stapelt Keychain-Risiko gegen Upload-Stabilität. Getrennte Hosts plus Tagesmiete in sechs Metropolen erlauben Burn-in, bevor Sie monatlich festziehen. MESHLAUNCH Bare-Metal-Miete ist meist die stabilere Option für reproduzierbare Notarisierung.
Sobald notarytool in CI und interaktive SSH-Sitzungen gemischt wird, entstehen Race Conditions um TMPDIR, Codesigning-Identitäten und HTTP-Proxies, die sich nur unter Last zeigen.
Für Metro-Standorte wie Singapur, Tokio, Seoul, Hongkong, US-Ost und US-West ist die Frage weniger Latenz als stabile Uhrzeit, konsistente TLS-Kette und dokumentierte Keychain-Datei.
Wenn Sie Protokolle mit App-spezifischen Passwörtern archivieren, definieren Sie Zweckbindung, Zugriffsrollen und Löschfristen, damit die Verarbeitung personenbezogener Metadaten zur DSGVO passt.
Ein dedizierter Notarisierungs-Host reduziert die Wahrscheinlichkeit, dass ein Entwickler versehentlich ein Ad-hoc-Zertifikat importiert und damit die Suchreihenfolge der Keychain verändert.
Staging von ZIP-Dateien parallel zu großen Git-Arbeitskopien erzeugt IO-Spikes, die wie Netzwerkprobleme aussehen, obwohl der eigentliche Engpass lokal ist.
Stapler muss auf dem exakten Distributionsartefakt laufen, das später ausgeliefert wird, sonst validiert Gatekeeper einen anderen Byte-Stream als den Download des Kunden.
Wartungsfenster sollten Uploads von interaktivem Xcode-Indexing trennen, damit CPU und IO nicht gleichzeitig mit notarytool konkurrieren.
Runbooks brauchen Artefakte: Ticketfelder, Tarballs mit exportOptions, plist-Snapshots und UTC-Zeitstempel, damit Postmortems nicht auf Erinnerungen basieren.
Nutzen Sie dedizierte Benutzer und Datei-Keychains. Lesen Sie den Isolations-Runbook-Artikel und Preise.
Flache Klone und Sparse-Checkout aus Mono-Repo-Disk-Leitfaden, Hilfe unter Hilfezentrum.
Zuerst Signatar-Zeitzone und stabiler Ausgang, dann Git und Artefakte. Qualitätssitzungen siehe SSH- und Mosh-Matrix.
