Skip to content

Commit 2c9ccb7

Browse files
committed
Create universal macOS app
1 parent 2b4552d commit 2c9ccb7

5 files changed

Lines changed: 145 additions & 35 deletions

File tree

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"author": "Jhen <developer@jhen.me>",
2828
"license": "MIT",
2929
"devDependencies": {
30+
"@electron/universal": "^1.0.5",
3031
"apollo-boost": "^0.1.27",
3132
"babel-core": "^6.26.0",
3233
"babel-eslint": "^8.2.2",
@@ -48,6 +49,8 @@
4849
"electron-devtools-installer": "^3.2.0",
4950
"electron-installer-dmg": "^3.0.0",
5051
"electron-installer-windows": "^3.0.0",
52+
"electron-notarize": "^1.0.0",
53+
"electron-osx-sign": "^0.5.0",
5154
"electron-packager": "^15.2.0",
5255
"electron-rebuild": "^1.10.0",
5356
"eslint": "^4.18.2",

scripts/mac/createDMG.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@ const path = require('path');
22
const createDMG = require('electron-installer-dmg');
33
const pkg = require('../../package.json');
44

5-
const appPath = path.join(
6-
__dirname,
7-
'../../release/React Native Debugger-darwin-x64/React Native Debugger.app'
8-
);
5+
const appPath = path.join(__dirname, '../../release/React Native Debugger.app');
96

107
createDMG(
118
{
@@ -30,9 +27,12 @@ createDMG(
3027
path: '/Applications',
3128
},
3229
],
33-
dmgPath: path.join(__dirname, `../../release/react-native-debugger_${pkg.version}.dmg`),
30+
dmgPath: path.join(
31+
__dirname,
32+
`../../release/react-native-debugger_${pkg.version}_universal.dmg`,
33+
),
3434
},
35-
err => {
35+
(err) => {
3636
if (err) console.log(err);
37-
}
37+
},
3838
);

scripts/mac/createUniversalApp.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
const path = require('path');
2+
const { version: electronVersion } = require('electron/package.json');
3+
const { makeUniversalApp } = require('@electron/universal');
4+
const { signAsync } = require('electron-osx-sign');
5+
const { notarize } = require('electron-notarize');
6+
7+
const developerId = `${process.env.APPLE_DEVELOPER_NAME} (${process.env.APPLE_TEAM_ID})`;
8+
9+
async function run() {
10+
const appPath = path.join(
11+
__dirname,
12+
'../../release/React Native Debugger.app',
13+
);
14+
const x64AppPath = path.join(
15+
__dirname,
16+
'../../release/React Native Debugger-darwin-x64/React Native Debugger.app',
17+
);
18+
const arm64AppPath = path.join(
19+
__dirname,
20+
'../../release/React Native Debugger-darwin-arm64/React Native Debugger.app',
21+
);
22+
await makeUniversalApp({
23+
force: true,
24+
x64AppPath,
25+
arm64AppPath,
26+
outAppPath: appPath,
27+
});
28+
const pathes = [appPath, x64AppPath, arm64AppPath];
29+
for (const p of pathes) {
30+
try {
31+
await signAsync({
32+
identity: `Developer ID Application: ${developerId}`,
33+
entitlements: 'scripts/mac/entitlements.plist',
34+
'entitlements-inherit': 'scripts/mac/entitlements.plist',
35+
hardenedRuntime: true,
36+
platform: 'darwin',
37+
app: p,
38+
version: electronVersion,
39+
});
40+
} catch (e) {
41+
console.log(e);
42+
}
43+
await notarize({
44+
appleId: process.env.APPLE_ID,
45+
appleIdPassword: '@keychain:AC_PASSWORD',
46+
ascProvider: process.env.APPLE_TEAM_ID,
47+
appBundleId: 'com.electron.react-native-debugger',
48+
appPath: p,
49+
});
50+
}
51+
}
52+
53+
run();

scripts/package-macos.sh

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,35 +19,39 @@ if [ -z "$APPLE_TEAM_ID" ]; then
1919
read APPLE_TEAM_ID
2020
fi
2121

22-
electron-packager dist/ \
23-
--overwrite \
24-
--platform darwin \
25-
--arch x64 \
26-
--asar \
27-
--extra-resource=dist/devtools-helper \
28-
--extra-resource=dist/node_modules/apollo-client-devtools/shells/webextension \
29-
--no-prune \
30-
--out release \
31-
--protocol-name "React Native Debugger" \
32-
--protocol "rndebugger" \
33-
--electron-version $(node -e "console.log(require('electron/package').version)") \
34-
--app-version $PACKAGE_VERSION \
35-
--osx-sign.identity="Developer ID Application: ${APPLE_DEVELOPER_NAME} (${APPLE_TEAM_ID})" \
36-
--osx-sign.entitlements=scripts/mac/entitlements.plist \
37-
--osx-sign.entitlements-inherit=scripts/mac/entitlements.plist \
38-
--osx-sign.hardenedRuntime \
39-
--osx-notarize.appleId=$APPLE_ID \
40-
--osx-notarize.appleIdPassword='@keychain:AC_PASSWORD' \
41-
--osx-notarize.ascProvider="${APPLE_TEAM_ID}" \
42-
--icon electron/logo.icns \
43-
--darwin-dark-mode-support
44-
22+
function build_with_arch() {
23+
electron-packager dist/ \
24+
--overwrite \
25+
--platform darwin \
26+
--arch $1 \
27+
--asar \
28+
--extra-resource=dist/devtools-helper \
29+
--extra-resource=dist/node_modules/apollo-client-devtools/shells/webextension \
30+
--no-prune \
31+
--out release \
32+
--protocol-name "React Native Debugger" \
33+
--protocol "rndebugger" \
34+
--electron-version $(node -e "console.log(require('electron/package').version)") \
35+
--app-version $PACKAGE_VERSION \
36+
--icon electron/logo.icns \
37+
--darwin-dark-mode-support
38+
}
39+
40+
build_with_arch x64
41+
build_with_arch arm64
42+
43+
node scripts/mac/createUniversalApp.js
4544
node scripts/mac/createDMG.js
4645

47-
cd release/React\ Native\ Debugger-darwin-x64
46+
cd release
47+
zip -ryq9 rn-debugger-macos-universal.zip React\ Native\ Debugger.app
48+
cd React\ Native\ Debugger-darwin-arm64
49+
zip -ryq9 ../rn-debugger-macos-arm64.zip React\ Native\ Debugger.app
50+
cd ../React\ Native\ Debugger-darwin-x64
4851
zip -ryq9 ../rn-debugger-macos-x64.zip React\ Native\ Debugger.app
52+
cd ..
4953

5054
# Print codesign information
5155
codesign -dv --verbose=4 React\ Native\ Debugger.app
5256

53-
echo sha256: `shasum -a 256 ../rn-debugger-macos-x64.zip`
57+
echo sha256: `shasum -a 256 rn-debugger-macos-universal.zip`

yarn.lock

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,18 @@
162162
global-agent "^2.0.2"
163163
global-tunnel-ng "^2.7.1"
164164

165-
"@malept/cross-spawn-promise@^1.0.0":
165+
"@electron/universal@^1.0.5":
166+
version "1.0.5"
167+
resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.0.5.tgz#b812340e4ef21da2b3ee77b2b4d35c9b86defe37"
168+
integrity sha512-zX9O6+jr2NMyAdSkwEUlyltiI4/EBLu2Ls/VD3pUQdi3cAYeYfdQnT2AJJ38HE4QxLccbU13LSpccw1IWlkyag==
169+
dependencies:
170+
"@malept/cross-spawn-promise" "^1.1.0"
171+
asar "^3.0.3"
172+
debug "^4.3.1"
173+
dir-compare "^2.4.0"
174+
fs-extra "^9.0.1"
175+
176+
"@malept/cross-spawn-promise@^1.0.0", "@malept/cross-spawn-promise@^1.1.0":
166177
version "1.1.1"
167178
resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d"
168179
integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==
@@ -1060,7 +1071,7 @@ asar@^2.0.1:
10601071
mkdirp "^0.5.1"
10611072
tmp-promise "^1.0.5"
10621073

1063-
asar@^3.0.0:
1074+
asar@^3.0.0, asar@^3.0.3:
10641075
version "3.0.3"
10651076
resolved "https://registry.yarnpkg.com/asar/-/asar-3.0.3.tgz#1fef03c2d6d2de0cbad138788e4f7ae03b129c7b"
10661077
integrity sha512-k7zd+KoR+n8pl71PvgElcoKHrVNiSXtw7odKbyNpmgKe7EGRF9Pnu3uLOukD37EvavKwVFxOUpqXTIZC5B5Pmw==
@@ -2183,6 +2194,11 @@ buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3:
21832194
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
21842195
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
21852196

2197+
buffer-equal@1.0.0:
2198+
version "1.0.0"
2199+
resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe"
2200+
integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74=
2201+
21862202
buffer-fill@^1.0.0:
21872203
version "1.0.0"
21882204
resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
@@ -2685,6 +2701,11 @@ color-space@^1.14.3:
26852701
hsluv "^0.0.3"
26862702
mumath "^3.3.4"
26872703

2704+
colors@1.0.3:
2705+
version "1.0.3"
2706+
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
2707+
integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=
2708+
26882709
colors@^1.3.3:
26892710
version "1.4.0"
26902711
resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
@@ -2697,6 +2718,13 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
26972718
dependencies:
26982719
delayed-stream "~1.0.0"
26992720

2721+
commander@2.9.0:
2722+
version "2.9.0"
2723+
resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
2724+
integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=
2725+
dependencies:
2726+
graceful-readlink ">= 1.0.0"
2727+
27002728
commander@^2.18.0, commander@^2.20.0:
27012729
version "2.20.3"
27022730
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
@@ -3222,6 +3250,13 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
32223250
dependencies:
32233251
ms "^2.1.1"
32243252

3253+
debug@^4.3.1:
3254+
version "4.3.2"
3255+
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
3256+
integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
3257+
dependencies:
3258+
ms "2.1.2"
3259+
32253260
decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0:
32263261
version "1.2.0"
32273262
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
@@ -3468,6 +3503,16 @@ diffie-hellman@^5.0.0:
34683503
miller-rabin "^4.0.0"
34693504
randombytes "^2.0.0"
34703505

3506+
dir-compare@^2.4.0:
3507+
version "2.4.0"
3508+
resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-2.4.0.tgz#785c41dc5f645b34343a4eafc50b79bac7f11631"
3509+
integrity sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==
3510+
dependencies:
3511+
buffer-equal "1.0.0"
3512+
colors "1.0.3"
3513+
commander "2.9.0"
3514+
minimatch "3.0.4"
3515+
34713516
discontinuous-range@1.0.0:
34723517
version "1.0.0"
34733518
resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a"
@@ -5307,6 +5352,11 @@ graceful-fs@^4.2.0:
53075352
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
53085353
integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==
53095354

5355+
"graceful-readlink@>= 1.0.0":
5356+
version "1.0.1"
5357+
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
5358+
integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
5359+
53105360
grapheme-splitter@^1.0.2:
53115361
version "1.0.4"
53125362
resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
@@ -7799,7 +7849,7 @@ minimatch@3.0.3:
77997849
dependencies:
78007850
brace-expansion "^1.0.0"
78017851

7802-
minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
7852+
minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
78037853
version "3.0.4"
78047854
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
78057855
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==

0 commit comments

Comments
 (0)