Firmare e notarizzare la tua app Mac Electron o Tauri da Windows o Linux
Puoi scrivere un’app Electron o Tauri su Windows o Linux. La release per macOS è un’altra cosa. Gli strumenti di Apple per firma e notarizzazione girano solo su macOS. Senza di loro, gli utenti Mac vedono un avviso e l’app non si apre. Questa pagina mostra i passaggi di build, firma e notarizzazione, con i comandi che abbiamo eseguito.
Perché il passaggio Mac richiede macOS
Il lavoro lo fanno tre strumenti di Apple. codesign firma l’app. notarytool la invia al servizio di notarizzazione di Apple. stapler allega il ticket che Apple rimanda indietro. Tutti e tre arrivano con macOS e Xcode. Apple non ne fa una versione per Windows o Linux.
La documentazione dei framework è d’accordo. Tauri dice di eseguire tauri build su un computer Mac. Electron Forge dice che per la notarizzazione serve Xcode. Abbiamo provato anche il lato Linux su GitHub Actions. Electron Forge su Ubuntu ha creato un .deb e un .rpm. Chiedergli un pacchetto macOS è fallito.
Cosa ti serve prima del giorno della release
- Un abbonamento a pagamento all’Apple Developer Program. Apple lo indica a 99 USD all’anno.
- Un certificato Developer ID Application. Solo l’Account Holder del team può crearlo, in Xcode o sul sito per sviluppatori.
- Una password specifica per app del tuo Apple Account, oppure una chiave API di App Store Connect.
- Il tuo Team ID, il codice di 10 caratteri del tuo account sviluppatore.
Il servizio di notarizzazione di Apple chiede anche l’hardened runtime e un timestamp sicuro. electron-builder attiva l’hardened runtime con una riga nella sua configurazione, mostrata qui sotto.
Com’è una build senza firma
Abbiamo compilato il template ufficiale create-tauri-app senza certificato. Questi sono i controlli che abbiamo fatto sul risultato:
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"
L’output su un runner macos-26 di GitHub:
x86_64 arm64 tauri-app.app: code object is not signed at all tauri-app.app: rejected source=no usable signature
La build ha richiesto 4 minuti. Ha creato un .app universale da 8,23 MiB e un .dmg da 3,57 MiB. Il .dmg di Electron Forge non era migliore. codesign mostrava Signature=adhoc e TeamIdentifier=not set, e spctl lo ha rifiutato. Gatekeeper blocca build come queste sui Mac dei tuoi utenti.
Electron Forge: firmare e notarizzare in make
Forge firma e notarizza durante npm run make quando la configurazione lo chiede. Questo è l’esempio della guida di Forge alla firma su 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
}
}
};Poi compila ogni architettura. Prima abbiamo aggiunto il maker DMG al template di default. Ciascuna build ha richiesto meno di 25 secondi:
npm install --save-dev @electron-forge/maker-dmg npm run make -- --arch=arm64 npm run make -- --arch=x64
Abbiamo provato anche --arch=universal sul template di default. È fallito con "the number of mach-o files is not the same between the arm64 and x64 builds". Anche la documentazione di electron-builder dice che le build per singola architettura sono le più affidabili.
electron-builder: notarize: true
electron-builder legge il certificato e il login Apple dalle variabili d’ambiente. La sua pagina sulla notarizzazione mostra questa configurazione:
# 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: imposta le variabili, poi compila
Tauri firma e notarizza dentro tauri build quando queste variabili sono impostate. I nomi vengono dalla guida di Tauri alla firma su 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
Notarizzare a mano qualsiasi app
Per altri toolkit, o per rifare un passaggio, esegui tu gli strumenti di Apple. Questi comandi vengono dalla documentazione di Apple sulla notarizzazione. Salva il login una volta, poi comprimi, invia e aspetta:
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"
Apple dice che la notarizzazione di solito richiede meno di un’ora. Non puoi fare lo staple di uno ZIP, quindi fai lo staple del .app e comprimilo di nuovo. Puoi anche inviare il .dmg stesso e fare lo staple su di lui. Se lo stato è Invalid, leggi il log:
xcrun notarytool log <submission-id> --keychain-profile "notarytool-password" developer_log.json
Farlo su un Mac a noleggio
Un pass giornaliero MacRun è un Mac mini M6 dedicato a $15. È installato Xcode 27.1, quindi codesign, notarytool e stapler sono pronti. Node e Rust non sono preinstallati. Hai i permessi di amministratore e Homebrew, quindi puoi installarli tu.
- Collegati via Tailscale con SSH, oppure apri il desktop con qualsiasi viewer VNC.
- Accedi a Xcode con il tuo Apple Account e crea lì il certificato Developer ID.
- Esporta il certificato con la sua chiave in un file .p12 e conservalo, per la CI in futuro.
- Clona il tuo repository, compila, notarizza e scarica il .dmg con il ticket allegato.
Il Mac viene cancellato quando il pass finisce. Prima fai push del codice e copia altrove il .p12. Per Xcode su uno schermo remoto, vedi la nostra guida a Xcode da Windows.
Chi non dovrebbe noleggiare un Mac per questo
- Team che hanno già la CI. Un runner macOS di GitHub può firmare e notarizzare con i secret. Il nostro job Electron è stato fatturato 2 minuti, circa 12 centesimi. Il job Tauri 5 minuti, circa 31 centesimi. L’attesa della notarizzazione aggiunge minuti. Vedi la nostra guida a GitHub Actions.
- Pipeline solo Linux. rcodesign è uno strumento open source che firma e notarizza da Linux o Windows. Richiede una chiave API di App Store Connect. Non è uno strumento Apple, e la sua ultima release è stata la 0.29.0 a novembre 2024.
- Release settimanali. Un runner mensile costa $104 per il primo mese, poi $139 al mese. Comprare un Mac usato può costare meno nell’arco di un anno.
Domande frequenti
Posso notarizzare un’app Mac su Windows?
+
Non con gli strumenti di Apple. codesign, notarytool e stapler girano solo su macOS. Lo strumento open source rcodesign può firmare e notarizzare da Windows o Linux, ma Apple non lo produce né lo supporta.
Mi serve un account Apple Developer a pagamento per notarizzare?
+
Sì. Ti serve un certificato Developer ID Application, che arriva con l’Apple Developer Program a 99 USD all’anno. La documentazione di Tauri dice che un account gratuito non può notarizzare.
Electron Forge può creare un .dmg per Mac su Linux?
+
Nel nostro test, no. Electron Forge su Ubuntu ha creato solo un .deb e un .rpm, e un pacchetto macOS forzato è fallito. Su un runner macOS 26, lo stesso template ha creato un .dmg e un .zip per arm64 e x64.
Come creo una build Mac universale?
+
Con Tauri, aggiungi entrambi i target Rust ed esegui tauri build --target universal-apple-darwin. Ci ha dato un solo .app con x86_64 e arm64. Con Electron Forge, il template di default non è riuscito a unire le build, quindi compila arm64 e x64 separatamente.
Quanto dura la notarizzazione di Apple?
+
Apple dice che di solito richiede meno di un’ora. Il flag --wait tiene notarytool in esecuzione finché Apple risponde, quindi non devi controllare a mano.
Quanto costa un Mac per una release?
+
Un pass giornaliero MacRun costa $15 per un Mac mini M6 dedicato con Xcode installato. Una settimana costa $59. Paghi una volta sola e nulla si rinnova.