How to properly register a macOS System Extension in an Electron app?

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?
Answered by DTS Engineer in 871138022

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:

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

I don't know if there's anything Electron-specific, but if your app has com.apple.developer.system-extension.install, you need a NSSystemExtensionUsageDescriptionKey or OSBundleUsageDescriptionKey (for DriverKit extensions).

Your failure to launch may not be what you think it is. Your program may have some code which unconditionally registers your extension at launch time, and your lack of the required usage description causes the system to terminate your app very early in its life cycle. You may be able to see what is going on my monitoring the console log (filter on your app's bundle ID)

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:

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

How to properly register a macOS System Extension in an Electron app?
 
 
Q