123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- /**
- * notarize.js
- *
- * @see https://oldj.net/blog/2019/12/29/electron-builder-sign-and-notarize-for-macos
- */
- require('dotenv').config()
- const { notarize } = require('@electron/notarize')
- const { exec } = require('child_process')
- function getPasswordFromKeychain(account, service) {
- return new Promise((resolve, reject) => {
- const command = `security find-generic-password -a '${account}' -s '${service}' -w`
- exec(command, (error, stdout, stderr) => {
- if (error) {
- reject(new Error(`Error fetching password: ${stderr}`))
- } else {
- resolve(stdout.trim())
- }
- })
- })
- }
- exports.default = async function notarizing(context) {
- const appName = context.packager.appInfo.productFilename
- const { electronPlatformName, appOutDir } = context
- console.log(`in notarize, ${electronPlatformName}...`)
- if (electronPlatformName !== 'darwin') {
- return
- }
- if (process.env.MAKE_FOR === 'dev' || process.env.SKIP_NOTARIZATION) {
- console.log('skip notarization.')
- return // for dev, skip notarization
- }
- let appPath = `${appOutDir}/${appName}.app`
- let {
- APP_BUNDLE_ID: appBundleId,
- TEAM_ID: teamId,
- APPLE_ID: appleId,
- APPLE_APP_SPECIFIC_PASSWORD: appleIdPassword,
- } = process.env
- if (!appleIdPassword) {
- //appleIdPassword = `@keychain:"Apple Notarize: ${appleId}"`
- appleIdPassword = await getPasswordFromKeychain(appleId, `Apple Notarize: ${appleId}`)
- process.env.APPLE_APP_SPECIFIC_PASSWORD = appleIdPassword
- }
- if (!appleId || !appBundleId || !teamId || !appleIdPassword) {
- console.log('Not notarized.')
- return
- }
- console.log('Start notarizing...')
- await notarize({
- appPath,
- tool: 'notarytool',
- //appBundleId,
- //ascProvider,
- appleId,
- appleIdPassword,
- teamId,
- })
- console.log('Notarize done.')
- }
|