0

We have an electron app that we're setting up to launch from protocol links following the structure described here: https://github.com/oikonomopo/electron-deep-linking-mac-win (found from Open app and pass parameters with deep linking using Electron (macOS))

Once the app is installed, we either open the app from finder/launchpad or can invoke the app from a browser using myapp://someparams.

If I invoke myapp://someparams when the app is closed, the app opens and the main process fires the open-url event for mac as expected and I can grab the parameters from the url. If the app was initially opened via this method, re-invoking the myapp://someparams continues to focus the app and fire open-url as expected.

However, if the app was initially opened from the finder, launchpad, or command line, invoking myapp://someparams causes the second-instance event to fire instead and I haven't been able to find a way to get the url that was used to invoke the app. Windows works as expected since the second parameter to the second-instance event contains the protocol as a parameter but that isn't the case with mac.

So the question is - is there a way to grab the protocol/url from the second-instance event on mac? Or is there another way around this?

I did see this snippet from the docs: https://electronjs.org/docs/api/app#apprequestsingleinstancelock

On macOS, the system enforces single instance automatically when users try to open a second instance of your app in Finder, and the open-file and open-url events will be emitted for that. However when users start your app in command line, the system's single instance mechanism will be bypassed, and you have to use this method to ensure single instance.
RGB
  • 103
  • 2
  • 9

1 Answers1

-1
  • You should set LSMultipleInstancesProhibited to true in info.plist.
  • If you are using electron builder, you can set 'LSMultipleInstancesProhibited: true' at mac.extendInfo For example
mac: {
  ...
  extendInfo: {
    LSMultipleInstancesProhibited: true,
  }
}
phanmn
  • 39
  • 3