forked from lightningpixel/modly
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathafter-pack.js
More file actions
41 lines (35 loc) · 1.69 KB
/
Copy pathafter-pack.js
File metadata and controls
41 lines (35 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// @ts-check
// Signature ad-hoc du bundle macOS.
//
// Sans licence Apple Developer (99 $/an) on ne peut ni signer avec un Developer
// ID ni notariser. Mais sur Apple Silicon, un binaire SANS AUCUNE signature
// refuse de se lancer (ce n'est pas un simple avertissement Gatekeeper).
// La signature ad-hoc (`--sign -`) est gratuite et lève ce blocage.
//
// Ce hook tourne APRÈS le packaging et AVANT la fabrication du DMG, donc la
// signature est bien embarquée dans l'app distribuée. Comme `identity: null`
// désactive la signature interne d'electron-builder, rien ne l'écrase ensuite.
//
// L'utilisateur verra quand même Gatekeeper au premier lancement
// ("développeur non vérifié") : clic droit > Ouvrir, ou `xattr -cr` sur l'app.
const path = require('path')
const { execFileSync } = require('child_process')
exports.default = async function afterPack(context) {
if (context.electronPlatformName !== 'darwin') return
const appPath = path.join(
context.appOutDir,
`${context.packager.appInfo.productFilename}.app`
)
// --deep est déprécié par Apple pour la signature réelle, mais reste la façon
// standard d'ad-hoc signer récursivement les binaires imbriqués (Electron
// Framework, helpers). Échouer ici doit casser le build : un DMG arm64 non
// signé ne se lance pas, autant le savoir en CI plutôt que chez l'utilisateur.
execFileSync('codesign', ['--force', '--deep', '--sign', '-', appPath], {
stdio: 'inherit'
})
// Vérifie que la signature est bien posée et que l'app est jugée valide.
execFileSync('codesign', ['--verify', '--verbose=2', appPath], {
stdio: 'inherit'
})
console.log(`[after-pack] Signature ad-hoc appliquée : ${appPath}`)
}