From 5c49372e11eeb396fbc5a8b80234c463c89d40b5 Mon Sep 17 00:00:00 2001 From: Christoph Settgast Date: Thu, 11 Mar 2021 21:28:31 +0100 Subject: [PATCH] Enhancements to make it more Mac App Store (mas) compatible - disable the autoupdater if running as mas (was not working anyway, just logging an error on every start) - replace check via app.requestSingleInstanceLock() with LSMultipleInstancesProhibited in Info.plist due to https://github.com/electron/electron/issues/15958 - Quit the app also when all windows are closed to conform to macOS Human Interface Guidelines Comments from review: If the application is a single-window app, it might be appropriate to save data and quit the app when the main window is closed. - "asarUnpack": "**/*.node" to also sign the native addons when packaging - add the required mas-specific entitlements which include the app-sandbox key Signed-off-by: Christoph Settgast --- main.js | 12 ++++++------ package.json | 9 ++++++++- resources/entitlements.mas.inherit.plist | 10 ++++++++++ resources/entitlements.mas.plist | 16 ++++++++++++++++ 4 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 resources/entitlements.mas.inherit.plist create mode 100644 resources/entitlements.mas.plist diff --git a/main.js b/main.js index 9487327..2c6dc3e 100644 --- a/main.js +++ b/main.js @@ -162,7 +162,9 @@ function createJitsiMeetWindow() { setApplicationMenu(); // Check for Updates. - autoUpdater.checkForUpdatesAndNotify(); + if (!process.mas) { + autoUpdater.checkForUpdatesAndNotify(); + } // Load the previous window state with fallback to defaults. const windowState = windowStateKeeper({ @@ -290,8 +292,9 @@ function handleProtocolCall(fullProtocolCall) { /** * Force Single Instance Application. + * Handle this on darwin via LSMultipleInstancesProhibited in Info.plist as below does not work on MAS */ -const gotInstanceLock = app.requestSingleInstanceLock(); +const gotInstanceLock = process.platform === 'darwin' ? true : app.requestSingleInstanceLock(); if (!gotInstanceLock) { app.quit(); @@ -345,10 +348,7 @@ app.on('second-instance', (event, commandLine) => { }); app.on('window-all-closed', () => { - // Don't quit the application on macOS. - if (process.platform !== 'darwin') { - app.quit(); - } + app.quit(); }); // remove so we can register each time as we run the app. diff --git a/package.json b/package.json index c56f92e..c896c82 100644 --- a/package.json +++ b/package.json @@ -39,11 +39,18 @@ "hardenedRuntime": true, "entitlements": "entitlements.mac.plist", "entitlementsInherit": "entitlements.mac.plist", + "asarUnpack": "**/*.node", "extendInfo": { "NSCameraUsageDescription": "Jitsi Meet requires access to your camera in order to make video-calls.", - "NSMicrophoneUsageDescription": "Jitsi Meet requires access to your microphone in order to make calls (audio/video)." + "NSMicrophoneUsageDescription": "Jitsi Meet requires access to your microphone in order to make calls (audio/video).", + "LSMultipleInstancesProhibited": true } }, + "mas": { + "entitlements": "resources/entitlements.mas.plist", + "entitlementsInherit": "resources/entitlements.mas.inherit.plist", + "hardenedRuntime": false + }, "linux": { "artifactName": "jitsi-meet-${arch}.${ext}", "category": "VideoConference;AudioVideo;Audio;Video;Network", diff --git a/resources/entitlements.mas.inherit.plist b/resources/entitlements.mas.inherit.plist new file mode 100644 index 0000000..656b548 --- /dev/null +++ b/resources/entitlements.mas.inherit.plist @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.inherit + + + diff --git a/resources/entitlements.mas.plist b/resources/entitlements.mas.plist new file mode 100644 index 0000000..2cb754e --- /dev/null +++ b/resources/entitlements.mas.plist @@ -0,0 +1,16 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.network.client + + com.apple.security.device.camera + + com.apple.security.device.audio-input + + com.apple.security.device.microphone + + +