Skip to content

Commit 0be724d

Browse files
committed
fix: Build with prepackaged app doesn't do anything for mac #1284
1 parent ca7745d commit 0be724d

File tree

10 files changed

+40
-37
lines changed

10 files changed

+40
-37
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888
"source-map-support": "^0.4.11",
8989
"ts-babel": "^1.4.0",
9090
"tslint": "^4.4.2",
91-
"typescript": "^2.2.0",
91+
"typescript": "^2.2.1",
9292
"typescript-json-schema": "^0.9.0",
9393
"whitespace": "^2.1.0",
9494
"xml2js": "^0.4.17"

packages/electron-builder/src/macPackager.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,13 @@ export default class MacPackager extends PlatformPackager<MacOptions> {
7373
let nonMasPromise: Promise<any> | null = null
7474

7575
const hasMas = targets.length !== 0 && targets.some(it => it.name === "mas" || it.name === "mas-dev")
76-
const prepackaged = this.packagerOptions.prepackaged
76+
const prepackaged = this.info.prepackaged
7777

78-
if (prepackaged == null && (!hasMas || targets.length > 1)) {
79-
const appOutDir = this.computeAppOutDir(outDir, arch)
80-
nonMasPromise = this.doPack(outDir, appOutDir, this.platform.nodeName, arch, this.platformSpecificBuildOptions)
81-
.then(() => this.sign(appOutDir, null))
82-
.then(() => this.packageInDistributableFormat(appOutDir, Arch.x64, targets, postAsyncTasks))
78+
if (!hasMas || targets.length > 1) {
79+
const appPath = prepackaged == null ? path.join(this.computeAppOutDir(outDir, arch), `${this.appInfo.productFilename}.app`) : prepackaged
80+
nonMasPromise = (prepackaged ? BluebirdPromise.resolve() : this.doPack(outDir, path.dirname(appPath), this.platform.nodeName, arch, this.platformSpecificBuildOptions))
81+
.then(() => this.sign(appPath, null))
82+
.then(() => this.packageInDistributableFormat(appPath, Arch.x64, targets, postAsyncTasks))
8383
}
8484

8585
for (const target of targets) {
@@ -98,15 +98,15 @@ export default class MacPackager extends PlatformPackager<MacOptions> {
9898
if (prepackaged == null) {
9999
await this.doPack(outDir, appOutDir, "mas", arch, masBuildOptions)
100100
}
101-
await this.sign(appOutDir, masBuildOptions)
101+
await this.sign(path.join(appOutDir, `${this.appInfo.productFilename}.app`), masBuildOptions)
102102
}
103103

104104
if (nonMasPromise != null) {
105105
await nonMasPromise
106106
}
107107
}
108108

109-
private async sign(appOutDir: string, masOptions: MasBuildOptions | null): Promise<void> {
109+
private async sign(appPath: string, masOptions: MasBuildOptions | null): Promise<void> {
110110
if (process.platform !== "darwin") {
111111
warn("macOS application code signing is supported only on macOS, skipping.")
112112
return
@@ -155,7 +155,6 @@ export default class MacPackager extends PlatformPackager<MacOptions> {
155155
}
156156
}
157157

158-
const appPath = path.join(appOutDir, `${this.appInfo.productFilename}.app`)
159158
const signOptions: any = {
160159
skipIdentityValidation: true,
161160
identity: name!,
@@ -199,7 +198,7 @@ export default class MacPackager extends PlatformPackager<MacOptions> {
199198
await task(`Signing app (identity: ${name})`, this.doSign(signOptions))
200199

201200
if (masOptions != null) {
202-
const pkg = path.join(appOutDir, `${this.appInfo.productFilename}-${this.appInfo.version}.pkg`)
201+
const pkg = path.join(path.dirname(appPath), `${this.appInfo.productFilename}-${this.appInfo.version}.pkg`)
203202
const certType = "3rd Party Mac Developer Installer"
204203
const masInstallerIdentity = await findIdentity(certType, masOptions.identity, keychainName)
205204
if (masInstallerIdentity == null) {

packages/electron-builder/src/packager.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,13 @@ export class Packager implements BuildInfo {
6868
return this._repositoryInfo
6969
}
7070

71+
readonly prepackaged?: string | null
72+
7173
//noinspection JSUnusedGlobalSymbols
7274
constructor(readonly options: PackagerOptions, private readonly cancellationToken: CancellationToken) {
7375
this.projectDir = options.projectDir == null ? process.cwd() : path.resolve(options.projectDir)
76+
77+
this.prepackaged = options.prepackaged == null ? null : path.resolve(this.projectDir, options.prepackaged)
7478
}
7579

7680
addAfterPackHandler(handler: (context: AfterPackContext) => Promise<any> | null) {
@@ -204,7 +208,7 @@ export class Packager implements BuildInfo {
204208
const platformToTarget: Map<Platform, Map<String, Target>> = new Map()
205209

206210
// custom packager - don't check wine
207-
let checkWine = this.options.prepackaged == null && this.options.platformPackagerFactory == null
211+
let checkWine = this.prepackaged == null && this.options.platformPackagerFactory == null
208212
for (const [platform, archToType] of this.options.targets!) {
209213
if (this.cancellationToken.cancelled) {
210214
break
@@ -353,7 +357,7 @@ export class Packager implements BuildInfo {
353357
}
354358

355359
private async installAppDependencies(platform: Platform, arch: Arch): Promise<any> {
356-
if (this.options.prepackaged != null) {
360+
if (this.prepackaged != null) {
357361
return
358362
}
359363

packages/electron-builder/src/packagerApi.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { Platform, Arch, Target } from "electron-builder-core"
2-
import { PlatformPackager } from "./platformPackager"
3-
import { Metadata, Config, AfterPackContext } from "./metadata"
1+
import { Arch, Platform, Target } from "electron-builder-core"
42
import { PublishConfiguration } from "electron-builder-http/out/publishOptions"
53
import { TmpDir } from "electron-builder-util/out/tmp"
64
import { AppInfo } from "./appInfo"
5+
import { AfterPackContext, Config, Metadata } from "./metadata"
6+
import { PlatformPackager } from "./platformPackager"
77

88
export interface PackagerOptions {
99
targets?: Map<Platform, Map<Arch, string[]>>
@@ -61,6 +61,8 @@ export interface BuildInfo {
6161

6262
readonly isPrepackedAppAsar: boolean
6363

64+
readonly prepackaged?: string | null
65+
6466
dispatchArtifactCreated(event: ArtifactCreated): void
6567

6668
afterPack(context: AfterPackContext): Promise<void>

packages/electron-builder/src/platformPackager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export abstract class PlatformPackager<DC extends PlatformSpecificBuildOptions>
8181
}
8282

8383
protected computeAppOutDir(outDir: string, arch: Arch): string {
84-
return this.packagerOptions.prepackaged || path.join(outDir, `${this.platform.buildConfigurationKey}${getArchSuffix(arch)}${this.platform === Platform.MAC ? "" : "-unpacked"}`)
84+
return this.info.prepackaged || path.join(outDir, `${this.platform.buildConfigurationKey}${getArchSuffix(arch)}${this.platform === Platform.MAC ? "" : "-unpacked"}`)
8585
}
8686

8787
dispatchArtifactCreated(file: string, target: Target | null, safeArtifactName?: string) {
@@ -110,7 +110,7 @@ export abstract class PlatformPackager<DC extends PlatformSpecificBuildOptions>
110110
}
111111

112112
protected async doPack(outDir: string, appOutDir: string, platformName: string, arch: Arch, platformSpecificBuildOptions: DC) {
113-
if (this.info.options.prepackaged != null) {
113+
if (this.info.prepackaged != null) {
114114
return
115115
}
116116

packages/electron-builder/src/targets/ArchiveTarget.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { Target, Arch, Platform } from "electron-builder-core"
2-
import { PlatformPackager } from "../platformPackager"
1+
import { Arch, Platform, Target } from "electron-builder-core"
32
import { log } from "electron-builder-util/out/log"
43
import * as path from "path"
5-
import { tar, archive } from "./archive"
4+
import { PlatformPackager } from "../platformPackager"
5+
import { archive, tar } from "./archive"
66

77
export class ArchiveTarget extends Target {
88
constructor(name: string, readonly outDir: string, private readonly packager: PlatformPackager<any>) {
@@ -21,7 +21,7 @@ export class ArchiveTarget extends Target {
2121
const outFile = (() => {
2222
switch (packager.platform) {
2323
case Platform.MAC:
24-
return path.join(appOutDir, packager.generateName2(format, "mac", false))
24+
return path.join(path.dirname(appOutDir), packager.generateName2(format, "mac", false))
2525
case Platform.WINDOWS:
2626
return path.join(outDir, packager.generateName(format, arch, false, "win"))
2727
case Platform.LINUX:
@@ -31,12 +31,11 @@ export class ArchiveTarget extends Target {
3131
}
3232
})()
3333

34-
const dirToArchive = isMac ? path.join(appOutDir, `${packager.appInfo.productFilename}.app`) : appOutDir
3534
if (format.startsWith("tar.")) {
36-
await tar(packager.config.compression, format, outFile, dirToArchive, isMac)
35+
await tar(packager.config.compression, format, outFile, appOutDir, isMac)
3736
}
3837
else {
39-
await archive(packager.config.compression, format, outFile, dirToArchive)
38+
await archive(packager.config.compression, format, outFile, appOutDir)
4039
}
4140

4241
packager.dispatchArtifactCreated(outFile, this, isMac ? packager.generateName2(format, "mac", true) : packager.generateName(format, arch, true, packager.platform === Platform.WINDOWS ? "win" : null))

packages/electron-builder/src/targets/dmg.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export class DmgTarget extends Target {
1818
super("dmg")
1919
}
2020

21-
async build(appOutDir: string, arch: Arch) {
21+
async build(appPath: string, arch: Arch) {
2222
const packager = this.packager
2323
const appInfo = packager.appInfo
2424
log("Building DMG")
@@ -48,7 +48,7 @@ export class DmgTarget extends Target {
4848
//noinspection SpellCheckingInspection
4949
await spawn("hdiutil", addVerboseIfNeed(["create",
5050
"-srcfolder", backgroundDir,
51-
"-srcfolder", path.join(appOutDir, `${packager.appInfo.productFilename}.app`),
51+
"-srcfolder", appPath,
5252
"-volname", volumeName,
5353
"-anyowners", "-nospotlight", "-fs", "HFS+", "-fsargs", "-c c=64,a=16,e=16",
5454
"-format", "UDRW",
@@ -160,7 +160,7 @@ export class DmgTarget extends Target {
160160
}
161161
})
162162

163-
const artifactPath = path.join(appOutDir, packager.expandArtifactNamePattern(packager.config.dmg, "dmg"))
163+
const artifactPath = path.join(path.dirname(appPath), packager.expandArtifactNamePattern(packager.config.dmg, "dmg"))
164164
//noinspection SpellCheckingInspection
165165
await spawn("hdiutil", addVerboseIfNeed(["convert", tempDmg, "-format", packager.config.compression === "store" ? "UDRO" : "UDBZ", "-imagekey", "zlib-level=9", "-o", artifactPath]))
166166
await exec("hdiutil", addVerboseIfNeed(["internet-enable", "-no"]).concat(artifactPath))

packages/electron-builder/src/targets/fpm.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export default class FpmTarget extends Target {
7171

7272
const destination = path.join(this.outDir, this.packager.generateName(target, arch, true /* on Linux we use safe name — without space */))
7373
await unlinkIfExists(destination)
74-
if (this.packager.info.options.prepackaged != null) {
74+
if (this.packager.info.prepackaged != null) {
7575
await ensureDir(this.outDir)
7676
}
7777

packages/electron-builder/src/targets/pkg.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export class PkgTarget extends Target {
1818
super("pkg")
1919
}
2020

21-
async build(appOutDir: string, arch: Arch): Promise<any> {
21+
async build(appPath: string, arch: Arch): Promise<any> {
2222
const packager = this.packager
2323
const options = this.options
2424
const appInfo = packager.appInfo
@@ -30,8 +30,7 @@ export class PkgTarget extends Target {
3030
throw new Error(`Cannot find valid "${certType}" to sign standalone installer, please see https://github.com/electron-userland/electron-builder/wiki/Code-Signing`)
3131
}
3232

33-
const appPath = path.join(appOutDir, `${appInfo.productFilename}.app`)
34-
33+
const appOutDir = path.dirname(appPath)
3534
const distInfo = path.join(appOutDir, "distribution.xml")
3635
await exec("productbuild", ["--synthesize", "--component", appPath, this.installLocation, distInfo], {
3736
cwd: appOutDir,

yarn.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1494,8 +1494,8 @@ ini@^1.3.4, ini@~1.3.0:
14941494
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
14951495

14961496
inquirer@^3.0.1:
1497-
version "3.0.1"
1498-
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.1.tgz#6dfbffaf4d697dd76c8fe349f919de01c28afc4d"
1497+
version "3.0.2"
1498+
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.2.tgz#13caca98cc488e99c8de759a3404a6d0fe224ba6"
14991499
dependencies:
15001500
ansi-escapes "^1.1.0"
15011501
chalk "^1.0.0"
@@ -3229,9 +3229,9 @@ typescript-json-schema@^0.9.0:
32293229
typescript "~2.1.5"
32303230
yargs "^6.6.0"
32313231

3232-
typescript@^2.2.0:
3233-
version "2.2.0"
3234-
resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.2.0.tgz#626f2fc70087d2480f21ebb12c1888288c8614e3"
3232+
typescript@^2.2.1:
3233+
version "2.2.1"
3234+
resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.2.1.tgz#4862b662b988a4c8ff691cc7969622d24db76ae9"
32353235

32363236
typescript@~2.1.5:
32373237
version "2.1.6"

0 commit comments

Comments
 (0)