Hi everyone,
I’m developing an Electron application on macOS and I’m trying to register and activate a macOS System Extension, but I’m running into startup and entitlement issues.
🔧 What I’m trying to build
• An Electron app packaged with electron-builder
• Signed with Developer ID Application
• Notarized using @electron/notarize
• A macOS System Extension is already built and signed
• The System Extension provides a virtual camera
• I wrote a Swift helper that:
• Registers / activates the virtual camera
• Calls OSSystemExtensionManager
• This Swift code is compiled into a .node native addon
• The .node module is loaded and called from Electron (Node.js) to trigger system extension registration
❗ The problem
When I add the following entitlement: <key>com.apple.developer.system-extension.install</key> <true/>
the application fails to launch at all on macOS.
Without this entitlement:
• The app launches normally
• But system extension activation fails with:
Error Domain=OSSystemExtensionErrorDomain Code=2 Missing entitlement com.apple.developer.system-extension.install
With this entitlement:
• The app does not launch
• No UI is shown
• macOS blocks execution silently
🤔 My questions
1. Is it valid for an Electron app’s main executable to have com.apple.developer.system-extension.install?
2. Does Apple require a separate helper / launcher app to install system extensions instead of the Electron main app?
3. Are there any Electron-specific limitations when working with macOS System Extensions?
4. Is there a known working example of Electron + macOS System Extension?
5. Do I need a specific provisioning profile or App ID capability beyond Developer ID + notarization?
What ssmith_c said plus…
com.apple.developer.system-extension.install is a restricted entitlement, that is, one that must be authorised by a provisioning profile. If you were using Xcode, it would take care of this for you. Given that you’re not, you have to do this by hand.
There are a bunch of resources to help you with this:
- Creating distribution-signed code for macOS has general info about that.
- TN3125 Inside Code Signing: Provisioning Profiles has background on how provisioning profiles work.
- Resolving Trusted Execution Problems has a ‘child’ post that explains how to debug issues like this.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"