Ohne lokale Hardware: Runbook für Submit, Logs, Stapling und Offline-Validierung auf einem Cloud-Mac
Wenn Sie außerhalb des Mac App Store ein DMG, ein PKG oder ein signiertes Hilfsprogramm verteilen, gelten andere Erwartungen als beim Hochladen eines iOS-Builds: Gatekeeper und die Apple-Notarisierung drücken Fehler nach links in Richtung Signaturkonsistenz, gehärteter Laufzeit, Ticketmaterialisierung und Stapling. Auf einem gemieteten Cloud-Mac fehlt selten das Werkzeug `notarytool`; viel häufiger fehlen belastbare Nachweise wie Submission-UUID, vollständiges `notarytool log` JSON, Schlüsselbundobjekte desselben Benutzers und eine Uhr, die mit TLS übereinstimmt. Dieser Leitfaden richtet sich an Teams mit Windows- oder Linux-Schwerpunkt: Schmerzpunkte, eine Matrix für reinen SSH-, gemischten und VNC-geführten Betrieb, ein Acht-Schritte-Runbook, vier ticketfertige Schlussfolgerungen und ein zwanzigminütiges Abnahmeraster unter demselben macOS-Benutzer in einer VNC-Sitzung. Ohne archiviertes `notarytool log` JSON verbrennen Sie Kontingente auf demselben Entitlements-Fehler, weil niemand den exakten Ablehnungsgrund reproduzieren kann; speichern Sie deshalb jede Ablehnung > vor jedem Rebuild und verknüpfen Sie Dateinamen mit Ticketnummer und Teamkürzel. Querverweise: Erstnutzungs-Checkliste, NTP-/Zeitzonen-Runbook, Fastlane Match, Festplatten-Cleanup, Notfall-Hotfix.
Organizer-Uploads ersetzen keine Notarisierungsnachweise: andere Credentials, andere Fehlersemantik und andere Nachweise gelten im App Store; halten Sie Store- und Outside-Store-Arbeit deshalb in getrennten Änderungsaufzeichnungen, um Token-Rotationen nicht zu vermischen.
Reiner SSH-Betrieb erzeugt Schlüsselbund-Theater: Befehle enden mit Exitcode null, während die GUI-Zustimmung für genau die Signaturidentität nie erfolgte, die Sie glauben zu verwenden; dokumentieren Sie deshalb `id -un`, Menüleistenname und Terminalausgabe gemeinsam in einem Screenshot.
Hardened-Runtime- und Sandbox-Probleme lösen Sie in Xcode, nicht durch erneutes Zippen mit anderen Flags; jede „Duct-Tape“-Neupackung verschleiert nur die Ursache und erschwert spätere Audits.
Ohne eingefrorene Fingerabdruckzeile (`sw_vers`, `xcodebuild -version`, `notarytool --version`, Lease-ID) kann ein Reviewer Ihre Umgebung nicht rekonstruieren; hängen Sie bei Uhränderungen die drei Screens aus dem NTP-/Zeitzonen-Artikel an dieselbe Ticketkette.
Notarisierungs-ZIPs plus Xcode-Archive füllen SSDs auf gemieteten Hosts schnell; kombinieren Sie dieses Runbook mit einer DerivedData-/Simulator-Bereinigung, bevor freier Speicher Ihre Artefakte stillschweigend löscht oder Builds abbrechen lässt.
Die Matrix zeigt: Archivieren und Einreichen funktionieren meist per SSH, während Schlüsselbund, Apple-ID, 2FA, Stapling und erklärbare Fehlerbilder stark von einer grafischen Sitzung profitieren, idealerweise derselben Person, die auch signiert hat.
Verlorene Logs: ohne notarytool log verbrennen Sie Kontingent auf demselben Entitlements-Fehler.
Store vs. außerhalb: Organizer ersetzt keine Notary-Evidenz; Credentials unterscheiden sich.
SSH-Schlüsselbund-Theater: Exitcode null ohne jemals gesehene Zustimmungsdialoge.
Runtime-Drift: Hardened Runtime in Xcode, nicht durch Zip-Kniffe.
Keine Fingerabdruckzeile: Reviewer können sw_vers und Toolversionen nicht rekonstruieren.
Speicherdruck: kombinieren Sie dieses Runbook mit der Festplatten-Checkliste.
Gemischter Modus ist oft der Kosten-Sweet-Spot: automatisieren Sie Packaging per SSH, wechseln Sie dann in VNC zum selben Benutzer für Schlüsselbund-Schritte, `stapler` und einen aufgezeichneten Doppelklick-Smoke auf einem sauberen Profil oder zweiten Rechner.
Ihre interne Währung lautet: Submission-UUID plus vollständiges Log-JSON plus Nachweis, dass Schlüsselbund- und UI-Zustimmungen im selben Benutzerkontext passierten; alles andere ist Kommentar ohne Beweiskraft.
Schritt eins des Runbooks friert die Fingerabdruckzeile ein; Schritt zwei prüft `codesign -dv --verbose=4` und `spctl -a -vv`; bei Fastlane Match stimmen Sie Identitäten zuerst mit dem Match-Runbook ab, bevor Sie gegen Apples Dienste testen.
Bauen Sie das Upload-ZIP mit bewusst erhaltenen Symlinks, berechnen Sie SHA256 für das Ticket und vermeiden Sie Pfade unterhalb von DerivedData, damit Debug-Symbole nicht versehentlich eingepackt werden.
Beim Submit bevorzugen Sie gespeicherte Credentials gegenüber Echo von App-Passwörtern in Shell-Historien; kopieren Sie Submission-IDs wörtlich ins Ticket, damit spätere Korrelationen trivial bleiben.
| Schritt / Evidenz | Nur SSH | Gemischt | VNC-geführt |
|---|---|---|---|
| Archivierte signierte .app | meist ok | ok | gut für visuelle Bestätigung |
| Zip und Submit | ok | ok | ok |
| Poll / Log | ok | ok | ok |
| Schlüsselbund / Apple-ID / 2FA | hohes Risiko | empfohlen | empfohlen |
| Stapling + Validierung | teilweise | empfohlen | empfohlen |
| Fehler für Nicht-Engineers erklären | schwach | stark | am stärksten |
Ihre Währung ist Submission-UUID + Log-JSON + Schlüsselbundnachweis desselben Users.
Bei jedem Nicht-Erfolg ziehen Sie sofort `notarytool log` als JSON, bevor Sie neu bauen; mappen Sie Issues explizit auf Signatur, Hardened Runtime oder Packaging, statt blind erneut einzureichen.
Stapling und Validierung folgen Apples Trägertyp-Dokumentation: unterscheiden Sie „Ticket fehlt“ von „Träger nicht unterstützt“ und vermeiden Sie doppeltes Stapling nach geänderter Signatur, was schwerwiegendere Inkonsistenzen maskiert.
Für den Smoke-Test promoten Sie Artefakte und Logs zu Speicher, der unabhängig vom stundenweise gemieteten Knoten bleibt; Leasinggrenzen löschen sonst Zwischenarchive, wenn niemand rechtzeitig hochlädt.
Betriebsdetail: rotieren Sie app-spezifische Passwörter über einen benannten Owner und protokollieren Sie die Rotation neben ACL-Änderungen am Match-Repository, damit Compliance und Engineering dieselbe Geschichte erzählen.
Wenn Logs Netzwerk implizieren, prüfen Sie Split-Tunnel-Regeln und Captive-Portale: TLS-Abbrüche sehen aus wie Signaturprobleme, klären sich aber, sobald der Pfad zu Apple sauber ist.
Regionale Vorfälle bei Apple passieren; notieren Sie Submit-Region und Kundenregion, um Teilausfälle von schlechten Builds zu trennen und unnötige Hotfixes zu vermeiden.
Mehrprodukt-Shops sollten Bundle-ID und Submission-UUID in einer Release-Datenbank indexieren statt Dateien in persönlichen Downloads zu verstreuen; das senkt Suchzeit im nächsten Quartal drastisch.
Rollbacks üben: bewahren Sie den letzten bekannt guten gestapelten DMG plus Log-Bündel unveränderlich nach Release; Hotfixes verzweigen Evidenz statt ältere UUID-Archive zu überschreiben.
Ticket-Fakt eins: „Accepted“-Screenshots brauchen das passende Log-JSON und den Artefakt-Hash derselben Submission, sonst ist der Nachweis unvollständig.
Ticket-Fakt zwei: Schlüsselbund- und Apple-ID-Schritte sind standardmäßig VNC-pflichtig, sofern Sie nicht anders nachweisen können, dass derselbe Benutzer vollständig nicht-interaktiv signieren darf.
Fingerabdruck: sw_vers, xcodebuild -version, notarytool, Lease-ID.
Vorab-Signatur: codesign -dv --verbose=4, spctl -a -vv; Match vorher abstimmen.
Upload-ZIP: Symlinks bewusst, SHA256 ins Ticket.
Submit: gespeicherte Credentials; Submission-ID wörtlich kopieren.
Logs bei Fehler: JSON vor Rebuild sichern und mappen.
Fix in Xcode: Entitlements im Projekt, nicht im Zip.
Stapling: xcrun stapler staple und validate je Träger.
Smoke & Promotion: Doppelklick auf sauberem Profil; Artefakte aus dem Stundenknoten herausziehen.
xcodebuild -version notarytool --version codesign -dv --verbose=4 "Your.app" ditto -c -k --keepParent "Your.app" "Your.zip" notarytool submit "Your.zip" --apple-id "$APPLE_ID" --team-id "$TEAM_ID" \ --password "$APP_SPECIFIC" --wait notarytool log "$SUBMISSION_ID" > notary-log.json xcrun stapler staple "Your.dmg" xcrun stapler validate "Your.dmg"
Ticket-Fakt drei: Stapling-Fehler entkoppeln in fehlendes Ticket versus nicht unterstützten Träger; raten Sie nicht, indem Sie erneut staplen, nachdem sich die Signatur geändert hat.
Ticket-Fakt vier: wiederholen Sie vor großen externen Releases die Drei-Schritte-Uhr-Prüfung; Zeitskew tarnt sich oft als Signing-Bug und kostet Nächte.
Das zwanzigminütige Raster prüft denselben Benutzer (Menüleiste vs. `id -un`), Uhr/TLS (Systemeinstellungen vs. `sntp`/curl), gespeicherte UUID, leere `jq`-Issues in Logs und erfolgreiches `stapler validate`, plus optional eine kurze Bildschirmaufnahme des Smoke-Opens.
Zeitstempel alignen Diskussionen: Staple-Zeit, Submit-Zeit und NTP-Screenshots sollen eine kurze Geschichte ergeben, die eine Projektleitung weiterleiten kann, ohne Technikjargon zu übersetzen.
| Check | VNC-Evidenz | SSH-Evidenz | Pass |
|---|---|---|---|
| Gleicher User | Menüleistenname | id -un | stimmt mit Ticket |
| Uhr & TLS | Datum & Uhrzeit | sntp / curl | Runbook-konform |
| Submit ok | optional Browser | Submission-Zeile | UUID gespeichert |
| Log sauber | JSON scan | jq leer | reproduzierbar Accepted |
| Stapler ok | optional Video | validate ok | Offline-Open sauber |
Parallel-CI-Lanes sollten Listener-Tabellen führen, die zeigen, dass keine Geister-`notarytool`-Prozesse nachts Credentials konkurrierend beanspruchten; sonst erklären sich sporadische Auth-Fehler nicht.
Apples Flaggenreferenz bleibt maßgeblich; dieser Artikel optimiert für gemietete Remote-Mac-Operationen und VNC-Nachweise und ergänzt Erstnutzung, NTP, Match, Notfall-Hotfix und Festplatten-Runbooks auf derselben Site.
FAQ: Stapling ist für viele Offline-DMG-Verteilungen stark empfehlenswert, aber immer gegen den Trägertyp prüfen; archivieren Sie `validate`-Ausgaben analog zu den Logs.
Für dieselbe Abnahmelogik auf einem Remote-Mac nutzen Sie VNCMac: Primärbutton zur Kaufseite, Kontext auf der Startseite, technische Hinweise im Hilfe-Center, konsistent mit neueren deutschsprachigen Blogbeiträgen. Halten Sie Notarisierungs- und App-Store-Sessions getrennt, um Rotationen nicht gegeneinander zu fahren; das reduziert Organizer-Fehler, die wie Signing aussehen, aber nur Token-Kollisionen sind. Wenn Ihr Proxy Login-Seiten injiziert, sammeln Sie `curl -v`-Handshakes bevor Sie Entitlements anzweifeln; sonst optimieren Sie wochenlang die falsche Schicht. Namespace-Zip-Ausgaben weg von DerivedData, damit Automatisierung und manuelle Schritte im selben Home nicht versehentlich Debug-Symbole mischen oder Pfade vertauschen. Dokumentieren Sie Lease-IDs und Provider-Zeitzonen in Tickets; das erklärt sonst rätselhafte UTC-Offsets in Logzeilen, die wie Signaturfehler wirken. Verknüpfen Sie dieses Runbook mit der Erstnutzungs-Checkliste, damit neue Mitarbeitende nicht gleichzeitig Viewer-Tuning und Notarisierung lernen müssen. Verknüpfen Sie den NTP-Leitfaden, bevor Sie Zertifikatsfehler diagnostizieren; viele PKIX-Meldungen verschwinden nach korrekter Uhr und sauberem TLS-Pfad. Verknüpfen Sie das Fastlane-Match-Material, sobald verschlüsseltes Git und Schlüsselbundcache im Spiel sind; die Matrix sagt Ihnen, welche Schritte SSH-tauglich sind. Verknüpfen Sie den Notfall-Hotfix-Artikel, wenn Release und Incident dieselbe Nacht teilen; dort finden sich Organizer-Patterns, die hier nicht wiederholt werden müssen. Verknüpfen Sie die Festplatten-Checkliste, sobald Archive und Simulator-Images den SSD-Puffer unterschreiten; sonst bricht `notarytool submit` mitten in großen ZIPs weg. Schulen Sie Supportteams, dass „Accepted“ nicht „stapled & validated offline“ bedeutet; definieren Sie klare Done-Kriterien pro Träger in Ihrer Release-Definition-of-Done. Nutzen Sie kurze Screenrecords für Doppelklick-Smokes nur, wenn Richtlinien das erlauben; alternativ reichen saubere Terminalauszüge von `stapler validate` plus Hashes. Wenn mehrere Produkte dieselbe Miet-Maschine nutzen, trennen Sie Arbeitsverzeichnisse und Keychains strikt; Cross-Talk erzeugt Signaturidentitäten, die im Ticket nicht vorkommen. Planen Sie vor Lease-Ende Promotion-Jobs, die Artefakte und Logs in object storage schieben; sonst verschwinden UUID-Ordner, und Postmortems werden unbefriedigend. Integrieren Sie diese Praxis in Ihre CI-Templates als optionale manuelle Gates, damit Automation nicht heimlich SSH-only wird, wo VNC laut Matrix Pflicht ist. Zuletzt: konservieren Sie die Story in einem Ordner pro Release-Tag; das ist günstiger als erneute Forensik, wenn ein Kunde drei Monate später ein Gatekeeper-Screenshot sendet. Kurz gesagt: behandeln Sie jede Notarisierung wie einen wiederholbaren Ingenieursversuch mit festem Setup, klarer Hypothese und archivierten Rohdaten, damit interne Audits und Kundenfragen dieselbe Evidenz sehen und niemand nachträglich raten muss, welche Xcode-Version tatsächlich live war.
Clipboard, Xcode-Pfad.
Lesen →Zeitskew.
Lesen →SSH vs. VNC.
Lesen →Für typische DMG-Verteilung hilft Stapling der Offline-Validierung; Trägerregeln in Apple-Dokumentation prüfen und validate archivieren.
Submit/Poll oft ja; Keychain und sichtbare Zustimmungen im selben User per VNC.
Zeitskew, Proxies, Lease-Ende, getrennte Schlüsselbund-User — zuerst das Raster.
Submission-ID einfrieren, JSON speichern, auf Signatur/Entitlements mappen.
Teuer ist nicht Upload-Zeit, sondern ob ein dritter Engineer Ihr Evidenzbündel später reproduziert. VNC auf gemietetem Apple Silicon hält Terminal- und GUI-Nachweise in einer Sitzung zusammen.
Wenn Sie diese Abnahme auf einem gemieteten Mac wiederholen wollen, nutzen Sie VNCMac: Primärbutton zur Kaufseite, Kontext auf der Startseite, technische Hinweise im Hilfe-Center.