Ihre Electron- oder Tauri-App für den Mac von Windows oder Linux aus signieren und notarisieren
Eine App mit Electron oder Tauri können Sie unter Windows oder Linux schreiben. Beim Release für macOS ist das anders. Die Werkzeuge von Apple zum Signieren und Notarisieren laufen nur unter macOS. Ohne sie sehen Mac-Nutzer eine Warnung, und die App öffnet sich nicht. Diese Seite zeigt die Schritte zum Bauen, Signieren und Notarisieren, mit Befehlen, die wir ausgeführt haben.
Warum der Mac-Schritt macOS braucht
Drei Werkzeuge von Apple erledigen die Arbeit. codesign signiert die App. notarytool schickt sie an den Notarisierungsdienst von Apple. stapler heftet das Ticket an, das Apple zurückschickt. Alle drei gehören zu macOS und Xcode. Eine Version für Windows oder Linux von Apple gibt es nicht.
Die Doku der Frameworks sagt dasselbe. Tauri sagt, Sie sollen tauri build auf einem Mac ausführen. Electron Forge sagt, dass Xcode für die Notarisierung nötig ist. Wir haben auch die Linux-Seite auf GitHub Actions ausprobiert. Electron Forge unter Ubuntu erzeugte eine .deb und eine .rpm. Die Anfrage nach einem macOS-Paket schlug fehl.
Was Sie vor dem Release-Tag brauchen
- Eine bezahlte Mitgliedschaft im Apple Developer Program. Apple nennt dafür 99 USD im Jahr.
- Ein Zertifikat Developer ID Application. Nur der Account Holder des Teams kann eins erstellen, in Xcode oder auf der Entwicklerseite.
- Ein app-spezifisches Passwort für Ihren Apple Account, oder einen API-Schlüssel für App Store Connect.
- Ihre Team ID, den Code mit 10 Zeichen aus Ihrem Entwicklerkonto.
Der Notarisierungsdienst von Apple verlangt außerdem die Hardened Runtime und einen sicheren Zeitstempel. electron-builder schaltet die Hardened Runtime mit einer Zeile in seiner Konfiguration ein, unten gezeigt.
Wie ein unsignierter Build aussieht
Wir haben das offizielle Template create-tauri-app ohne Zertifikat gebaut. Diese Prüfungen haben wir am Ergebnis ausgeführt:
npm create tauri-app@latest tauri-app -- --template vanilla --manager npm --yes cd tauri-app && npm install rustup target add aarch64-apple-darwin x86_64-apple-darwin npm run tauri build -- --target universal-apple-darwin APP=src-tauri/target/universal-apple-darwin/release/bundle/macos/tauri-app.app lipo -archs "$APP"/Contents/MacOS/* codesign --verify --deep --strict --verbose=2 "$APP" spctl -a -vv "$APP"
Die Ausgabe auf einem Runner macos-26 von GitHub:
x86_64 arm64 tauri-app.app: code object is not signed at all tauri-app.app: rejected source=no usable signature
Der Build dauerte 4 Minuten. Er erzeugte eine universelle .app mit 8,23 MiB und eine .dmg mit 3,57 MiB. Die .dmg von Electron Forge war nicht besser. codesign zeigte Signature=adhoc und TeamIdentifier=not set, und spctl lehnte sie ab. Gatekeeper blockiert solche Builds auf den Macs Ihrer Nutzer.
Electron Forge: in make signieren und notarisieren
Forge signiert und notarisiert während npm run make, wenn die Konfiguration es verlangt. Das ist das Beispiel aus dem Leitfaden von Forge zum Signieren für macOS:
// forge.config.js
module.exports = {
packagerConfig: {
osxSign: {},
osxNotarize: {
appleId: process.env.APPLE_ID,
appleIdPassword: process.env.APPLE_PASSWORD,
teamId: process.env.APPLE_TEAM_ID
}
}
};Dann bauen Sie jede Architektur. Wir haben dem Standard-Template zuerst den DMG-Maker hinzugefügt. Beide Builds dauerten jeweils weniger als 25 Sekunden:
npm install --save-dev @electron-forge/maker-dmg npm run make -- --arch=arm64 npm run make -- --arch=x64
Wir haben auch --arch=universal mit dem Standard-Template probiert. Es schlug fehl mit "the number of mach-o files is not the same between the arm64 and x64 builds". Auch die Doku von electron-builder sagt, dass Builds pro Architektur am zuverlässigsten sind.
electron-builder: notarize: true
electron-builder liest das Zertifikat und die Apple-Anmeldung aus Umgebungsvariablen. Seine Seite zur Notarisierung zeigt diese Konfiguration:
# electron-builder.yml
mac:
notarize: true
sign:
hardenedRuntime: true
# environment
CSC_LINK=/path/to/developer-id.p12
CSC_KEY_PASSWORD=...
APPLE_ID=you@example.com
APPLE_APP_SPECIFIC_PASSWORD=xxxx-xxxx-xxxx-xxxx
APPLE_TEAM_ID=ABCDE12345Tauri: Variablen setzen, dann bauen
Tauri signiert und notarisiert innerhalb von tauri build, wenn diese Variablen gesetzt sind. Die Namen stammen aus dem Leitfaden von Tauri zum Signieren für macOS:
export APPLE_SIGNING_IDENTITY="Developer ID Application: Your Name (ABCDE12345)" export APPLE_ID=you@example.com export APPLE_PASSWORD=xxxx-xxxx-xxxx-xxxx export APPLE_TEAM_ID=ABCDE12345 npm run tauri build -- --target universal-apple-darwin
Jede App von Hand notarisieren
Für andere Toolkits, oder um einen Schritt zu wiederholen, führen Sie die Werkzeuge von Apple selbst aus. Diese Befehle stammen aus der Doku von Apple zur Notarisierung. Speichern Sie einmal Ihre Anmeldung, dann zippen, einreichen und warten:
xcrun notarytool store-credentials "notarytool-password" \ --apple-id "you@example.com" --team-id ABCDE12345 \ --password xxxx-xxxx-xxxx-xxxx ditto -c -k --keepParent "MyApp.app" "MyApp.zip" xcrun notarytool submit MyApp.zip --keychain-profile "notarytool-password" --wait xcrun stapler staple "MyApp.app"
Laut Apple dauert die Notarisierung meist weniger als eine Stunde. Ein ZIP lässt sich nicht stapeln, also stapeln Sie die .app und zippen sie erneut. Sie können auch die .dmg selbst einreichen und stapeln. Wenn der Status Invalid ist, lesen Sie das Log:
xcrun notarytool log <submission-id> --keychain-profile "notarytool-password" developer_log.json
So geht es auf einem gemieteten Mac
Ein Tagespass von MacRun ist ein dedizierter M6 Mac mini für $15. Xcode 27.1 ist installiert, also sind codesign, notarytool und stapler bereit. Node und Rust sind nicht vorinstalliert. Sie haben Admin-Rechte und Homebrew, also können Sie sie selbst installieren.
- Verbinden Sie sich über Tailscale per SSH, oder öffnen Sie den Desktop mit einem beliebigen VNC-Viewer.
- Melden Sie sich in Xcode mit Ihrem Apple Account an und erstellen Sie dort das Zertifikat Developer ID.
- Exportieren Sie das Zertifikat mit seinem Schlüssel in eine .p12-Datei und bewahren Sie sie auf, für spätere CI.
- Klonen Sie Ihr Repo, bauen und notarisieren Sie, und laden Sie die gestapelte .dmg herunter.
Der Mac wird gelöscht, wenn der Pass endet. Pushen Sie vorher Ihren Code und kopieren Sie die .p12 herunter. Für Xcode über einen entfernten Bildschirm lesen Sie unseren Leitfaden Xcode von Windows aus.
Wer dafür keinen Mac mieten sollte
- Teams, die schon CI haben. Ein macOS-Runner von GitHub kann mit Secrets signieren und notarisieren. Unser Electron-Job wurde mit 2 Minuten abgerechnet, etwa 12 Cent. Der Tauri-Job mit 5, etwa 31 Cent. Die Wartezeit bei der Notarisierung kommt hinzu. Siehe unseren Leitfaden zu GitHub Actions.
- Reine Linux-Pipelines. rcodesign ist ein Open-Source-Werkzeug, das unter Linux oder Windows signiert und notarisiert. Es braucht einen API-Schlüssel für App Store Connect. Es ist kein Werkzeug von Apple, und sein letztes Release war 0.29.0 im November 2024.
- Wöchentliche Releases. Ein Runner im Monatstarif kostet $104 für den ersten Monat, danach $139 im Monat. Ein gebrauchter Mac kann über ein Jahr günstiger sein.
Häufige Fragen
Kann ich eine Mac-App unter Windows notarisieren?
+
Nicht mit den Werkzeugen von Apple. codesign, notarytool und stapler laufen nur unter macOS. Das Open-Source-Werkzeug rcodesign kann unter Windows oder Linux signieren und notarisieren, aber Apple entwickelt und unterstützt es nicht.
Brauche ich zum Notarisieren ein bezahltes Apple-Developer-Konto?
+
Ja. Sie brauchen ein Zertifikat Developer ID Application, das zum Apple Developer Program für 99 USD im Jahr gehört. Laut Doku von Tauri kann ein kostenloses Konto nicht notarisieren.
Kann Electron Forge unter Linux eine .dmg für den Mac bauen?
+
In unserem Test nicht. Electron Forge unter Ubuntu erzeugte nur eine .deb und eine .rpm, und ein erzwungenes macOS-Paket schlug fehl. Auf einem Runner mit macOS 26 erzeugte dasselbe Template eine .dmg und eine .zip für arm64 und x64.
Wie erstelle ich einen universellen Mac-Build?
+
Mit Tauri fügen Sie beide Rust-Ziele hinzu und führen tauri build --target universal-apple-darwin aus. Das ergab bei uns eine .app mit x86_64 und arm64. Mit Electron Forge scheiterte das Standard-Template beim Zusammenführen, also bauen Sie arm64 und x64 getrennt.
Wie lange dauert die Notarisierung bei Apple?
+
Laut Apple meist weniger als eine Stunde. Das Flag --wait lässt notarytool laufen, bis Apple antwortet, also müssen Sie nicht selbst nachfragen.
Was kostet ein Mac für ein Release?
+
Ein Tagespass von MacRun kostet $15 für einen dedizierten M6 Mac mini mit installiertem Xcode. Eine Woche kostet $59. Sie zahlen einmal, und nichts verlängert sich.