app-builder-lib 27.0.0-alpha.2 → 27.0.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/dist/Framework.d.ts +2 -0
  2. package/dist/Framework.d.ts.map +1 -1
  3. package/dist/Framework.js.map +1 -1
  4. package/dist/asar/asarFileChecker.d.ts +4 -2
  5. package/dist/asar/asarFileChecker.d.ts.map +1 -1
  6. package/dist/asar/asarFileChecker.js +2 -3
  7. package/dist/asar/asarFileChecker.js.map +1 -1
  8. package/dist/codeSign/certInfo.d.ts +14 -0
  9. package/dist/codeSign/certInfo.d.ts.map +1 -1
  10. package/dist/codeSign/certInfo.js +49 -0
  11. package/dist/codeSign/certInfo.js.map +1 -1
  12. package/dist/codeSign/mac/macCodeSign.d.ts +3 -3
  13. package/dist/codeSign/mac/macCodeSign.d.ts.map +1 -1
  14. package/dist/codeSign/mac/macCodeSign.js +40 -14
  15. package/dist/codeSign/mac/macCodeSign.js.map +1 -1
  16. package/dist/codeSign/win/hsmSignManager.d.ts +10 -0
  17. package/dist/codeSign/win/hsmSignManager.d.ts.map +1 -0
  18. package/dist/codeSign/win/hsmSignManager.js +50 -0
  19. package/dist/codeSign/win/hsmSignManager.js.map +1 -0
  20. package/dist/codeSign/win/pkcs11SignManager.d.ts +14 -0
  21. package/dist/codeSign/win/pkcs11SignManager.d.ts.map +1 -0
  22. package/dist/codeSign/win/pkcs11SignManager.js +82 -0
  23. package/dist/codeSign/win/pkcs11SignManager.js.map +1 -0
  24. package/dist/codeSign/{signManager.d.ts → win/signManager.d.ts} +8 -6
  25. package/dist/codeSign/win/signManager.d.ts.map +1 -0
  26. package/dist/codeSign/win/signManager.js +19 -0
  27. package/dist/codeSign/win/signManager.js.map +1 -0
  28. package/dist/codeSign/win/signtoolBaseSignManager.d.ts +71 -0
  29. package/dist/codeSign/win/signtoolBaseSignManager.d.ts.map +1 -0
  30. package/dist/codeSign/win/signtoolBaseSignManager.js +414 -0
  31. package/dist/codeSign/win/signtoolBaseSignManager.js.map +1 -0
  32. package/dist/codeSign/win/windowsCodeSign.d.ts.map +1 -1
  33. package/dist/codeSign/win/windowsCodeSign.js +9 -4
  34. package/dist/codeSign/win/windowsCodeSign.js.map +1 -1
  35. package/dist/codeSign/win/windowsSignAzureManager.d.ts +9 -3
  36. package/dist/codeSign/win/windowsSignAzureManager.d.ts.map +1 -1
  37. package/dist/codeSign/win/windowsSignAzureManager.js +130 -36
  38. package/dist/codeSign/win/windowsSignAzureManager.js.map +1 -1
  39. package/dist/codeSign/win/windowsSignToolManager.d.ts +1 -58
  40. package/dist/codeSign/win/windowsSignToolManager.d.ts.map +1 -1
  41. package/dist/codeSign/win/windowsSignToolManager.js +3 -363
  42. package/dist/codeSign/win/windowsSignToolManager.js.map +1 -1
  43. package/dist/configuration.d.ts +22 -123
  44. package/dist/configuration.d.ts.map +1 -1
  45. package/dist/configuration.js.map +1 -1
  46. package/dist/electron/ElectronFramework.d.ts +0 -2
  47. package/dist/electron/ElectronFramework.d.ts.map +1 -1
  48. package/dist/electron/ElectronFramework.js +15 -27
  49. package/dist/electron/ElectronFramework.js.map +1 -1
  50. package/dist/electron/injectFFMPEG.js +2 -2
  51. package/dist/electron/injectFFMPEG.js.map +1 -1
  52. package/dist/electron/mac/electronMac.js +10 -8
  53. package/dist/electron/mac/electronMac.js.map +1 -1
  54. package/dist/electron/win/electronWin.js +1 -2
  55. package/dist/electron/win/electronWin.js.map +1 -1
  56. package/dist/index.d.ts +8 -4
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +3 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/indexInternal.d.ts +3 -3
  61. package/dist/indexInternal.d.ts.map +1 -1
  62. package/dist/indexInternal.js +2 -2
  63. package/dist/indexInternal.js.map +1 -1
  64. package/dist/macPackager.d.ts +19 -10
  65. package/dist/macPackager.d.ts.map +1 -1
  66. package/dist/macPackager.js +149 -121
  67. package/dist/macPackager.js.map +1 -1
  68. package/dist/node-module-collector/moduleManager.d.ts +9 -2
  69. package/dist/node-module-collector/moduleManager.d.ts.map +1 -1
  70. package/dist/node-module-collector/moduleManager.js +4 -2
  71. package/dist/node-module-collector/moduleManager.js.map +1 -1
  72. package/dist/node-module-collector/nodeModulesCollector.d.ts +13 -23
  73. package/dist/node-module-collector/nodeModulesCollector.d.ts.map +1 -1
  74. package/dist/node-module-collector/nodeModulesCollector.js +52 -122
  75. package/dist/node-module-collector/nodeModulesCollector.js.map +1 -1
  76. package/dist/node-module-collector/pnpmNodeModulesCollector.d.ts +48 -1
  77. package/dist/node-module-collector/pnpmNodeModulesCollector.d.ts.map +1 -1
  78. package/dist/node-module-collector/pnpmNodeModulesCollector.js +216 -17
  79. package/dist/node-module-collector/pnpmNodeModulesCollector.js.map +1 -1
  80. package/dist/node-module-collector/types.d.ts +2 -0
  81. package/dist/node-module-collector/types.d.ts.map +1 -1
  82. package/dist/node-module-collector/types.js.map +1 -1
  83. package/dist/options/FuseOptionsV1.d.ts +137 -0
  84. package/dist/options/FuseOptionsV1.d.ts.map +1 -0
  85. package/dist/options/FuseOptionsV1.js +2 -0
  86. package/dist/options/FuseOptionsV1.js.map +1 -0
  87. package/dist/options/PlatformSpecificBuildOptions.d.ts +1 -1
  88. package/dist/options/PlatformSpecificBuildOptions.d.ts.map +1 -1
  89. package/dist/options/PlatformSpecificBuildOptions.js.map +1 -1
  90. package/dist/options/linuxOptions.d.ts +0 -10
  91. package/dist/options/linuxOptions.d.ts.map +1 -1
  92. package/dist/options/linuxOptions.js.map +1 -1
  93. package/dist/options/macOptions.d.ts +93 -126
  94. package/dist/options/macOptions.d.ts.map +1 -1
  95. package/dist/options/macOptions.js.map +1 -1
  96. package/dist/options/winOptions.d.ts +137 -63
  97. package/dist/options/winOptions.d.ts.map +1 -1
  98. package/dist/options/winOptions.js +12 -1
  99. package/dist/options/winOptions.js.map +1 -1
  100. package/dist/packager.js +1 -1
  101. package/dist/packager.js.map +1 -1
  102. package/dist/platformPackager.d.ts +5 -2
  103. package/dist/platformPackager.d.ts.map +1 -1
  104. package/dist/platformPackager.js +16 -13
  105. package/dist/platformPackager.js.map +1 -1
  106. package/dist/targets/ArchiveTarget.js +2 -2
  107. package/dist/targets/ArchiveTarget.js.map +1 -1
  108. package/dist/targets/archive.d.ts +10 -2
  109. package/dist/targets/archive.d.ts.map +1 -1
  110. package/dist/targets/archive.js +25 -6
  111. package/dist/targets/archive.js.map +1 -1
  112. package/dist/targets/linux/FlatpakTarget.d.ts.map +1 -1
  113. package/dist/targets/linux/FlatpakTarget.js +4 -1
  114. package/dist/targets/linux/FlatpakTarget.js.map +1 -1
  115. package/dist/targets/linux/FpmTarget.d.ts +6 -0
  116. package/dist/targets/linux/FpmTarget.d.ts.map +1 -1
  117. package/dist/targets/linux/FpmTarget.js +25 -3
  118. package/dist/targets/linux/FpmTarget.js.map +1 -1
  119. package/dist/targets/linux/LinuxTargetHelper.d.ts +14 -0
  120. package/dist/targets/linux/LinuxTargetHelper.d.ts.map +1 -1
  121. package/dist/targets/linux/LinuxTargetHelper.js +38 -59
  122. package/dist/targets/linux/LinuxTargetHelper.js.map +1 -1
  123. package/dist/targets/linux/appimage/AppImageTarget.d.ts +1 -0
  124. package/dist/targets/linux/appimage/AppImageTarget.d.ts.map +1 -1
  125. package/dist/targets/linux/appimage/AppImageTarget.js +8 -9
  126. package/dist/targets/linux/appimage/AppImageTarget.js.map +1 -1
  127. package/dist/targets/linux/appimage/appImageUtil.d.ts +4 -0
  128. package/dist/targets/linux/appimage/appImageUtil.d.ts.map +1 -1
  129. package/dist/targets/linux/appimage/appImageUtil.js +11 -4
  130. package/dist/targets/linux/appimage/appImageUtil.js.map +1 -1
  131. package/dist/targets/linux/appimage/appLauncher.d.ts.map +1 -1
  132. package/dist/targets/linux/appimage/appLauncher.js +5 -11
  133. package/dist/targets/linux/appimage/appLauncher.js.map +1 -1
  134. package/dist/targets/linux/launcherScript.d.ts +32 -0
  135. package/dist/targets/linux/launcherScript.d.ts.map +1 -0
  136. package/dist/targets/linux/launcherScript.js +24 -0
  137. package/dist/targets/linux/launcherScript.js.map +1 -0
  138. package/dist/targets/linux/snap/core24.d.ts +2 -0
  139. package/dist/targets/linux/snap/core24.d.ts.map +1 -1
  140. package/dist/targets/linux/snap/core24.js +48 -8
  141. package/dist/targets/linux/snap/core24.js.map +1 -1
  142. package/dist/targets/linux/snap/coreLegacy.d.ts +2 -2
  143. package/dist/targets/linux/snap/coreLegacy.d.ts.map +1 -1
  144. package/dist/targets/linux/snap/coreLegacy.js +9 -10
  145. package/dist/targets/linux/snap/coreLegacy.js.map +1 -1
  146. package/dist/targets/linux/snap/snapCommand.d.ts +13 -0
  147. package/dist/targets/linux/snap/snapCommand.d.ts.map +1 -0
  148. package/dist/targets/linux/snap/snapCommand.js +21 -0
  149. package/dist/targets/linux/snap/snapCommand.js.map +1 -0
  150. package/dist/targets/mac/MacTargetHelper.d.ts +12 -12
  151. package/dist/targets/mac/MacTargetHelper.d.ts.map +1 -1
  152. package/dist/targets/mac/MacTargetHelper.js +72 -67
  153. package/dist/targets/mac/MacTargetHelper.js.map +1 -1
  154. package/dist/targets/mac/pkg.d.ts.map +1 -1
  155. package/dist/targets/mac/pkg.js +4 -4
  156. package/dist/targets/mac/pkg.js.map +1 -1
  157. package/dist/targets/win/AppxTarget.d.ts.map +1 -1
  158. package/dist/targets/win/AppxTarget.js +9 -9
  159. package/dist/targets/win/AppxTarget.js.map +1 -1
  160. package/dist/targets/win/MsiTarget.d.ts.map +1 -1
  161. package/dist/targets/win/MsiTarget.js +8 -11
  162. package/dist/targets/win/MsiTarget.js.map +1 -1
  163. package/dist/targets/win/nsis/NsisTarget.js +5 -5
  164. package/dist/targets/win/nsis/NsisTarget.js.map +1 -1
  165. package/dist/targets/win/nsis/nsisScriptGenerator.js +2 -2
  166. package/dist/targets/win/nsis/nsisScriptGenerator.js.map +1 -1
  167. package/dist/targets/win/nsis/nsisUtil.d.ts.map +1 -1
  168. package/dist/targets/win/nsis/nsisUtil.js +2 -2
  169. package/dist/targets/win/nsis/nsisUtil.js.map +1 -1
  170. package/dist/toolsets/custom.d.ts +1 -0
  171. package/dist/toolsets/custom.d.ts.map +1 -1
  172. package/dist/toolsets/custom.js +19 -8
  173. package/dist/toolsets/custom.js.map +1 -1
  174. package/dist/toolsets/icons.d.ts.map +1 -1
  175. package/dist/toolsets/icons.js +11 -3
  176. package/dist/toolsets/icons.js.map +1 -1
  177. package/dist/toolsets/winCodeSign.d.ts +36 -0
  178. package/dist/toolsets/winCodeSign.d.ts.map +1 -1
  179. package/dist/toolsets/winCodeSign.js +84 -30
  180. package/dist/toolsets/winCodeSign.js.map +1 -1
  181. package/dist/toolsets/wine.d.ts.map +1 -1
  182. package/dist/toolsets/wine.js +20 -12
  183. package/dist/toolsets/wine.js.map +1 -1
  184. package/dist/util/appFileCopier.d.ts.map +1 -1
  185. package/dist/util/appFileCopier.js +9 -4
  186. package/dist/util/appFileCopier.js.map +1 -1
  187. package/dist/util/archCompatibility.d.ts +42 -0
  188. package/dist/util/archCompatibility.d.ts.map +1 -0
  189. package/dist/util/archCompatibility.js +202 -0
  190. package/dist/util/archCompatibility.js.map +1 -0
  191. package/dist/util/config/schemaValidator.d.ts.map +1 -1
  192. package/dist/util/config/schemaValidator.js +1 -1
  193. package/dist/util/config/schemaValidator.js.map +1 -1
  194. package/dist/util/electronGet.d.ts +8 -25
  195. package/dist/util/electronGet.d.ts.map +1 -1
  196. package/dist/util/electronGet.js +107 -87
  197. package/dist/util/electronGet.js.map +1 -1
  198. package/dist/util/flags.d.ts +0 -3
  199. package/dist/util/flags.d.ts.map +1 -1
  200. package/dist/util/flags.js +0 -9
  201. package/dist/util/flags.js.map +1 -1
  202. package/dist/util/installOrRebuild.d.ts +38 -0
  203. package/dist/util/installOrRebuild.d.ts.map +1 -0
  204. package/dist/util/{yarn.js → installOrRebuild.js} +65 -14
  205. package/dist/util/installOrRebuild.js.map +1 -0
  206. package/dist/util/langs.d.ts.map +1 -1
  207. package/dist/util/langs.js +1 -0
  208. package/dist/util/langs.js.map +1 -1
  209. package/dist/util/license.d.ts.map +1 -1
  210. package/dist/util/license.js +4 -1
  211. package/dist/util/license.js.map +1 -1
  212. package/dist/util/mac/macosIconComposer.d.ts +2 -1
  213. package/dist/util/mac/macosIconComposer.d.ts.map +1 -1
  214. package/dist/util/mac/macosIconComposer.js +40 -58
  215. package/dist/util/mac/macosIconComposer.js.map +1 -1
  216. package/dist/util/streamSpawnToFile.d.ts +47 -0
  217. package/dist/util/streamSpawnToFile.d.ts.map +1 -0
  218. package/dist/util/streamSpawnToFile.js +110 -0
  219. package/dist/util/streamSpawnToFile.js.map +1 -0
  220. package/dist/util/toolsetLock.d.ts +2 -0
  221. package/dist/util/toolsetLock.d.ts.map +1 -1
  222. package/dist/util/toolsetLock.js +31 -5
  223. package/dist/util/toolsetLock.js.map +1 -1
  224. package/dist/version.d.ts +1 -1
  225. package/dist/version.js +1 -1
  226. package/dist/version.js.map +1 -1
  227. package/dist/vm/ParallelsVm.d.ts.map +1 -1
  228. package/dist/vm/ParallelsVm.js +13 -2
  229. package/dist/vm/ParallelsVm.js.map +1 -1
  230. package/dist/vm/vm.d.ts.map +1 -1
  231. package/dist/vm/vm.js +4 -1
  232. package/dist/vm/vm.js.map +1 -1
  233. package/dist/winPackager.d.ts +1 -2
  234. package/dist/winPackager.d.ts.map +1 -1
  235. package/dist/winPackager.js +17 -22
  236. package/dist/winPackager.js.map +1 -1
  237. package/package.json +15 -14
  238. package/scheme.json +486 -439
  239. package/templates/appx/appxmanifest.xml +1 -2
  240. package/templates/nsis/assistedMessages.yml +17 -0
  241. package/templates/nsis/messages.yml +5 -0
  242. package/dist/codeSign/signManager.d.ts.map +0 -1
  243. package/dist/codeSign/signManager.js +0 -2
  244. package/dist/codeSign/signManager.js.map +0 -1
  245. package/dist/util/yarn.d.ts +0 -23
  246. package/dist/util/yarn.d.ts.map +0 -1
  247. package/dist/util/yarn.js.map +0 -1
@@ -1,28 +1,31 @@
1
- import { SignOptions } from "@electron/osx-sign/dist/cjs/types";
2
- import type { Identity } from "@electron/osx-sign/dist/cjs/util-identities";
1
+ import type { SignOptions } from "@electron/osx-sign";
3
2
  import { Arch, AsyncTaskManager } from "builder-util";
4
3
  import { MemoLazy, Nullish } from "builder-util-runtime";
5
4
  import { AppInfo } from "./appInfo.js";
6
- import { CodeSigningInfo, CreateKeychainOptions } from "./codeSign/mac/macCodeSign.js";
5
+ import { CodeSigningInfo, CreateKeychainOptions, Identity } from "./codeSign/mac/macCodeSign.js";
7
6
  import { Target } from "./core.js";
8
- import { AfterPackContext } from "./index.js";
9
- import { MacTargetHelper } from "./targets/mac/MacTargetHelper.js";
7
+ import { AfterPackContext, ElectronPlatformName } from "./index.js";
8
+ import { MacTargetHelper, PlatformType } from "./targets/mac/MacTargetHelper.js";
10
9
  import { MacConfiguration, MasConfiguration } from "./options/macOptions.js";
11
10
  import { Packager } from "./packager.js";
12
11
  import { DoPackOptions, PlatformPackager } from "./platformPackager.js";
13
12
  export type CustomMacSignOptions = SignOptions;
14
13
  export type CustomMacSign = (configuration: CustomMacSignOptions, packager: MacPackager) => Promise<void>;
14
+ interface PlatformConfig {
15
+ type: PlatformType;
16
+ config: MacConfiguration | MasConfiguration;
17
+ platformName: ElectronPlatformName;
18
+ }
15
19
  export declare class MacPackager extends PlatformPackager<MacConfiguration | MasConfiguration> {
16
20
  readonly codeSigningInfo: MemoLazy<CreateKeychainOptions | null, CodeSigningInfo>;
17
21
  private _iconPath;
18
- private _activePackConfig;
19
22
  readonly helper: MacTargetHelper;
20
23
  constructor(info: Packager);
21
24
  get defaultTarget(): Array<string>;
22
25
  /**
23
26
  * Get the merged configuration for a specific platform type
24
27
  */
25
- private getPlatformConfig;
28
+ getPlatformConfig(platformType: PlatformType): PlatformConfig;
26
29
  expandArch(pattern: string, arch?: Arch | null): string[];
27
30
  protected prepareAppInfo(appInfo: AppInfo): AppInfo;
28
31
  getIconPath(): Promise<string | null>;
@@ -32,6 +35,11 @@ export declare class MacPackager extends PlatformPackager<MacConfiguration | Mas
32
35
  * Handle universal build packing
33
36
  */
34
37
  private doUniversalPack;
38
+ /**
39
+ * Builds the `singleArchFiles` glob passed to `@electron/universal` by scanning both packed slices for
40
+ * single-architecture binaries that can't be lipo-merged. Merges any user-provided `mac.universal.singleArchFiles`.
41
+ */
42
+ private computeSingleArchFiles;
35
43
  pack(outDir: string, arch: Arch, targets: Array<Target>, taskManager: AsyncTaskManager): Promise<void>;
36
44
  private packMasTargets;
37
45
  private packMacTargets;
@@ -40,11 +48,12 @@ export declare class MacPackager extends PlatformPackager<MacConfiguration | Mas
40
48
  * Main signing method with platform awareness
41
49
  */
42
50
  private sign;
43
- protected doSign(opts: SignOptions, customSignOptions: MacConfiguration | MasConfiguration, identity: Identity | null): Promise<void>;
51
+ protected doSign(opts: SignOptions, signConfig: MacConfiguration["sign"], identity: Identity | null): Promise<void>;
44
52
  doFlat(appPath: string, outFile: string, identity: Identity, keychain: string | Nullish): Promise<any>;
45
53
  getElectronSrcDir(dist: string): string;
46
54
  getElectronDestinationDir(appOutDir: string): string;
47
- applyCommonInfo(appPlist: any, contentsPath: string): Promise<void>;
48
- protected signApp(packContext: AfterPackContext, isAsar: boolean): Promise<boolean>;
55
+ applyCommonInfo(appPlist: any, contentsPath: string, cascadedOptions: MacConfiguration | MasConfiguration): Promise<void>;
56
+ protected signApp(packContext: AfterPackContext, isAsar: boolean, platformType?: PlatformType): Promise<boolean>;
49
57
  }
58
+ export {};
50
59
  //# sourceMappingURL=macPackager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"macPackager.d.ts","sourceRoot":"","sources":["../src/macPackager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAA;AAG3E,OAAO,EACL,IAAI,EACJ,gBAAgB,EAYjB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAKxD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,eAAe,EAAkB,qBAAqB,EAAuC,MAAM,+BAA+B,CAAA;AAC3I,OAAO,EAAwB,MAAM,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAwB,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,eAAe,EAAgB,MAAM,kCAAkC,CAAA;AAChF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAiB,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAStF,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAA;AAC9C,MAAM,MAAM,aAAa,GAAG,CAAC,aAAa,EAAE,oBAAoB,EAAE,QAAQ,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AASzG,qBAAa,WAAY,SAAQ,gBAAgB,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IACpF,QAAQ,CAAC,eAAe,0DA+BvB;IAED,OAAO,CAAC,SAAS,CAAgD;IAIjE,OAAO,CAAC,iBAAiB,CAAmD;IAE5E,QAAQ,CAAC,MAAM,kBAA4B;gBAE/B,IAAI,EAAE,QAAQ;IAI1B,IAAI,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC,CAEjC;IAED;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+BzB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,EAAE;IAUzD,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAK7C,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI3C,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,KAAK,IAAI,GAAG,IAAI;cA8BhG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAc7E;;OAEG;YACW,eAAe;IA8FvB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAiB9F,cAAc;YAiCd,cAAc;YAkBd,OAAO;IAKrB;;OAEG;YACW,IAAI;cA4CF,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB9H,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAY5G,iBAAiB,CAAC,IAAI,EAAE,MAAM;IAI9B,yBAAyB,CAAC,SAAS,EAAE,MAAM;IAK5C,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM;cAyEzC,OAAO,CAAC,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAiC1F"}
1
+ {"version":3,"file":"macPackager.d.ts","sourceRoot":"","sources":["../src/macPackager.ts"],"names":[],"mappings":"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"}
@@ -14,10 +14,14 @@ import { chooseNotNull, PlatformPackager } from "./platformPackager.js";
14
14
  import { ArchiveTarget } from "./targets/ArchiveTarget.js";
15
15
  import { PkgTarget, prepareProductBuildArgs } from "./targets/mac/pkg.js";
16
16
  import { createCommonTarget, NoOpTarget } from "./targets/targetFactory.js";
17
- import { dynamicImport } from "./util/dynamicImport.js";
18
17
  import { isMacOsHighSierra } from "./util/mac/macosVersion.js";
18
+ import { buildSingleArchFilesPattern, collectIdenticalSingleArchMachOFiles, collectSingleArchPackageNames } from "./util/archCompatibility.js";
19
19
  import { expandMacro as doExpandMacro } from "./util/macroExpander.js";
20
20
  import { resolveFunction } from "./util/resolve.js";
21
+ import { makeUniversalApp } from "@electron/universal";
22
+ function isElectronSignOptions(sign) {
23
+ return typeof sign === "object" && sign !== null;
24
+ }
21
25
  export class MacPackager extends PlatformPackager {
22
26
  constructor(info) {
23
27
  super(info, Platform.MAC);
@@ -48,9 +52,6 @@ export class MacPackager extends PlatformPackager {
48
52
  return Promise.resolve({ keychainFile: process.env.CSC_KEYCHAIN || null });
49
53
  });
50
54
  this._iconPath = new Lazy(() => this.getOrConvertIcon("icns"));
51
- // Set/cleared in doPack so applyCommonInfo can read the per-pack platformSpecificBuildOptions
52
- // (the framework call chain doesn't thread it through to applyCommonInfo). Fixes #8909.
53
- this._activePackConfig = null;
54
55
  this.helper = new MacTargetHelper(this);
55
56
  }
56
57
  get defaultTarget() {
@@ -61,29 +62,25 @@ export class MacPackager extends PlatformPackager {
61
62
  */
62
63
  getPlatformConfig(platformType) {
63
64
  let config;
64
- let isDevelopment = false;
65
65
  let platformName;
66
66
  switch (platformType) {
67
67
  case "mas":
68
68
  config = deepAssign({}, this.platformSpecificBuildOptions, this.config.mas);
69
- isDevelopment = false;
70
69
  platformName = "mas";
71
70
  break;
72
71
  case "mas-dev":
73
- config = deepAssign({}, this.platformSpecificBuildOptions, this.config.mas, this.config.masDev, {
74
- type: "development",
75
- });
76
- isDevelopment = true;
72
+ // `mas-dev` cascades mac → mas → masDev. The development/distribution distinction is no longer
73
+ // carried as a config field; it is derived from `platformType` wherever signing happens.
74
+ config = deepAssign({}, this.platformSpecificBuildOptions, this.config.mas, this.config.masDev);
77
75
  platformName = "mas";
78
76
  break;
79
77
  case "mac":
80
78
  default:
81
79
  config = this.platformSpecificBuildOptions;
82
- isDevelopment = false;
83
80
  platformName = this.platform.nodeName;
84
81
  break;
85
82
  }
86
- return { type: platformType, config, isDevelopment, platformName };
83
+ return { type: platformType, config, platformName };
87
84
  }
88
85
  expandArch(pattern, arch) {
89
86
  if (arch === Arch.universal) {
@@ -130,96 +127,115 @@ export class MacPackager extends PlatformPackager {
130
127
  if (config.arch === Arch.universal) {
131
128
  return this.doUniversalPack(config);
132
129
  }
133
- // Bridge the per-pack platformSpecificBuildOptions to applyCommonInfo, which is called deep in the
134
- // framework stack (doPack → beforeCopyExtraFiles → createMacApp → applyCommonInfo) without it.
135
- this._activePackConfig = config.platformSpecificBuildOptions;
136
- try {
137
- return await super.doPack(config);
138
- }
139
- finally {
140
- this._activePackConfig = null;
141
- }
130
+ return await super.doPack(config);
142
131
  }
143
132
  /**
144
133
  * Handle universal build packing
145
134
  */
146
135
  async doUniversalPack(config) {
147
- this._activePackConfig = config.platformSpecificBuildOptions;
148
- try {
149
- const { outDir, appOutDir, platformName, arch, platformSpecificBuildOptions, targets } = config;
150
- const outDirName = (arch) => `${appOutDir}-${Arch[arch]}-temp`;
151
- const options = {
152
- ...config,
153
- options: {
154
- sign: false,
155
- disableAsarIntegrity: true,
156
- disableFuses: true,
157
- },
158
- };
159
- const x64Arch = Arch.x64;
160
- const x64AppOutDir = outDirName(x64Arch);
161
- await super.doPack({ ...options, appOutDir: x64AppOutDir, arch: x64Arch });
162
- if (this.info.cancellationToken.cancelled) {
163
- return;
164
- }
165
- const arm64Arch = Arch.arm64;
166
- const arm64AppOutPath = outDirName(arm64Arch);
167
- await super.doPack({ ...options, appOutDir: arm64AppOutPath, arch: arm64Arch });
168
- if (this.info.cancellationToken.cancelled) {
169
- return;
170
- }
171
- const framework = this.info.framework;
172
- log.info({
173
- platform: platformName,
174
- arch: Arch[arch],
175
- [`${framework.name}`]: framework.version,
176
- appOutDir: log.filePath(appOutDir),
177
- }, `packaging`);
178
- const appFile = `${this.appInfo.productFilename}.app`;
179
- // Make sure the Assets.car file is the same for both architectures
180
- const safeX64AppOutDir = sanitizeDirPath(x64AppOutDir);
181
- const safeArm64AppOutPath = sanitizeDirPath(arm64AppOutPath);
182
- const safeAppOutDir = sanitizeDirPath(appOutDir);
183
- const sourceCatalogPath = path.join(safeX64AppOutDir, appFile, "Contents/Resources/Assets.car");
184
- if (await exists(sourceCatalogPath)) {
185
- const targetCatalogPath = path.join(safeArm64AppOutPath, appFile, "Contents/Resources/Assets.car");
186
- await fs.copyFile(sourceCatalogPath, targetCatalogPath);
187
- }
188
- const { makeUniversalApp } = await dynamicImport("@electron/universal");
189
- await makeUniversalApp({
190
- x64AppPath: path.join(safeX64AppOutDir, appFile),
191
- arm64AppPath: path.join(safeArm64AppOutPath, appFile),
192
- outAppPath: path.join(safeAppOutDir, appFile),
193
- force: true,
194
- mergeASARs: platformSpecificBuildOptions.mergeASARs ?? true, // must be ?? to allow false
195
- singleArchFiles: platformSpecificBuildOptions.singleArchFiles || undefined,
196
- x64ArchFiles: platformSpecificBuildOptions.x64ArchFiles || undefined,
197
- });
198
- await fs.rm(x64AppOutDir, { recursive: true, force: true });
199
- await fs.rm(arm64AppOutPath, { recursive: true, force: true });
200
- // Give users a final opportunity to perform things on the combined universal package before signing
201
- const packContext = {
202
- appOutDir,
203
- outDir,
204
- arch,
205
- targets,
206
- packager: this,
207
- electronPlatformName: platformName,
208
- };
209
- await this.info.emitAfterPack(packContext);
210
- if (this.info.cancellationToken.cancelled) {
211
- return;
212
- }
213
- await this.doAddElectronFuses(packContext);
214
- // Mirror the base-class guard: skip signing when the caller explicitly set sign:false
215
- // (e.g. packMasTargets passes sign:false so that signMas() is the sole signing step).
216
- if (config.options?.sign ?? true) {
217
- await this.doSignAfterPack(outDir, appOutDir, platformName, arch, platformSpecificBuildOptions, targets);
218
- }
136
+ const { outDir, appOutDir, platformName, platformType, arch, platformSpecificBuildOptions, targets } = config;
137
+ const outDirName = (arch) => `${appOutDir}-${Arch[arch]}-temp`;
138
+ const options = {
139
+ ...config,
140
+ options: {
141
+ sign: false,
142
+ disableAsarIntegrity: true,
143
+ disableFuses: true,
144
+ // Keep both slices symmetric: don't drop platform-mismatched modules per-arch (that asymmetry breaks
145
+ // the universal merge). Single-arch binaries are reconciled below via `computeSingleArchFiles`.
146
+ disableArchFilter: true,
147
+ },
148
+ };
149
+ const x64Arch = Arch.x64;
150
+ const x64AppOutDir = outDirName(x64Arch);
151
+ await super.doPack({ ...options, appOutDir: x64AppOutDir, arch: x64Arch });
152
+ if (this.info.cancellationToken.cancelled) {
153
+ return;
219
154
  }
220
- finally {
221
- this._activePackConfig = null;
155
+ const arm64Arch = Arch.arm64;
156
+ const arm64AppOutPath = outDirName(arm64Arch);
157
+ await super.doPack({ ...options, appOutDir: arm64AppOutPath, arch: arm64Arch });
158
+ if (this.info.cancellationToken.cancelled) {
159
+ return;
222
160
  }
161
+ const framework = this.info.framework;
162
+ log.info({
163
+ platform: platformName,
164
+ arch: Arch[arch],
165
+ [`${framework.name}`]: framework.version,
166
+ appOutDir: log.filePath(appOutDir),
167
+ }, `packaging`);
168
+ const appFile = `${this.appInfo.productFilename}.app`;
169
+ // Make sure the Assets.car file is the same for both architectures
170
+ const safeX64AppOutDir = sanitizeDirPath(x64AppOutDir);
171
+ const safeArm64AppOutPath = sanitizeDirPath(arm64AppOutPath);
172
+ const safeAppOutDir = sanitizeDirPath(appOutDir);
173
+ const sourceCatalogPath = path.join(safeX64AppOutDir, appFile, "Contents/Resources/Assets.car");
174
+ if (await exists(sourceCatalogPath)) {
175
+ const targetCatalogPath = path.join(safeArm64AppOutPath, appFile, "Contents/Resources/Assets.car");
176
+ await fs.copyFile(sourceCatalogPath, targetCatalogPath);
177
+ }
178
+ const universalOpts = platformSpecificBuildOptions.universal;
179
+ // Single-arch binaries that can't be merged into a universal Mach-O. Two sources:
180
+ // 1. `cpu`/`os`-declared platform packages (e.g. `@esbuild/darwin-arm64`), which the collection filter
181
+ // confines to their native slice — mark the whole package so unique non-binary siblings don't trip the merge.
182
+ // 2. Host binaries identical in both slices inside packages that declare no `cpu`/`os` (e.g. esbuild's
183
+ // install script overwriting `esbuild/bin/esbuild` with the platform binary) — mark the file.
184
+ // Both are reported to `@electron/universal` via `singleArchFiles`; otherwise it aborts on the arch mismatch.
185
+ const singleArchFiles = await this.computeSingleArchFiles(path.join(safeX64AppOutDir, appFile), path.join(safeArm64AppOutPath, appFile), universalOpts?.singleArchFiles ?? undefined);
186
+ await makeUniversalApp({
187
+ mergeASARs: true, // preserve electron-builder v2 default; user can override via mac.universal.mergeASARs
188
+ ...universalOpts,
189
+ singleArchFiles,
190
+ x64AppPath: path.join(safeX64AppOutDir, appFile),
191
+ arm64AppPath: path.join(safeArm64AppOutPath, appFile),
192
+ outAppPath: path.join(safeAppOutDir, appFile),
193
+ force: true,
194
+ });
195
+ await fs.rm(x64AppOutDir, { recursive: true, force: true });
196
+ await fs.rm(arm64AppOutPath, { recursive: true, force: true });
197
+ // Give users a final opportunity to perform things on the combined universal package before signing
198
+ const packContext = {
199
+ appOutDir,
200
+ outDir,
201
+ arch,
202
+ targets,
203
+ packager: this,
204
+ electronPlatformName: platformName,
205
+ };
206
+ await this.info.emitAfterPack(packContext);
207
+ if (this.info.cancellationToken.cancelled) {
208
+ return;
209
+ }
210
+ await this.doAddElectronFuses(packContext);
211
+ // Mirror the base-class guard: skip signing when the caller explicitly set sign:false
212
+ // (e.g. packMasTargets passes sign:false so that signMas() is the sole signing step).
213
+ if (config.options?.sign ?? true) {
214
+ await this.doSignAfterPack(outDir, appOutDir, platformName, platformType, arch, platformSpecificBuildOptions, targets);
215
+ }
216
+ }
217
+ /**
218
+ * Builds the `singleArchFiles` glob passed to `@electron/universal` by scanning both packed slices for
219
+ * single-architecture binaries that can't be lipo-merged. Merges any user-provided `mac.universal.singleArchFiles`.
220
+ */
221
+ async computeSingleArchFiles(x64AppPath, arm64AppPath, userPattern) {
222
+ const unpacked = (appPath) => path.join(appPath, "Contents", "Resources", "app.asar.unpacked");
223
+ const x64Unpacked = unpacked(x64AppPath);
224
+ const arm64Unpacked = unpacked(arm64AppPath);
225
+ // (1) `cpu`/`os`-declared platform packages confined to one slice — mark the whole package.
226
+ const packageNames = new Set();
227
+ await collectSingleArchPackageNames(path.join(x64Unpacked, "node_modules"), packageNames);
228
+ await collectSingleArchPackageNames(path.join(arm64Unpacked, "node_modules"), packageNames);
229
+ // (2) undeclared host binaries identical in both slices (e.g. `esbuild/bin/esbuild`) — mark the file.
230
+ const machOFiles = await collectIdenticalSingleArchMachOFiles(x64Unpacked, arm64Unpacked);
231
+ const patterns = [...Array.from(packageNames).map(name => `**/${name}/**`), ...machOFiles];
232
+ if (patterns.length === 0) {
233
+ return userPattern;
234
+ }
235
+ log.warn({ packages: Array.from(packageNames).sort().join(", ") || "(none)", files: machOFiles.sort().join(", ") || "(none)" }, "Universal build contains single-architecture binaries; they are copied as-is per slice (not lipo-merged), so each is only usable on architectures whose platform package was installed on this build host. " +
236
+ "If these are build-only tools (e.g. esbuild), move them to `devDependencies` or exclude them via `files` to omit them entirely. " +
237
+ "If they are needed at runtime, install every target architecture's variant so the universal app works on both Intel and Apple Silicon (pnpm/yarn: `supportedArchitectures`; npm: `--cpu`/`--os`).");
238
+ return buildSingleArchFilesPattern(patterns, userPattern);
223
239
  }
224
240
  async pack(outDir, arch, targets, taskManager) {
225
241
  const masTargets = targets.filter(it => MacTargetHelper.isMasTarget(it.name));
@@ -247,22 +263,24 @@ export class MacPackager extends PlatformPackager {
247
263
  if (relativeTargetOutDir.startsWith("..") || path.isAbsolute(relativeTargetOutDir)) {
248
264
  throw new InvalidConfigurationError(`Invalid target output directory: ${targetOutDir}`);
249
265
  }
250
- if (prepackaged == null) {
266
+ let appPath = path.join(targetOutDir, `${this.appInfo.productFilename}.app`);
267
+ if (prepackaged != null) {
268
+ appPath = prepackaged;
269
+ }
270
+ else {
251
271
  await this.doPack({
252
272
  outDir: resolvedOutDir,
253
273
  appOutDir: targetOutDir,
254
274
  platformName: platformConfig.platformName,
275
+ platformType: platformConfig.type,
255
276
  arch,
256
277
  platformSpecificBuildOptions: platformConfig.config,
257
278
  targets: [target],
258
279
  options: { sign: false },
259
280
  });
260
281
  MacTargetHelper.assertSafePathForCommandUsage(this.appInfo.productFilename, "product filename");
261
- await this.signMas(path.resolve(targetOutDir, `${path.basename(this.appInfo.productFilename)}.app`), targetOutDir, platformConfig, arch);
262
- }
263
- else {
264
- await this.signMas(prepackaged, targetOutDir, platformConfig, arch);
265
282
  }
283
+ await this.signMas(appPath, targetOutDir, arch, platformType);
266
284
  }
267
285
  }
268
286
  async packMacTargets(outDir, arch, targets, prepackaged, taskManager) {
@@ -273,6 +291,7 @@ export class MacPackager extends PlatformPackager {
273
291
  outDir,
274
292
  appOutDir: path.dirname(appPath),
275
293
  platformName: platformConfig.platformName,
294
+ platformType: platformConfig.type,
276
295
  arch,
277
296
  platformSpecificBuildOptions: platformConfig.config,
278
297
  targets,
@@ -280,38 +299,46 @@ export class MacPackager extends PlatformPackager {
280
299
  }
281
300
  this.packageInDistributableFormat(appPath, arch, targets, taskManager);
282
301
  }
283
- async signMas(appPath, outDir, platformConfig, arch) {
284
- const signed = await this.sign(appPath, outDir, platformConfig.config, arch, true);
302
+ async signMas(appPath, outDir, arch, targetPlatform) {
303
+ const signed = await this.sign(appPath, outDir, arch, targetPlatform);
285
304
  return signed;
286
305
  }
287
306
  /**
288
307
  * Main signing method with platform awareness
289
308
  */
290
- async sign(appPath, outDir, options, arch, isMas = false) {
309
+ async sign(appPath, outDir, arch, targetPlatform) {
291
310
  if (!isSignAllowed()) {
292
311
  return false;
293
312
  }
294
- const config = options ?? this.platformSpecificBuildOptions;
295
- const qualifier = config.identity;
313
+ // getPlatformConfig cascades mac → mas → masDev, so `sign` (and `sign.identity`) is already merged for this flavor.
314
+ const config = this.getPlatformConfig(targetPlatform).config.sign;
315
+ // sign: null → user explicitly disabled signing
316
+ if (config === null) {
317
+ return this.helper.handleNullIdentity();
318
+ }
319
+ const signOpts = isElectronSignOptions(config) ? config : undefined;
320
+ // sign.identity: null → explicit skip; undefined → auto-discover
321
+ const qualifier = signOpts?.identity;
296
322
  if (qualifier === null) {
297
323
  return this.helper.handleNullIdentity();
298
324
  }
299
325
  const keychainFile = (await this.codeSigningInfo.value).keychainFile;
300
- const explicitType = config.type;
301
- const type = explicitType || "distribution";
302
- const isDevelopment = type === "development";
303
- const identity = await this.helper.findSigningIdentity(isMas, isDevelopment, qualifier, keychainFile, config);
326
+ // `config` is a custom fn/string module path when it's non-null and not an options object
327
+ const hasCustomSign = config != null && !signOpts;
328
+ const isMas = MacTargetHelper.isMasTarget(targetPlatform);
329
+ const isDevelopment = MacTargetHelper.isMasDevelopment(targetPlatform);
330
+ const identity = await this.helper.findSigningIdentity(targetPlatform, qualifier, keychainFile, hasCustomSign, signOpts);
304
331
  if (!identity) {
305
332
  return false;
306
333
  }
307
334
  if (!isMacOsHighSierra()) {
308
335
  throw new InvalidConfigurationError("macOS High Sierra 10.13.6 is required to sign");
309
336
  }
310
- const signOptions = await this.helper.buildSignOptions(appPath, identity, type, isMas, config, keychainFile, arch);
337
+ const signOptions = await this.helper.buildSignOptions(appPath, identity, signOpts, keychainFile, arch, targetPlatform);
311
338
  await this.doSign(signOptions, config, identity);
312
339
  // Handle MAS installer creation
313
340
  if (isMas && !isDevelopment && outDir) {
314
- await this.helper.createMasInstaller(appPath, outDir, config, keychainFile, isDevelopment, arch);
341
+ await this.helper.createMasInstaller(appPath, outDir, this.getPlatformConfig(targetPlatform).config, keychainFile, targetPlatform, arch, qualifier);
315
342
  }
316
343
  // Handle notarization for non-MAS builds
317
344
  if (!isMas) {
@@ -320,8 +347,10 @@ export class MacPackager extends PlatformPackager {
320
347
  return true;
321
348
  }
322
349
  //noinspection JSMethodCanBeStatic
323
- async doSign(opts, customSignOptions, identity) {
324
- const customSign = await resolveFunction(this.appInfo.type, customSignOptions.sign, "sign", await this.info.getWorkspaceRoot());
350
+ async doSign(opts, signConfig, identity) {
351
+ // Resolve a custom signer only when signConfig is a function or string module path.
352
+ // ElectronSignOptions objects and undefined use @electron/osx-sign directly.
353
+ const customSign = signConfig == null || isElectronSignOptions(signConfig) ? null : await resolveFunction(this.appInfo.type, signConfig, "sign", await this.info.getWorkspaceRoot());
325
354
  const { app, platform, type, provisioningProfile } = opts;
326
355
  log.info({
327
356
  file: log.filePath(app),
@@ -351,7 +380,7 @@ export class MacPackager extends PlatformPackager {
351
380
  return path.join(appOutDir, this.info.framework.distMacOsAppName);
352
381
  }
353
382
  // todo fileAssociations
354
- async applyCommonInfo(appPlist, contentsPath) {
383
+ async applyCommonInfo(appPlist, contentsPath, cascadedOptions) {
355
384
  const appInfo = this.appInfo;
356
385
  const appFilename = appInfo.productFilename;
357
386
  // https://github.com/electron-userland/electron-builder/issues/1278
@@ -392,9 +421,9 @@ export class MacPackager extends PlatformPackager {
392
421
  if (minimumSystemVersion != null) {
393
422
  appPlist.LSMinimumSystemVersion = minimumSystemVersion;
394
423
  }
395
- const activeOpts = this._activePackConfig ?? this.platformSpecificBuildOptions;
396
- appPlist.CFBundleShortVersionString = activeOpts.bundleShortVersion || appInfo.version;
397
- appPlist.CFBundleVersion = activeOpts.bundleVersion || appInfo.buildVersion;
424
+ // const activeOpts = this.getPlatformConfig(distType).config
425
+ appPlist.CFBundleShortVersionString = cascadedOptions.bundleShortVersion || appInfo.version;
426
+ appPlist.CFBundleVersion = cascadedOptions.bundleVersion || appInfo.buildVersion;
398
427
  use(this.platformSpecificBuildOptions.category || this.config.category, it => (appPlist.LSApplicationCategoryType = it));
399
428
  appPlist.NSHumanReadableCopyright = appInfo.copyright;
400
429
  if (this.platformSpecificBuildOptions.darkModeSupport) {
@@ -410,9 +439,8 @@ export class MacPackager extends PlatformPackager {
410
439
  }
411
440
  }
412
441
  }
413
- async signApp(packContext, isAsar) {
414
- const isMas = packContext.electronPlatformName === "mas";
415
- const activeConfig = this._activePackConfig ?? this.platformSpecificBuildOptions;
442
+ async signApp(packContext, isAsar, platformType) {
443
+ const targetPlatform = platformType ?? (packContext.electronPlatformName === "mas" ? "mas" : "mac");
416
444
  const readDirectoryAndSign = async (sourceDirectory, directories, shouldSign) => {
417
445
  const normalizedSourceDirectory = path.resolve(sourceDirectory);
418
446
  MacTargetHelper.assertSafePathForCommandUsage(normalizedSourceDirectory, "application output directory");
@@ -424,7 +452,7 @@ export class MacPackager extends PlatformPackager {
424
452
  }
425
453
  const signTarget = path.resolve(normalizedSourceDirectory, entryName);
426
454
  const safeSignTarget = sanitizeDirPath(signTarget, normalizedSourceDirectory);
427
- await this.sign(safeSignTarget, null, isMas ? activeConfig : null, packContext.arch, isMas);
455
+ await this.sign(safeSignTarget, null, packContext.arch, targetPlatform);
428
456
  }
429
457
  }));
430
458
  return true;