After learning that Endpoint Security (ES) clients must be packaged in an “app-like” structure to use a provisioning profile, I followed Apple’s technical note and Quinn’s advice:
Steps Taken
App Bundle Creation
Created a bundle named FidelisEvents.app, with standard macOS .app layout.
Placed my universal Mach-O (x86_64/arm64) binary at FidelisEvents.app/Contents/MacOS/fidelisevents.
Added an Info.plist at FidelisEvents.app/Contents/Info.plist with the correct CFBundleIdentifier and metadata (matching the provisioning profile/App ID).
Provisioning Profile
Embedded the provisioning profile at FidelisEvents.app/Contents/embedded.provisionprofile.
Profile type: Developer ID Application for macOS.
App ID and team identifier match the bundle and entitlements.
Profile entitlements explicitly include:
com.apple.application-identifier
com.apple.developer.team-identifier
com.apple.developer.endpoint-security.client
Confirmed by extracting and inspecting the embedded profile.
Entitlements
Used an entitlements plist at codesign time, containing:
com.apple.application-identifier
com.apple.developer.endpoint-security.client (set to true)
com.apple.developer.team-identifier
(Also set sandbox and get-task-allow to false, per guidance)
Entitlements and Info.plist values exactly match the provisioning profile.
Signing and Notarization
Signed the entire .app bundle with our Developer ID Application certificate, referencing the entitlements file.
Submitted the app for notarization (xcrun notarytool submit), and stapled the notarization ticket to the bundle.
Verified codesign and notarization:
codesign --verify --deep --strict --verbose=4 reports "valid on disk, satisfies its Designated Requirement."
spctl -a -t exec -vv reports "accepted (Notarized Developer ID)".
Profile is visible, properly embedded, and shows required entitlements.
Testing Execution
Moved the bundle to /Applications and other trusted locations.
Removed com.apple.quarantine xattrs, just in case.
Rebooted to clear any signature cache.
Result
On launch (with or without sudo), the process is immediately killed with a “Code Signature Invalid” crash.
Console and log output show:
taskgated-helper: ... Unsatisfied entitlements: com.apple.developer.team-identifier, com.apple.developer.endpoint-security.client
... Error Domain=AppleMobileFileIntegrityError Code=-413 "No matching profile found"
All signature and notarization checks are successful; the only runtime issue is a failure to recognize the provisioning profile as authorizing the required restricted entitlements.
Key Details
The provisioning profile was freshly created as Developer ID Application for this App ID, with Endpoint Security checked.
All values (App ID, team ID, entitlements, Info.plist) match.
The app is not modified after signing and notarization.
The problem occurs on both Apple Silicon and Intel Macs, on macOS Sonoma and Ventura.
Question
Has anyone successfully deployed a non-system-extension Endpoint Security client using a Developer ID Application and a provisioning profile in an “app-like” bundle?
Is there a further step required to authorize these entitlements for production use, or is this a platform limitation for non-system-extensions even with all credentials and notarization in order?