diff --git a/.changeset/healthy-walls-peel.md b/.changeset/healthy-walls-peel.md
new file mode 100644
index 00000000000..4c35066b6d1
--- /dev/null
+++ b/.changeset/healthy-walls-peel.md
@@ -0,0 +1,5 @@
+---
+"app-builder-lib": minor
+---
+
+feat: integrating @electron/notarize into mac signing flow
diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index f244d4d4652..c476af5ff60 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -69,7 +69,7 @@ jobs:
- name: Test
run: pnpm ci:test
env:
- TEST_FILES: masTest,dmgTest,protonTest,filesTest
+ TEST_FILES: masTest,dmgTest,protonTest,filesTest,macPackagerTest
FORCE_COLOR: 1
# Need to separate from other tests because logic is specific to when TOKEN env vars are set
diff --git a/docs/configuration/mac.md b/docs/configuration/mac.md
index aeef6e8b7a2..530c43683fc 100644
--- a/docs/configuration/mac.md
+++ b/docs/configuration/mac.md
@@ -97,13 +97,17 @@ The top-level [mac](configuration.md#Configuration-mac) key contains set of opti
This option has no effect unless building for “universal” arch.
-singleArchFiles
String - Minimatch pattern of paths that are allowed to be present in one of the ASAR files, but not in the other.
+singleArchFiles
String | “undefined” - Minimatch pattern of paths that are allowed to be present in one of the ASAR files, but not in the other.
This option has no effect unless building for “universal” arch and applies only if mergeASARs
is true
.
-x64ArchFiles
String - Minimatch pattern of paths that are allowed to be x64 binaries in both ASAR files
+x64ArchFiles
String | “undefined” - Minimatch pattern of paths that are allowed to be x64 binaries in both ASAR files
This option has no effect unless building for “universal” arch and applies only if mergeASARs
is true
.
+
+notarize
module:app-builder-lib/out/options/macOptions.NotarizeOptions | Boolean | “undefined” - Options to use for @electron/notarize (ref: https://github.com/electron/notarize). Supports both legacy
and notarytool
notarization tools. Use false
to explicitly disable
+Note: You MUST specify APPLE_ID
and APPLE_APP_SPECIFIC_PASSWORD
via environment variables to activate notarization step
+
diff --git a/packages/app-builder-lib/package.json b/packages/app-builder-lib/package.json
index 75eb0d067e0..587aa044a28 100644
--- a/packages/app-builder-lib/package.json
+++ b/packages/app-builder-lib/package.json
@@ -49,9 +49,10 @@
"dependencies": {
"7zip-bin": "~5.1.1",
"@develar/schema-utils": "~2.6.5",
+ "@electron/notarize": "^1.2.3",
"@electron/osx-sign": "^1.0.4",
"@electron/rebuild": "^3.2.10",
- "@electron/universal": "1.3.3",
+ "@electron/universal": "1.3.4",
"@malept/flatpak-bundler": "^0.4.0",
"async-exit-hook": "^2.0.1",
"bluebird-lst": "^1.0.9",
diff --git a/packages/app-builder-lib/scheme.json b/packages/app-builder-lib/scheme.json
index 4d52669026f..8792c88030a 100644
--- a/packages/app-builder-lib/scheme.json
+++ b/packages/app-builder-lib/scheme.json
@@ -2637,6 +2637,20 @@
"string"
]
},
+ "notarize": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/NotarizeOptions"
+ },
+ {
+ "type": [
+ "null",
+ "boolean"
+ ]
+ }
+ ],
+ "description": "Options to use for @electron/notarize (ref: https://github.com/electron/notarize).\nSupports both `legacy` and `notarytool` notarization tools. Use `false` to explicitly disable\n\nNote: You MUST specify `APPLE_ID` and `APPLE_APP_SPECIFIC_PASSWORD` via environment variables to activate notarization step"
+ },
"protocols": {
"anyOf": [
{
@@ -2756,7 +2770,10 @@
},
"singleArchFiles": {
"description": "Minimatch pattern of paths that are allowed to be present in one of the\nASAR files, but not in the other.\n\nThis option has no effect unless building for \"universal\" arch and applies\nonly if `mergeASARs` is `true`.",
- "type": "string"
+ "type": [
+ "null",
+ "string"
+ ]
},
"strictVerify": {
"anyOf": [
@@ -2856,7 +2873,10 @@
},
"x64ArchFiles": {
"description": "Minimatch pattern of paths that are allowed to be x64 binaries in both\nASAR files\n\nThis option has no effect unless building for \"universal\" arch and applies\nonly if `mergeASARs` is `true`.",
- "type": "string"
+ "type": [
+ "null",
+ "string"
+ ]
}
},
"type": "object"
@@ -3255,6 +3275,20 @@
"string"
]
},
+ "notarize": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/NotarizeOptions"
+ },
+ {
+ "type": [
+ "null",
+ "boolean"
+ ]
+ }
+ ],
+ "description": "Options to use for @electron/notarize (ref: https://github.com/electron/notarize).\nSupports both `legacy` and `notarytool` notarization tools. Use `false` to explicitly disable\n\nNote: You MUST specify `APPLE_ID` and `APPLE_APP_SPECIFIC_PASSWORD` via environment variables to activate notarization step"
+ },
"protocols": {
"anyOf": [
{
@@ -3374,7 +3408,10 @@
},
"singleArchFiles": {
"description": "Minimatch pattern of paths that are allowed to be present in one of the\nASAR files, but not in the other.\n\nThis option has no effect unless building for \"universal\" arch and applies\nonly if `mergeASARs` is `true`.",
- "type": "string"
+ "type": [
+ "null",
+ "string"
+ ]
},
"strictVerify": {
"anyOf": [
@@ -3474,7 +3511,10 @@
},
"x64ArchFiles": {
"description": "Minimatch pattern of paths that are allowed to be x64 binaries in both\nASAR files\n\nThis option has no effect unless building for \"universal\" arch and applies\nonly if `mergeASARs` is `true`.",
- "type": "string"
+ "type": [
+ "null",
+ "string"
+ ]
}
},
"type": "object"
@@ -3659,6 +3699,33 @@
},
"type": "object"
},
+ "NotarizeOptions": {
+ "additionalProperties": false,
+ "properties": {
+ "appBundleId": {
+ "description": "The app bundle identifier your Electron app is using. E.g. com.github.electron. Useful if notarization ID differs from app ID (unlikely).\nOnly used by `legacy` notarization tool",
+ "type": [
+ "null",
+ "string"
+ ]
+ },
+ "ascProvider": {
+ "description": "Your Team Short Name. Only used by `legacy` notarization tool",
+ "type": [
+ "null",
+ "string"
+ ]
+ },
+ "teamId": {
+ "description": "The team ID you want to notarize under. Only needed if using `notarytool`",
+ "type": [
+ "null",
+ "string"
+ ]
+ }
+ },
+ "type": "object"
+ },
"NsisOptions": {
"additionalProperties": false,
"properties": {
diff --git a/packages/app-builder-lib/src/macPackager.ts b/packages/app-builder-lib/src/macPackager.ts
index eeafd8adb63..8287fd27dc9 100644
--- a/packages/app-builder-lib/src/macPackager.ts
+++ b/packages/app-builder-lib/src/macPackager.ts
@@ -1,5 +1,5 @@
import BluebirdPromise from "bluebird-lst"
-import { deepAssign, Arch, AsyncTaskManager, exec, InvalidConfigurationError, log, use, getArchSuffix } from "builder-util"
+import { deepAssign, Arch, AsyncTaskManager, exec, InvalidConfigurationError, log, use, getArchSuffix, spawn } from "builder-util"
import { signAsync } from "@electron/osx-sign"
import { SignOptions } from "@electron/osx-sign/dist/cjs/types"
import { mkdir, readdir } from "fs/promises"
@@ -20,6 +20,7 @@ import { createCommonTarget, NoOpTarget } from "./targets/targetFactory"
import { isMacOsHighSierra } from "./util/macosVersion"
import { getTemplatePath } from "./util/pathManager"
import * as fs from "fs/promises"
+import { notarize, NotarizeOptions } from "@electron/notarize"
export default class MacPackager extends PlatformPackager {
readonly codeSigningInfo = new Lazy(() => {
@@ -336,6 +337,8 @@ export default class MacPackager extends PlatformPackager {
await this.doFlat(appPath, artifactPath, masInstallerIdentity, keychainFile)
await this.dispatchArtifactCreated(artifactPath, null, Arch.x64, this.computeSafeArtifactName(artifactName, "pkg", arch, true, this.platformSpecificBuildOptions.defaultArch))
}
+
+ await this.notarizeIfProvided(appPath)
}
private async adjustSignOptions(signOptions: any, masOptions: MasConfiguration | null) {
@@ -443,9 +446,10 @@ export default class MacPackager extends PlatformPackager {
protected async signApp(packContext: AfterPackContext, isAsar: boolean): Promise {
const appFileName = `${this.appInfo.productFilename}.app`
- await BluebirdPromise.map(readdir(packContext.appOutDir), (file: string): any => {
+ await BluebirdPromise.map(readdir(packContext.appOutDir), async (file: string): Promise => {
if (file === appFileName) {
- return this.sign(path.join(packContext.appOutDir, file), null, null, null)
+ const appPath = path.join(packContext.appOutDir, file)
+ await this.sign(appPath, null, null, null)
}
return null
})
@@ -463,6 +467,56 @@ export default class MacPackager extends PlatformPackager {
}
})
}
+
+ private async notarizeIfProvided(appPath: string) {
+ const notarizeOptions = this.platformSpecificBuildOptions.notarize
+ if (notarizeOptions === false) {
+ log.info({ reason: "`notarizeOptions` is explicitly set to false" }, "skipped macOS notarization")
+ return
+ }
+ const appleId = process.env.APPLE_ID
+ const appleIdPassword = process.env.APPLE_APP_SPECIFIC_PASSWORD
+ if (!appleId && !appleIdPassword) {
+ // if no credentials provided, skip silently
+ return
+ }
+ if (!appleId) {
+ throw new InvalidConfigurationError(`APPLE_ID env var needs to be set`)
+ }
+ if (!appleIdPassword) {
+ throw new InvalidConfigurationError(`APPLE_APP_SPECIFIC_PASSWORD env var needs to be set`)
+ }
+ const options = this.generateOptions(appPath, appleId, appleIdPassword)
+ await notarize(options)
+ // Verify
+ await spawn("spctl", ["-a", "-t", "open", "--context", "context:primary-signature", "-v", `"${appPath}"`])
+ log.info(null, "notarization successful")
+ }
+
+ private generateOptions(appPath: string, appleId: string, appleIdPassword: string): NotarizeOptions {
+ const baseOptions = { appPath, appleId, appleIdPassword }
+ const options = this.platformSpecificBuildOptions.notarize
+ if (typeof options === "boolean") {
+ return {
+ ...baseOptions,
+ tool: "legacy",
+ appBundleId: this.appInfo.id,
+ }
+ }
+ if (options?.teamId) {
+ return {
+ ...baseOptions,
+ tool: "notarytool",
+ teamId: options.teamId,
+ }
+ }
+ return {
+ ...baseOptions,
+ tool: "legacy",
+ appBundleId: options?.appBundleId || this.appInfo.id,
+ ascProvider: options?.ascProvider || undefined,
+ }
+ }
}
function getCertificateTypes(isMas: boolean, isDevelopment: boolean): CertType[] {
diff --git a/packages/app-builder-lib/src/options/macOptions.ts b/packages/app-builder-lib/src/options/macOptions.ts
index 90cae3a0658..c41ed4c8456 100644
--- a/packages/app-builder-lib/src/options/macOptions.ts
+++ b/packages/app-builder-lib/src/options/macOptions.ts
@@ -194,7 +194,7 @@ export interface MacConfiguration extends PlatformSpecificBuildOptions {
* This option has no effect unless building for "universal" arch and applies
* only if `mergeASARs` is `true`.
*/
- readonly singleArchFiles?: string
+ readonly singleArchFiles?: string | null
/**
* Minimatch pattern of paths that are allowed to be x64 binaries in both
@@ -203,7 +203,33 @@ export interface MacConfiguration extends PlatformSpecificBuildOptions {
* This option has no effect unless building for "universal" arch and applies
* only if `mergeASARs` is `true`.
*/
- readonly x64ArchFiles?: string
+ readonly x64ArchFiles?: string | null
+
+ /**
+ * Options to use for @electron/notarize (ref: https://github.com/electron/notarize).
+ * Supports both `legacy` and `notarytool` notarization tools. Use `false` to explicitly disable
+ *
+ * Note: You MUST specify `APPLE_ID` and `APPLE_APP_SPECIFIC_PASSWORD` via environment variables to activate notarization step
+ */
+ readonly notarize?: NotarizeOptions | boolean | null
+}
+
+export interface NotarizeOptions {
+ /**
+ * The app bundle identifier your Electron app is using. E.g. com.github.electron. Useful if notarization ID differs from app ID (unlikely).
+ * Only used by `legacy` notarization tool
+ */
+ readonly appBundleId?: string | null
+
+ /**
+ * Your Team Short Name. Only used by `legacy` notarization tool
+ */
+ readonly ascProvider?: string | null
+
+ /**
+ * The team ID you want to notarize under. Only needed if using `notarytool`
+ */
+ readonly teamId?: string | null
}
export interface DmgOptions extends TargetSpecificOptions {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a43ba699bfc..17bacf302cc 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -91,9 +91,10 @@ importers:
'@babel/preset-env': 7.15.6
'@babel/preset-react': 7.14.5
'@develar/schema-utils': ~2.6.5
+ '@electron/notarize': ^1.2.3
'@electron/osx-sign': ^1.0.4
'@electron/rebuild': ^3.2.10
- '@electron/universal': 1.3.3
+ '@electron/universal': 1.3.4
'@malept/flatpak-bundler': ^0.4.0
'@types/debug': 4.1.7
'@types/ejs': 3.1.0
@@ -129,9 +130,10 @@ importers:
dependencies:
7zip-bin: 5.1.1
'@develar/schema-utils': 2.6.5
+ '@electron/notarize': 1.2.3
'@electron/osx-sign': 1.0.4
'@electron/rebuild': 3.2.10
- '@electron/universal': 1.3.3
+ '@electron/universal': 1.3.4
'@malept/flatpak-bundler': 0.4.0
async-exit-hook: 2.0.1
bluebird-lst: 1.0.9
@@ -2717,6 +2719,16 @@ packages:
'@types/glob': 7.2.0
dev: false
+ /@electron/notarize/1.2.3:
+ resolution: {integrity: sha512-9oRzT56rKh5bspk3KpAVF8lPKHYQrBnRwcgiOeR0hdilVEQmszDaAu0IPCPrwwzJN0ugNs0rRboTreHMt/6mBQ==}
+ engines: {node: '>= 10.0.0'}
+ dependencies:
+ debug: 4.3.4
+ fs-extra: 9.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
/@electron/osx-sign/1.0.4:
resolution: {integrity: sha512-xfhdEcIOfAZg7scZ9RQPya1G1lWo8/zMCwUXAulq0SfY7ONIW+b9qGyKdMyuMctNYwllrIS+vmxfijSfjeh97g==}
engines: {node: '>=12.0.0'}
@@ -2756,14 +2768,14 @@ packages:
- supports-color
dev: false
- /@electron/universal/1.3.3:
- resolution: {integrity: sha512-79yc61D5QWaQpia+sLQbIIi5iVoV4y9HtgOTlE0fYT0xoyg+ChwndBl4a0Q7yJfDsqq+/nLEPE655F0bTpDiCg==}
+ /@electron/universal/1.3.4:
+ resolution: {integrity: sha512-BdhBgm2ZBnYyYRLRgOjM5VHkyFItsbggJ0MHycOjKWdFGYwK97ZFXH54dTvUWEfha81vfvwr5On6XBjt99uDcg==}
engines: {node: '>=8.6'}
dependencies:
'@electron/asar': 3.2.1
'@malept/cross-spawn-promise': 1.1.1
debug: 4.3.4
- dir-compare: 2.4.0
+ dir-compare: 3.3.0
fs-extra: 9.1.0
minimatch: 3.1.2
plist: 3.0.6
@@ -2836,7 +2848,7 @@ packages:
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
'@jest/types': 27.5.1
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
chalk: 4.1.2
jest-message-util: 27.5.1
jest-util: 27.5.1
@@ -2892,7 +2904,7 @@ packages:
dependencies:
'@jest/fake-timers': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
jest-mock: 27.5.1
/@jest/fake-timers/27.5.1:
@@ -2901,7 +2913,7 @@ packages:
dependencies:
'@jest/types': 27.5.1
'@sinonjs/fake-timers': 8.1.0
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
jest-message-util: 27.5.1
jest-mock: 27.5.1
jest-util: 27.5.1
@@ -2928,7 +2940,7 @@ packages:
'@jest/test-result': 27.5.1
'@jest/transform': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
chalk: 4.1.2
collect-v8-coverage: 1.0.1
exit: 0.1.2
@@ -3041,7 +3053,7 @@ packages:
dependencies:
'@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
'@types/yargs': 16.0.4
chalk: 4.1.2
@@ -3283,12 +3295,12 @@ packages:
requiresBuild: true
dependencies:
'@types/minimatch': 3.0.5
- '@types/node': 17.0.25
+ '@types/node': 18.11.11
/@types/graceful-fs/4.1.5:
resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==}
dependencies:
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
/@types/hosted-git-info/3.0.2:
resolution: {integrity: sha512-RURNTeEFUwF+ifnp7kK3WLLlTmBSlRynLNS9jeAsI6RHtSrupV0l0nO6kmpaz75EUJVexy348bR452SvmH98vQ==}
@@ -3400,9 +3412,7 @@ packages:
/@types/node/16.11.43:
resolution: {integrity: sha512-GqWykok+3uocgfAJM8imbozrqLnPyTrpFlrryURQlw1EesPUCx5XxTiucWDSFF9/NUEXDuD4bnvHm8xfVGWTpQ==}
-
- /@types/node/17.0.25:
- resolution: {integrity: sha512-wANk6fBrUwdpY4isjWrKTufkrXdu1D2YHCot2fD/DfWxF5sMrVSA+KN7ydckvaTCh0HiqX9IVl0L5/ZoXg5M7w==}
+ dev: true
/@types/node/18.11.11:
resolution: {integrity: sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g==}
@@ -3418,7 +3428,7 @@ packages:
resolution: {integrity: sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==}
requiresBuild: true
dependencies:
- '@types/node': 16.11.43
+ '@types/node': 18.11.11
xmlbuilder: 15.1.1
dev: false
@@ -4638,11 +4648,6 @@ packages:
resolution: {integrity: sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==}
dev: true
- /colors/1.0.3:
- resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==}
- engines: {node: '>=0.1.90'}
- dev: false
-
/combined-stream/1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
@@ -4684,13 +4689,6 @@ packages:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
dev: true
- /commander/2.9.0:
- resolution: {integrity: sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==}
- engines: {node: '>= 0.6.x'}
- dependencies:
- graceful-readlink: 1.0.1
- dev: false
-
/commander/5.1.0:
resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==}
engines: {node: '>= 6'}
@@ -5759,14 +5757,11 @@ packages:
engines: {node: '>=0.3.1'}
dev: true
- /dir-compare/2.4.0:
- resolution: {integrity: sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==}
- hasBin: true
+ /dir-compare/3.3.0:
+ resolution: {integrity: sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==}
dependencies:
buffer-equal: 1.0.0
- colors: 1.0.3
- commander: 2.9.0
- minimatch: 3.0.4
+ minimatch: 3.1.2
dev: false
/dir-glob/3.0.1:
@@ -6743,10 +6738,6 @@ packages:
resolution: {integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==}
dev: false
- /graceful-readlink/1.0.1:
- resolution: {integrity: sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==}
- dev: false
-
/grapheme-splitter/1.0.4:
resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
dev: true
@@ -7428,7 +7419,7 @@ packages:
'@jest/environment': 27.5.1
'@jest/test-result': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
chalk: 4.1.2
co: 4.6.0
dedent: 0.7.0
@@ -7557,7 +7548,7 @@ packages:
'@jest/environment': 27.5.1
'@jest/fake-timers': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
jest-mock: 27.5.1
jest-util: 27.5.1
jsdom: 16.7.0
@@ -7574,7 +7565,7 @@ packages:
'@jest/environment': 27.5.1
'@jest/fake-timers': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
jest-mock: 27.5.1
jest-util: 27.5.1
@@ -7616,7 +7607,7 @@ packages:
dependencies:
'@jest/types': 27.5.1
'@types/graceful-fs': 4.1.5
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
anymatch: 3.1.3
fb-watchman: 2.0.2
graceful-fs: 4.2.10
@@ -7637,7 +7628,7 @@ packages:
'@jest/source-map': 27.5.1
'@jest/test-result': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
chalk: 4.1.2
co: 4.6.0
expect: 27.5.1
@@ -7698,7 +7689,7 @@ packages:
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
'@jest/types': 27.5.1
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
/jest-pnp-resolver/1.2.3_jest-resolve@27.5.1:
resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
@@ -7754,7 +7745,7 @@ packages:
'@jest/test-result': 27.5.1
'@jest/transform': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
chalk: 4.1.2
emittery: 0.8.1
graceful-fs: 4.2.10
@@ -7817,7 +7808,7 @@ packages:
resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
graceful-fs: 4.2.10
/jest-snapshot/27.5.1:
@@ -7866,7 +7857,7 @@ packages:
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
'@jest/types': 27.5.1
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
chalk: 4.1.2
ci-info: 3.7.0
graceful-fs: 4.2.10
@@ -7889,7 +7880,7 @@ packages:
dependencies:
'@jest/test-result': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
ansi-escapes: 4.3.2
chalk: 4.1.2
jest-util: 27.5.1
@@ -7908,7 +7899,7 @@ packages:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
engines: {node: '>= 10.13.0'}
dependencies:
- '@types/node': 16.11.12
+ '@types/node': 18.11.11
merge-stream: 2.0.0
supports-color: 8.1.1
@@ -8806,12 +8797,6 @@ packages:
engines: {node: '>=4'}
dev: true
- /minimatch/3.0.4:
- resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==}
- dependencies:
- brace-expansion: 1.1.11
- dev: false
-
/minimatch/3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
diff --git a/test/snapshots/mac/macPackagerTest.js.snap b/test/snapshots/mac/macPackagerTest.js.snap
index 741b48f2a90..98d1d3e2560 100644
--- a/test/snapshots/mac/macPackagerTest.js.snap
+++ b/test/snapshots/mac/macPackagerTest.js.snap
@@ -27,7 +27,6 @@ Object {
"fileContent": Object {
"files": Array [
Object {
- "blockMapSize": "@blockMapSize",
"sha512": "@sha512",
"size": "@size",
"url": "Test App ßW-1.1.0-mac.zip",
@@ -49,7 +48,14 @@ Object {
"file": "Test App ßW-1.1.0-mac.zip",
"safeArtifactName": "TestApp-1.1.0-mac.zip",
"updateInfo": Object {
- "blockMapSize": "@blockMapSize",
+ "sha512": "@sha512",
+ "size": "@size",
+ },
+ },
+ Object {
+ "file": "Test App ßW-1.1.0-mac.zip.blockmap",
+ "safeArtifactName": "Test App ßW-1.1.0-mac.zip.blockmap",
+ "updateInfo": Object {
"sha512": "@sha512",
"size": "@size",
},
@@ -75,7 +81,7 @@ Object {
"CFBundleTypeExtensions": Array [
"boo",
],
- "CFBundleTypeIconFile": "Test App ßW.icns",
+ "CFBundleTypeIconFile": "icon.icns",
"CFBundleTypeName": "Boo",
"CFBundleTypeRole": "Shell",
"LSHandlerRank": "Owner",
@@ -92,7 +98,7 @@ Object {
},
],
"CFBundleExecutable": "Test App ßW",
- "CFBundleIconFile": "Test App ßW.icns",
+ "CFBundleIconFile": "icon.icns",
"CFBundleIdentifier": "foo",
"CFBundleInfoDictionaryVersion": "6.0",
"CFBundleName": "Test App ßW",
@@ -180,19 +186,16 @@ Object {
"fileContent": Object {
"files": Array [
Object {
- "blockMapSize": "@blockMapSize",
"sha512": "@sha512",
"size": "@size",
"url": "TestApp-1.1.0-mac-x64.zip",
},
Object {
- "blockMapSize": "@blockMapSize",
"sha512": "@sha512",
"size": "@size",
"url": "TestApp-1.1.0-mac-arm64.zip",
},
Object {
- "blockMapSize": "@blockMapSize",
"sha512": "@sha512",
"size": "@size",
"url": "TestApp-1.1.0-mac-universal.zip",
@@ -223,7 +226,14 @@ Object {
"arch": "arm64",
"file": "TestApp-1.1.0-mac-arm64.zip",
"updateInfo": Object {
- "blockMapSize": "@blockMapSize",
+ "sha512": "@sha512",
+ "size": "@size",
+ },
+ },
+ Object {
+ "file": "TestApp-1.1.0-mac-arm64.zip.blockmap",
+ "safeArtifactName": "TestApp-1.1.0-mac-arm64.zip.blockmap",
+ "updateInfo": Object {
"sha512": "@sha512",
"size": "@size",
},
@@ -232,7 +242,14 @@ Object {
"arch": "universal",
"file": "TestApp-1.1.0-mac-universal.zip",
"updateInfo": Object {
- "blockMapSize": "@blockMapSize",
+ "sha512": "@sha512",
+ "size": "@size",
+ },
+ },
+ Object {
+ "file": "TestApp-1.1.0-mac-universal.zip.blockmap",
+ "safeArtifactName": "TestApp-1.1.0-mac-universal.zip.blockmap",
+ "updateInfo": Object {
"sha512": "@sha512",
"size": "@size",
},
@@ -241,7 +258,14 @@ Object {
"arch": "x64",
"file": "TestApp-1.1.0-mac-x64.zip",
"updateInfo": Object {
- "blockMapSize": "@blockMapSize",
+ "sha512": "@sha512",
+ "size": "@size",
+ },
+ },
+ Object {
+ "file": "TestApp-1.1.0-mac-x64.zip.blockmap",
+ "safeArtifactName": "TestApp-1.1.0-mac-x64.zip.blockmap",
+ "updateInfo": Object {
"sha512": "@sha512",
"size": "@size",
},
@@ -289,11 +313,11 @@ Object {
exports[`two-package 3`] = `
Array [
- "icon.icns",
"app-update.yml",
"app.asar",
"bn.lproj",
"en.lproj",
+ "icon.icns",
]
`;
@@ -336,11 +360,11 @@ Object {
exports[`two-package 5`] = `
Array [
- "icon.icns",
"app-update.yml",
"app.asar",
"bn.lproj",
"en.lproj",
+ "icon.icns",
]
`;
@@ -383,10 +407,10 @@ Object {
exports[`two-package 7`] = `
Array [
- "icon.icns",
"app-update.yml",
"app.asar",
"bn.lproj",
"en.lproj",
+ "icon.icns",
]
`;
diff --git a/test/src/mac/macPackagerTest.ts b/test/src/mac/macPackagerTest.ts
index 00bfd9805b9..2e85239714a 100644
--- a/test/src/mac/macPackagerTest.ts
+++ b/test/src/mac/macPackagerTest.ts
@@ -18,6 +18,7 @@ test.ifMac.ifAll("two-package", () =>
electronUpdaterCompatibility: ">=2.16",
electronLanguages: ["bn", "en"],
timestamp: undefined,
+ notarize: false,
},
//tslint:disable-next-line:no-invalid-template-strings
artifactName: "${name}-${version}-${os}-${arch}.${ext}",