Full Metal Mac FullMetalMac.com
macOS Security intermediate TCC privacy PPPC MDM

TCC: Transparency, Consent, and Control on macOS

Managing privacy permissions, PPPC profiles, and the TCC framework that controls app access to sensitive data

Published: Feb 14, 2026 10 min read

Overview

Transparency, Consent, and Control (TCC) is the macOS privacy framework that governs which applications can access sensitive user data and system resources. Every time an app requests access to your camera, microphone, contacts, or other protected resources, TCC is the system making the decision. For Mac admins, TCC is one of the most impactful frameworks to understand because mismanaged privacy permissions are the number one cause of silent application failures in managed environments.

What TCC Controls

TCC manages access to a broad and growing list of protected resources:

ResourceTCC Service NameNotes
CamerakTCCServiceCameraVideo capture devices
MicrophonekTCCServiceMicrophoneAudio input devices
Location ServiceskTCCServiceLocationAlwaysGPS and Wi-Fi location
ContactskTCCServiceAddressBookAddress Book data
CalendarkTCCServiceCalendarCalendar events
ReminderskTCCServiceRemindersReminders data
PhotoskTCCServicePhotosPhoto library access
Full Disk AccesskTCCServiceSystemPolicyAllFilesUnrestricted file system access
AccessibilitykTCCServiceAccessibilityControl of the computer via UI scripting
Screen RecordingkTCCServiceScreenCaptureCapture screen content
Automation (AppleEvents)kTCCServiceAppleEventsControl other apps via Apple Events
Input MonitoringkTCCServiceListenEventMonitor keyboard and mouse input
Desktop FolderkTCCServiceSystemPolicyDesktopFolderAccess to ~/Desktop
Documents FolderkTCCServiceSystemPolicyDocumentsFolderAccess to ~/Documents
Downloads FolderkTCCServiceSystemPolicyDownloadsFolderAccess to ~/Downloads

Apple adds new TCC-protected categories with nearly every macOS release, so this list expands over time.

TCC Databases

TCC stores its decisions in SQLite databases at two levels:

User-Level Database

# Location of the user-level TCC database
~/Library/Application\ Support/com.apple.TCC/TCC.db

This stores per-user consent decisions – the choices a user makes when they click “Allow” or “Deny” in a privacy prompt.

System-Level Database

# Location of the system-level TCC database
/Library/Application\ Support/com.apple.TCC/TCC.db

This stores system-wide consent decisions, including those pushed via MDM configuration profiles.

Important: The TCC databases are protected by SIP and Full Disk Access restrictions. You cannot directly edit them on a running system with SIP enabled. Attempts to manipulate TCC.db directly (e.g., with sqlite3) will fail on modern macOS.

Inspecting the TCC Database (Read-Only)

If you have Full Disk Access for Terminal, you can query the database:

# View user-level TCC entries (requires Full Disk Access for Terminal)
sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db \
  "SELECT service, client, auth_value FROM access ORDER BY service;"

The auth_value column indicates: 0 = denied, 2 = allowed, 3 = limited.

The tccutil Command

Apple provides a limited command-line tool for resetting TCC decisions:

# Reset all TCC permissions for a specific app
tccutil reset All com.example.appname
# Reset a specific TCC service for all apps
tccutil reset Camera
# Reset all TCC permissions for a specific service and app
tccutil reset Microphone com.example.appname

Note: tccutil can only reset (remove) permissions – it cannot grant them. Granting permissions programmatically requires MDM.

Silent Failures Without PPPC

This is the critical point for Mac admins: when an app lacks a required TCC permission, it often fails silently. There is no error dialog, no crash, no log entry visible to the user. The app simply does not get access to the resource it requested.

Common symptoms of missing TCC permissions:

  • Screen recording tools that capture a blank screen
  • Backup agents that skip the Desktop, Documents, or Downloads folders
  • Security tools that cannot monitor keyboard input or accessibility events
  • Automation scripts that fail to control other applications

These silent failures make TCC the single most common cause of “it works on my test Mac but not on managed devices” issues.

Privacy Preferences Policy Control (PPPC) Profiles

The proper way to manage TCC permissions at scale is through Privacy Preferences Policy Control (PPPC) configuration profiles deployed via MDM. PPPC profiles allow admins to pre-approve TCC permissions so users never see a prompt, and apps get the access they need from first launch.

What PPPC Profiles Can Do

  • Grant specific TCC permissions to specific apps (by bundle ID and code requirement)
  • Deny specific TCC permissions
  • Pre-authorize permissions so users never see a consent prompt
  • Combine multiple permission grants into a single profile

What PPPC Profiles Cannot Do

  • Grant Screen Recording permission (requires manual user approval on macOS Catalina and later)
  • Grant permissions for apps that are not properly code-signed
  • Override a user’s explicit denial in all cases (behavior varies by macOS version)

Creating PPPC Profiles

Several tools simplify PPPC profile creation:

iMazing Profile Editor (free) – A standalone macOS app that provides a GUI for building configuration profiles, including PPPC payloads.

PPPC Utility – An open-source tool from Jamf that generates PPPC profiles by letting you drag and drop applications.

Your MDM console – Most MDM platforms (Jamf Pro, Mosyle, Kandji, Fleet) have built-in PPPC profile creation with app-specific templates.

PPPC Profile Structure

A PPPC profile payload requires the following for each app permission:

- Identifier (bundle ID): com.example.securitytool
- Identifier Type: bundleID
- Code Requirement: identifier "com.example.securitytool" and anchor apple generic and ...
- Service/Permission: SystemPolicyAllFiles (Full Disk Access)
- Authorization: Allow

The code requirement is critical. It ensures the permission only applies to the legitimately signed version of the app, not to malware masquerading under the same bundle ID.

# Get the code requirement string for an app
codesign -dr - /Applications/SomeApp.app 2>&1 | grep designated

Debugging TCC Issues in Logs

When troubleshooting TCC-related failures, the unified log is your primary diagnostic tool:

# Search for TCC denial events
log show --predicate 'subsystem == "com.apple.TCC"' --last 1h
# Search for sandbox denial events (often TCC-related)
log show --predicate 'eventMessage CONTAINS "deny"' --subsystem "com.apple.sandbox" --last 1h
# Filter for a specific app's TCC events
log show --predicate 'subsystem == "com.apple.TCC" AND eventMessage CONTAINS "com.example.appname"' --last 1h

Look for messages containing deny along with the service name (e.g., kTCCServiceSystemPolicyAllFiles) to identify exactly which permission is missing.

Best Practices for Mac Admins

  1. Inventory your apps’ TCC requirements before deploying them. Test each app and note which privacy prompts appear.
  2. Build PPPC profiles proactively as part of your app deployment workflow, not reactively after users report failures.
  3. Use code requirements in PPPC profiles, not just bundle IDs. This prevents permission hijacking.
  4. Test on a clean Mac to catch missing permissions. Your admin test Mac likely has permissions already granted from manual testing.
  5. Monitor for new TCC categories with each macOS release. Apple regularly adds new protected resources.
  6. Document your PPPC profiles and version-control them. TCC requirements change as apps are updated.

Key Takeaways

TCC is the most operationally impactful privacy framework on macOS for fleet management. Silent failures from missing permissions will cause more support tickets than almost any other issue. Invest time in building comprehensive PPPC profiles for every app you deploy, test on clean machines, and monitor your logs for deny events. The payoff is fewer escalations and more reliable managed endpoints.

Related Articles