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. This guide focuses on distribution via Mac App Store.
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.
Apps signed with "Apple Development" and "Apple Distribution" certificates can only run under App Sandbox, so they must use the MAS build of 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
Apps submitted to the Mac App Store must run under Apple's App Sandbox, and only the MAS build of Electron can run with the 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.
When signing the app with @electron/osx-sign
, it will automatically add the necessary entitlements to your app's entitlements.
Extra steps without 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
.
const { signAsync } = require('@electron/osx-sign')
signAsync({
app: '/path/to/your.app',
identity: 'Apple Development',
provisioningProfile: '/path/to/your.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.
const { signAsync } = require('@electron/osx-sign')
signAsync({
app: 'path/to/your.app',
identity: 'Apple Distribution'
})
Submit apps to the Mac App Store
Après avoir signé l'application avec le certificat "Apple Distribution", vous pouvez continuer à la soumettre sur Mac App Store.
However, this guide do not ensure your app will be approved by Apple; you still need to read Apple's Submitting Your App guide on how to meet the Mac App Store requirements.
Télécharger
Apple Transporter should be used to upload the signed app to App Store Connect for processing, making sure you have created a record before uploading.
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
After uploading, you should submit your app for review.
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.
Also, due to the usage of app sandboxing, the resources which can be accessed by the app are strictly limited; you can read App Sandboxing for more information.
Droits supplémentaires
Every app running under the App Sandbox will run under a limited set of permissions, which limits potential damage from malicious code. 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.
Entitlements are specified using a file with format like property list (.plist
) or XML. You must provide an entitlement file for the application bundle itself and a child entitlement file which basically describes an inheritance of properties, specified for all other enclosing executable files like binaries, frameworks (.framework
), and dynamically linked libraries (.dylib
).
A full list of entitlements is available in the App Sandbox documentation, but below are a few entitlements you might need for your MAS app.
With @electron/osx-sign
, you can set custom entitlements per file as such:
const { signAsync } = require('@electron/osx-sign')
function getEntitlementsForFile (filePath) {
if (filePath.startsWith('my-path-1')) {
return './my-path-1.plist'
} else {
return './alternate.plist'
}
}
signAsync({
optionsForFile: (filePath) => ({
// Ensure you return the right entitlements path here based on the file being signed.
entitlements: getEntitlementsForFile(filePath)
})
})
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/>
See the Enabling Network Access documentation for more details.
dialog.showOpenDialog
<key>com.apple.security.files.user-selected.read-only</key>
<true/>
See the Enabling User-Selected File Access documentation for more details.
dialog.showSaveDialog
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
See the Enabling User-Selected File Access documentation for more details.
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 . See the encryption export compliance docs for more information.
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