scratch-desktop/scripts/afterSign.js
2020-07-24 17:07:21 -07:00

48 lines
1.7 KiB
JavaScript

const {notarize} = require('electron-notarize');
const notarizeMacBuild = async function (context) {
// keep this in sync with appId in the electron-builder config
const appId = 'edu.mit.scratch.scratch-desktop';
if (!process.env.AC_USERNAME) {
console.error([
'This build is not notarized and will not run on newer versions of macOS!',
'Notarizing the macOS build requires an Apple ID. To notarize future builds:',
'* Set the environment variable AC_USERNAME to your@apple.id and',
'* Either set AC_PASSWORD or ensure your keychain has an item for "Application Loader: your@apple.id"'
].join('\n'));
return;
}
const appleId = process.env.AC_USERNAME;
const appleIdKeychainItem = `Application Loader: ${appleId}`;
if (process.env.AC_PASSWORD) {
console.log(`Notarizing with Apple ID "${appleId}" and a password`);
} else {
console.log(`Notarizing with Apple ID "${appleId}" and keychain item "${appleIdKeychainItem}"`);
}
const {appOutDir} = context;
const productFilename = context.packager.appInfo.productFilename;
await notarize({
appBundleId: appId,
appPath: `${appOutDir}/${productFilename}.app`,
appleId,
appleIdPassword: process.env.AC_PASSWORD || `@keychain:${appleIdKeychainItem}`
});
};
const afterSign = async function (context) {
const {electronPlatformName} = context;
switch (electronPlatformName) {
case 'mas': // macOS build for Mac App Store
break;
case 'darwin': // macOS build NOT for Mac App Store
await notarizeMacBuild(context);
break;
}
};
module.exports = afterSign;