Guide de Soumission au Mac App Store
Ce guide fournit des informations sur :
- Comment signer des applications Electron sur macOS ;
- Comment soumettre des applications Electron sur le Mac App Store (MAS) ;
- Les limitations de la compilation pour le MAS.
Spécifications requises
Pour signer des applications Electron, les outils suivants doivent d'abord être installés :
- Xcode 11 ou plus.
- Le module npm electron-osx-sign.
Vous devez également créer un compte Apple Developer et rejoindre le Apple Developper Program.
Signer des applications Electron
Les applications Electron peuvent être distribuées via le Mac App Store ou en dehors de celui-ci. Chaque moyen de distribution nécessite différentes façons de signer et de tester. Ce guide se concentre sur la distribution via le Mac App Store, mais mentionnera également d'autres méthodes.
Les étapes suivantes décrivent comment obtenir les certificats d'Apple, comment signer des applications Electron, et comment les tester.
Obtenir des certificats
La façon la plus simple d’obtenir des certificats de signature est d’utiliser Xcode :
- Ouvrir Xcode et dans les préférences ouvrir "Comptes" ;
- Connectez-vous avec votre compte Apple ;
- Sélectionnez une équipe et cliquez sur "Gérer les certificats" ;
- Dans le coin inférieur gauche de la feuille de certificats de signature, cliquez sur le bouton Ajouter (+) et ajoutez les certificats suivants :
- "Apple Development"
- "Apple Distribution"
Le certificat "Apple Development" est utilisé pour signer les applications dédiées au développement et aux tests sur des machines déja enregistrées sur le site Web Apple Developer. La méthode d'enregistrement sera décrite dans Préparer le profil de provisioning.
Les applications signées avec le certificat "Apple Development" ne peuvent pas être soumises à l'App Store Mac. Pour cela, les applications doivent être signées avec le certificat "Apple Distribution" à la place. Mais notez que les applications signées avec le certificat "Apple Distribution" ne peuvent pas s'exécuter directement, ils doivent être résignés par Apple pour pouvoir exécuter ce qui ne sera possible qu'après avoir été téléchargés à partir du Mac App Store.
Autres certificats
Vous remarquerez peut-être qu'il existe également d'autres types de certificats.
Le certificat « Application ID développeur » est utilisé pour signer les applications avant de les distribuer en dehors de l'App Store Mac.
Les certificats "Developer ID Installer" et "Mac Installer Distribution" sont utilisés pour signer le paquet Mac Installer au lieu de l'application. La plupart des applications d'Electron n'utilisent pas le paquet d'installation de Mac, donc elles ne sont généralement pas nécessaires.
La liste complète des types de certificats peut être trouvée ici.
Les applications signées avec les certificats "Apple Development" et "Apple Distribution" ne peuvent fonctionner que sous App Sandbox, donc ils doivent utiliser la version MAS de Electron. Cependant, le certificat "Application ID développeur" n'a pas ces restrictions, donc les applications signées avec cela peuvent soit utiliser soit la version normale, soit la version MAS d'Electron.
Noms de certificats hérités
Apple a changé le nom des certificats au cours des dernières années, vous pouvez les rencontrer lors de la lecture d'anciennes documentations, et certains utilitaires utilisent toujours l'un des anciens noms.
- Le certificat "Apple Distribution" a également été nommé comme "Application développeur 3ème partie pour Mac" et "Distribution pour MacApp Mac".
- Le certificat "Apple Development" était également nommé "Mac Developer" et "Development".
Préparer le profil de provisioning
Si vous voulez tester votre application sur votre ordinateur local avant de soumettre votre application à l'App Store Mac, vous devez signer l'application avec le certificat "Apple Development" avec le profil de provisioning intégré dans le pack d'applications.
Pour créer un profil de provisioning, vous pouvez suivre les étapes suivantes :
- Ouvrez la page « Certificats, Identificateurs & Profils » sur le site web de Développement d'Apple.
- Ajoutez un nouvel ID d'application pour votre application dans la page "Identifiants".
- Enregistrez votre machine locale dans la page "Appareils" ("Devices"). Vous pouvez trouver le "ID" de votre machine dans la page "Matériel" ("Hardware") de la page "Informations système" ("System Informations").
- Enregistrez un nouveau profil de provisioning dans la page "Profils" et téléchargez-le à
/path/to/yourapp.provisionprofile
.
Activer l'application Sandbox d'Apple
Les applications envoyées sur l'App Store Mac doivent s'exécuter sous l'App Sandbox d'Apple,, et seule la version MAS d'Electron peut fonctionner avec l'App Sandbox. La version standard darwin (mac) d'Electron ne pourra pas être lancée lorsqu'elle est exécutée sous l'App Sandbox.
Lors de la signature de l'application avec @electron/osx-sign
, elle ajoutera automatiquement les droits nécessaires aux droits de votre application, mais si vous utilisez des droits personnalisés, vous devez vous assurer que la capacité de l'application Sandbox est ajoutée :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
</dict>
</plist>
Étapes supplémentaires sans electron-osx-sign
Si vous signez votre application sans utiliser @electron/osx-sign
, vous devez vous assurer les droits du bundle d'applications ont au moins les clés suivantes :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1. //FR" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com. pple.security.app-sandbox</key>
<true/>
<key>com.apple.security. groupes de pplication</key>
<array>
<string>TEAM_ID. notre.bundle.id</string>
</array>
</dict>
</plist>
Le TEAM_ID
doit être remplacé par l'ID d'équipe de votre compte de développeur Apple, et le your.bundle.id
doivent être remplacés par l'ID d'application de l'application.
Et les droits suivants doivent être ajoutés aux exécutables et aux aides dans le lot de l'application :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.inherit</key>
<true/>
</dict>
</plist>
Et le pack d'application Info.plist
doit inclure la clé ElectronTeamID
, qui a l'identifiant de l'équipe de votre compte Apple Développeur comme valeur :
<plist version="1.0">
<dict>
...
<key>ElectronTeamID</key>
<string>TEAM_ID</string>
</dict>
</plist>
Lors de l'utilisation de @electron/osx-sign
, la clé ElectronTeamID
sera ajoutée automatiquement en extrayant l'ID d'équipe du nom du certificat. Vous pouvez avoir besoin d'ajouter cette clé manuellement si @electron/osx-sign
ne peut pas trouver le bon ID d'équipe.
Signer les applications pour le développement
Pour signer une application qui peut s'exécuter sur votre machine de développement, vous devez le signer avec le certificat "Apple Development" et passer le profil de provisioning à @electron/osx-sign
.
electron-osx-sign YourApp.app --identity='Apple Development' --provisioning-profile=/path/to/yourapp.provisionprofile
Si vous signez sans @electron/osx-sign
, vous devez placer le profil de provisioning sur YourApp.app/Contents/embedded.provisionprofile
.
L'application signée ne peut s'exécuter que sur les machines qui ont été enregistrées par le profil de provisionnement, et c'est la seule façon de tester l'application signée avant de soumettre à l'App Store Mac.
Signer les applications à soumettre sur l'App Store Mac
Pour signer une application qui sera soumise à Mac App Store, vous devez la signer avec le certificat "Apple Distribution". Notez que les applications signées avec ce certificat ne s'exécuteront nulle part, à moins qu'elles ne soient téléchargées depuis l'App Store Mac.
electron-osx-sign YourApp.app --identity='Apple Distribution'
Signer les applications à distribuer en dehors de l'App Store Mac
Si vous ne prévoyez pas de soumettre l'application à Mac App Store, vous pouvez la signer avec le certificat "Application ID développeur". De cette façon, il n'y a aucune exigence sur l'application Sandbox, et vous devriez utiliser la version darwin normale d'Electron si vous n'utilisez pas App Sandbox.
electron-osx-sign VotreApp.app --identity='Application ID développeur' -no-gatekeeper-assess
En utilisant --no-gatekeeper-assess
, @electron/osx-sign
passera la vérification de GateKeeper sur macOS car votre application n'a généralement pas encore été notariée par cette étape.
Ce guide ne couvre pas l'authentification d'application, mais vous pourriez vouloir le faire sinon Apple peut empêcher les utilisateurs d'utiliser votre application en dehors du Mac App Store.
Soumettre des applications sur l'App Store Mac
Après avoir signé l'application avec le certificat "Apple Distribution", vous pouvez continuer à la soumettre sur Mac App Store.
Cependant, ce tutoriel ne garantit pas que votre application sera approuvée par Apple ; vous avez encore besoin de lire le guide d'Apple pour soumettre votre application sur comment répondre aux exigences du Mac App Store.
Télécharger
Apple Transporter doit être utilisé pour télécharger l'application signée sur l'App Store pour le traitement, s'assurer que vous avez bien créé un enregistrement avant de le télécharger.
Si vous constatez des erreurs telles que des API privées, vous devriez vérifier si l'application est en utilisant la version MAS d'Electron.
Soumettre pour vérification
Après ces étapes, vous pouvez soumettre votre application à une révision.
Limitation de MAS Build
Afin de satisfaire toutes les exigences pour l'app sandboxing, les modules suivants ont été désactivé dans la compilation MAS :
crashReporter
autoUpdater
et les comportements suivants ont été modifiés :
- La capture vidéo peut ne pas fonctionner pour certaines machines.
- Certaines fonctionnalités d'accessibilité peuvent ne pas fonctionner.
- Les applications ne seront pas au courant des changements DNS.
De plus, en raison de l'utilisation de l'app sandboxing, les ressources étant accessibles par l'application sont strictement limitées. Vous pouvez lire App Sandboxing pour plus d'informations.
Droits supplémentaires
Selon les API Electron que votre application utilise, vous devrez peut-être ajouter des droits supplémentaires au fichier des droits de votre application. Sinon, l'application Sandbox peut vous empêchera de l'utiliser.
Accès réseau
Activez les connexions sortantes du réseau pour permettre votre application de se connecter à un serveur :
<key>com.apple.security.network.client</key>
<true/>
Activez les connexion entrantes du réseau pour permettre votre application d'ouvrir un système d'écoute socket :
<key>com.apple.security.network.server</key>
<true/>
Voir la documentation Activer les accès réseaux pour plus de détails.
dialog.showOpenDialog
<key>com.apple.security.files.user-selected.read-only</key>
<true/>
Voir la documentation Activer les fichiers sélectionnés par l'utilisateur pour plus de détails.
dialog.showSaveDialog
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
Voir la documentation Activer les fichiers sélectionnés par l'utilisateur pour plus de détails.
Algorithmes de chiffrement utilisés par Electron
Selon les pays dans lesquels vous publiez votre application, vous pourriez être requis pour fournir des informations sur les algorithmes de chiffrement utilisés dans votre logiciel . Voir la documentation de conformité à l'exportation de chiffrement pour plus d'informations.
Electron utilise ces algorithmes de chiffrement suivants :
- AES - NIST SP 800-38A, NIST SP 800-38D, RFC 3394
- HMAC - FIPS 198-1
- ECDSA - ANS X9.62–2005
- ECDH - ANS X9.63–2001
- HKDF - NIST SP 800-56C
- PBKDF2 - RFC 2898
- RSA - RFC 3447
- SHA - FIPS 180-4
- Blowfish - https://www.schneier.com/cryptography/blowfish/
- CAST - RFC 2144, RFC 2612
- DES - FIPS 46-3
- DH - RFC 2631
- DSA - ANSI X9.30
- EC - SEC 1
- IDEA - "On the Design and Security of Block Ciphers" book by X. Lai
- MD2 - RFC 1319
- MD4 - RFC 6150
- MD5 - RFC 1321
- MDC2 - ISO/IEC 10118-2
- RC2 - RFC 2268
- RC4 - RFC 4345
- RC5 - https://people.csail.mit.edu/rivest/Rivest-rc5rev.pdf
- RIPEMD - ISO/IEC 10118-3