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 <csett86@web.de>
This commit is contained in:
Christoph Settgast 2021-03-11 21:28:31 +01:00 committed by Saúl Ibarra Corretgé
parent 9b09a4bfa9
commit 5c49372e11
4 changed files with 40 additions and 7 deletions

12
main.js
View File

@ -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.

View File

@ -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",

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.inherit</key>
<true/>
</dict>
</plist>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.device.camera</key>
<true/>
<key>com.apple.security.device.audio-input</key>
<true/>
<key>com.apple.security.device.microphone</key>
<true/>
</dict>
</plist>