On macOS 10.15 (Catalina) and later, applications need to be properly bundled as .app bundles to appear in:
- System Settings → Privacy & Security → Accessibility
- System Settings → Privacy & Security → Input Monitoring
Simply embedding an Info.plist into a standalone binary using linker flags is no longer sufficient.
When running warpd -f (foreground mode) via the symlink at /usr/local/bin/warpd, macOS TCC (Transparency, Consent, and Control) may not properly associate the running process with the app bundle at /Applications/warpd.app. This causes:
- The accessibility permission prompt to appear correctly
- But the app fails to show up in the System Settings → Privacy & Security → Accessibility list
This issue was resolved by:
- Signing the entire app bundle (not just the binary)
- Explicitly activating the app when running in foreground mode
- Verifying the bundle identifier at startup
The build system has been updated to create a proper macOS application bundle structure:
warpd.app/
├── Contents/
├── Info.plist
├── MacOS/
│ └── warpd (binary)
└── Resources/
-
Updated
mk/macos.mk:- Build process now creates
bin/warpd.appwith proper bundle structure - Binary is placed in
warpd.app/Contents/MacOS/ Info.plistis copied towarpd.app/Contents/- The entire app bundle is now code-signed (not just the binary) for proper TCC recognition
- Symlink created at
bin/warpdfor convenience - Install target copies the
.appbundle to/Applications/ - Symlink created at
/usr/local/bin/warpdpointing to the bundle
- Build process now creates
-
Updated
files/com.warpd.warpd.plist:- LaunchAgent now points to
/Applications/warpd.app/Contents/MacOS/warpd
- LaunchAgent now points to
-
Updated
codesign/sign.sh:- Made more robust to handle signing errors gracefully
- Accepts binary or bundle path as argument
- Now signs the entire app bundle for proper TCC database registration
- Falls back to ad-hoc signing if certificate not available
-
Updated
src/platform/macos/macos.m:- Added bundle identifier verification at startup
- When running in foreground mode (
-f), explicitly activates the app to ensure TCC visibility - Logs bundle identifier for debugging purposes
-
Updated
README.md:- Updated installation and uninstallation instructions
- Added note about the app bundle location
- Clarified permission requirements
After building, the app will be installed to /Applications/warpd.app. The LaunchAgent will automatically start the application on login, and macOS will prompt for accessibility permissions on first run.
To test that the fix works:
- Build and install warpd:
make && sudo make install - Load the LaunchAgent:
launchctl load /Library/LaunchAgents/com.warpd.warpd.plist - Open System Settings → Privacy & Security → Accessibility
- Look for "warpd" in the list of applications
- Enable the toggle if not already enabled
If upgrading from a version that installed warpd as a standalone binary:
- Unload the old LaunchAgent:
launchctl unload /Library/LaunchAgents/com.warpd.warpd.plist - Reset accessibility permissions (optional but recommended):
sudo tccutil reset Accessibility - Remove old binary:
sudo rm /usr/local/bin/warpd - Install new version:
make && sudo make install - Load new LaunchAgent:
launchctl load /Library/LaunchAgents/com.warpd.warpd.plist - Grant accessibility permissions when prompted