A native macOS utility for inspecting, auditing, and revoking app privacy permissions stored in the macOS TCC (Transparency, Consent & Control) databases.
macOS tracks every privacy decision — Camera, Microphone, Contacts, Full Disk Access, Screen Recording, and more — in a pair of SQLite databases. ReviewAppPerms reads both databases, resolves bundle IDs to human-readable app names, and surfaces everything in a searchable, filterable table. You can revoke any permission with one click and jump directly to the relevant System Settings pane.
- Full inventory — reads both the user-level and system-level TCC databases
- Startup permissions check — on launch a screen confirms the app has the access it needs (Full Disk Access) and lets you grant it without leaving the app
- Rich detail panel — two-column layout showing status badge, bundle ID, app path, auth reason, last-modified date, source database, and the exact
tccutilcommand to reproduce the revoke manually - Live filtering — filter by app, service, or status; type "missing" to surface orphaned entries for apps that no longer exist on disk
- One-click revoke — calls
tccutil reset <service> <bundleID>and reloads automatically - Delete orphaned — batch-remove all TCC entries for uninstalled apps
- Open System Settings — jumps to the exact Privacy pane for the selected service
- Auto-reload on permission grant — if you grant Full Disk Access from the startup screen and return to the app, the permission list reloads automatically
- macOS 13 Ventura or later
- Xcode 15+ or Swift 5.9 command-line tools
- Full Disk Access granted to the app (prompted on first launch)
git clone https://github.com/todddube/reviewAppPerms.git
cd reviewAppPerms/ReviewAppPermsSwift
swift runOr open ReviewAppPermsSwift as a package in Xcode and press Run.
| Database | Path |
|---|---|
| User | ~/Library/Application Support/com.apple.TCC/TCC.db |
| System | /Library/Application Support/com.apple.TCC/TCC.db |
Each database is copied to a temp file before reading to avoid locking the live DB. Bundle IDs are resolved to app names and paths via NSWorkspace and NSRunningApplication. Revoking calls:
tccutil reset <ServiceName> <BundleID>Calendar · Reminders · Contacts · Photos · Camera · Microphone · Screen Recording · Accessibility · Full Disk Access · Bluetooth · Input Monitoring · Automation · Developer Tools · Focus · Media & Apple Music · Location Services · Local Network · Siri · Speech Recognition · App Tracking · Home · Downloads / Desktop / Documents Folders · Removable Volumes · iCloud
ReviewAppPermsSwift/
├── Sources/
│ ├── ReviewAppPerms/ # App target (SwiftUI entry point, views)
│ │ ├── ReviewAppPermsApp.swift
│ │ ├── AppInfo.swift
│ │ └── Views/
│ │ ├── StartupView.swift
│ │ ├── ContentView.swift
│ │ ├── DetailPanel.swift
│ │ ├── PermissionsTableView.swift
│ │ └── ConfirmationSheet.swift
│ └── ReviewAppPermsKit/ # Library target (models, services, view model)
│ ├── Models/
│ ├── Services/
│ └── ViewModels/
└── Tests/
PRs and issues are welcome. This project is intentionally kept small and dependency-free — the only system library used is SQLite3 (linked directly, no Swift package dependencies).
MIT — free to use, modify, and distribute. See LICENSE for details.
