PanicLock is macOS menu bar utility that instantly disables Touch ID and locks the screen with a single click.
- One-click panic lock — Click the menu bar icon or press a hotkey to instantly lock
- Temporarily disables Touch ID — Forces password-only unlock
- Auto-restore — Original Touch ID settings restored after unlock
- Keyboard shortcut — Configure a global hotkey (e.g., ⌃⌥⌘L)
- Launch at login — Start automatically when you log in
- macOS 14.0 (Sonoma) or later
- Mac with Touch ID
| Action | Result |
|---|---|
| Left-click icon | Trigger panic lock immediately |
| Right-click icon | Open menu (Preferences, Uninstall, Quit) |
On first use, you'll be prompted for your admin password to install the privileged helper. This is a one-time setup.
- Clone this repository
- Open
PanicLock.xcodeprojin Xcode - Set your Development Team in both targets (PanicLock and PanicLockHelper)
- Update Team ID in
Info.plist(SMPrivilegedExecutables) andInfo-Helper.plist(SMAuthorizedClients) - Build and run
From the app: Right-click → "Uninstall PanicLock..." → Enter admin password
Manual:
sudo launchctl bootout system/com.paniclock.helper
sudo rm -f /Library/PrivilegedHelperTools/com.paniclock.helper
sudo rm -f /Library/LaunchDaemons/com.paniclock.helper.plist
rm -rf /Applications/PanicLock.appPanicLock uses a privileged helper (installed via SMJobBless) to modify Touch ID timeout settings:
- Reads current timeout via
bioutil -r -s - Sets timeout to 1 second via
bioutil -w -s -o 1 - Locks screen via
pmset displaysleepnow - Restores original timeout after ~2 seconds
- Minimal privileges — Helper only runs 3 hardcoded commands (
bioutil,pmset) - No command injection — Timeout parameter is a Swift
Int, not a string - Code-signed XPC — Helper verifies connecting app's bundle ID + team ID + certificate
- No network activity — App is 100% offline, no telemetry or analytics
- No data collection — Only stores preferences (icon style, keyboard shortcut)
- Open source — Full code available for audit
The release script handles building, signing, notarizing, and packaging:
./scripts/release.shFeatures:
- Extracts version from Xcode project automatically
- Signs with Developer ID for distribution outside the App Store
- Submits to Apple for notarization (can take minutes to hours)
- Creates a notarized DMG for distribution
- Supports parallel notarizations — each version gets its own
build/release/<version>/directory
Workflow:
- Bump
MARKETING_VERSIONin Xcode - Run
./scripts/release.sh— builds and submits for notarization - Run again later to check status and continue when approved
- Final output:
build/release/<version>/PanicLock-<version>.dmg
MIT License — See LICENSE for details.
Contributions welcome! Please open an issue or pull request.
