Signer et notariser votre app Mac Electron ou Tauri depuis Windows ou Linux
Vous pouvez écrire une app Electron ou Tauri sous Windows ou Linux. La version macOS, c’est autre chose. Les outils de signature et de notarisation d’Apple ne tournent que sous macOS. Sans eux, les utilisateurs de Mac voient un avertissement et l’app ne s’ouvre pas. Cette page montre les étapes de build, de signature et de notarisation, avec les commandes que nous avons lancées.
Pourquoi l’étape Mac demande macOS
Trois outils Apple font le travail. codesign signe l’app. notarytool l’envoie au service de notarisation d’Apple. stapler attache le ticket qu’Apple renvoie. Les trois sont fournis avec macOS et Xcode. Apple ne propose aucune version pour Windows ou Linux.
La documentation des frameworks va dans le même sens. Tauri dit de lancer tauri build sur un ordinateur Mac. Electron Forge dit que Xcode est requis pour la notarisation. Nous avons aussi essayé le côté Linux sur GitHub Actions. Electron Forge sous Ubuntu a produit un .deb et un .rpm. Lui demander un paquet macOS a échoué.
Ce qu’il vous faut avant le jour de la sortie
- Une adhésion payante à l’Apple Developer Program. Apple l’affiche à 99 USD par an.
- Un certificat Developer ID Application. Seul l’Account Holder de l’équipe peut en créer un, dans Xcode ou sur le site développeur.
- Un mot de passe pour app de votre compte Apple, ou une clé API App Store Connect.
- Votre Team ID, le code de 10 caractères de votre compte développeur.
Le service de notarisation d’Apple demande aussi le hardened runtime et un horodatage sécurisé. electron-builder active le hardened runtime avec une ligne dans sa configuration, montrée plus bas.
À quoi ressemble un build non signé
Nous avons compilé le template officiel create-tauri-app sans certificat. Voici les vérifications que nous avons lancées sur le résultat :
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"
La sortie sur un runner macos-26 de GitHub :
x86_64 arm64 tauri-app.app: code object is not signed at all tauri-app.app: rejected source=no usable signature
Le build a pris 4 minutes. Il a produit un .app universel de 8.23 MiB et un .dmg de 3.57 MiB. Le .dmg d’Electron Forge n’était pas mieux. codesign a affiché Signature=adhoc et TeamIdentifier=not set, et spctl l’a rejeté. Gatekeeper bloque ce genre de builds sur les Mac de vos utilisateurs.
Electron Forge : signer et notariser pendant make
Forge signe et notarise pendant npm run make quand la configuration le demande. Voici l’exemple du guide de signature macOS de Forge :
// forge.config.js
module.exports = {
packagerConfig: {
osxSign: {},
osxNotarize: {
appleId: process.env.APPLE_ID,
appleIdPassword: process.env.APPLE_PASSWORD,
teamId: process.env.APPLE_TEAM_ID
}
}
};Compilez ensuite chaque architecture. Nous avons d’abord ajouté le maker DMG au template par défaut. Chaque build a pris moins de 25 secondes :
npm install --save-dev @electron-forge/maker-dmg npm run make -- --arch=arm64 npm run make -- --arch=x64
Nous avons aussi essayé --arch=universal sur le template par défaut. Il a échoué avec "the number of mach-o files is not the same between the arm64 and x64 builds". La documentation d’electron-builder dit aussi que les builds par architecture sont les plus fiables.
electron-builder : notarize: true
electron-builder lit le certificat et l’identifiant Apple dans des variables d’environnement. Sa page sur la notarisation montre cette configuration :
# 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 : définir les variables, puis compiler
Tauri signe et notarise pendant tauri build quand ces variables sont définies. Les noms viennent du guide de signature macOS de Tauri :
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
Notariser n’importe quelle app à la main
Pour d’autres outils, ou pour refaire une étape, lancez vous-même les outils d’Apple. Ces commandes viennent de la documentation d’Apple sur la notarisation. Enregistrez votre identifiant une fois, puis zippez, envoyez et attendez :
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 dit que la notarisation prend en général moins d’une heure. On ne peut pas agrafer un ZIP, donc agrafez le .app et zippez-le à nouveau. Vous pouvez aussi envoyer et agrafer le .dmg lui-même. Si le statut est Invalid, lisez le journal :
xcrun notarytool log <submission-id> --keychain-profile "notarytool-password" developer_log.json
Le faire sur un Mac loué
Un pass journée MacRun est un Mac mini M6 dédié pour $15. Xcode 27.1 est installé, donc codesign, notarytool et stapler sont prêts. Node et Rust ne sont pas préinstallés. Vous avez les droits administrateur et Homebrew, donc vous pouvez les installer vous-même.
- Connectez-vous via Tailscale en SSH, ou ouvrez le bureau avec n’importe quel client VNC.
- Connectez-vous à Xcode avec votre compte Apple et créez-y le certificat Developer ID.
- Exportez le certificat avec sa clé dans un fichier .p12 et gardez-le, pour la CI plus tard.
- Clonez votre dépôt, compilez, notarisez, et téléchargez le .dmg agrafé.
Le Mac est effacé à la fin du pass. Poussez votre code et copiez le .p12 avant. Pour Xcode sur un écran à distance, voyez notre guide Xcode depuis Windows.
Qui ne devrait pas louer un Mac pour ça
- Les équipes qui ont déjà une CI. Un runner macOS GitHub peut signer et notariser avec des secrets. Notre job Electron a été facturé 2 minutes, environ 12 cents. Le job Tauri a été facturé 5 minutes, environ 31 cents. L’attente de la notarisation ajoute des minutes. Voyez notre guide GitHub Actions.
- Les pipelines 100 % Linux. rcodesign est un outil open source qui signe et notarise depuis Linux ou Windows. Il demande une clé API App Store Connect. Ce n’est pas un outil Apple, et sa dernière version était la 0.29.0, en novembre 2024.
- Les sorties chaque semaine. Un runner au mois coûte $104 le premier mois, puis $139 par mois. Acheter un Mac d’occasion peut revenir moins cher sur un an.
Questions fréquentes
Puis-je notariser une app Mac sous Windows ?
+
Pas avec les outils d’Apple. codesign, notarytool et stapler ne tournent que sous macOS. L’outil open source rcodesign peut signer et notariser depuis Windows ou Linux, mais Apple ne le fait pas et ne le prend pas en charge.
Faut-il un compte Apple Developer payant pour notariser ?
+
Oui. Il vous faut un certificat Developer ID Application, qui vient avec l’Apple Developer Program à 99 USD par an. La documentation de Tauri dit qu’un compte gratuit ne peut pas notariser.
Electron Forge peut-il produire un .dmg Mac sous Linux ?
+
Dans notre test, non. Electron Forge sous Ubuntu n’a produit qu’un .deb et un .rpm, et un paquet macOS forcé a échoué. Sur un runner macOS 26, le même template a produit un .dmg et un .zip pour arm64 et x64.
Comment faire un build Mac universel ?
+
Avec Tauri, ajoutez les deux cibles Rust et lancez tauri build --target universal-apple-darwin. Nous avons obtenu un seul .app avec x86_64 et arm64. Avec Electron Forge, le template par défaut n’a pas réussi la fusion, donc compilez arm64 et x64 séparément.
Combien de temps prend la notarisation Apple ?
+
Apple dit qu’elle prend en général moins d’une heure. L’option --wait garde notarytool actif jusqu’à la réponse d’Apple, donc vous n’avez pas à vérifier en boucle.
Combien coûte un Mac pour une seule sortie ?
+
Un pass journée MacRun coûte $15 pour un Mac mini M6 dédié avec Xcode installé. Une semaine coûte $59. Vous payez une seule fois et rien ne se renouvelle.