PanicLock is macOS menu bar utility that instantly disables Touch ID and locks the screen with a single click or closing your laptop lid.
- One-click panic lock — Click the menu bar icon or press a hotkey to instantly lock
- Lock on Close — Optionally lock and disable Touch ID when you close the lid
- 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) |
When enabled in Preferences, closing your Mac's lid will automatically disable Touch ID and lock your screen. Touch ID stays disabled until you re-login with your password. If your screen locks for other reasons (screensaver, display sleep, etc.), Touch ID will still work as normal.
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:
Features:
- 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.
