macOS
Understanding macOS Sequoia's Privacy Changes
The new granular permission model changes everything for developers and terminal power users.
By Elena Rostova · · 8 min read
Apple has always led the industry on privacy, but macOS Sequoia marks a turning point. The new fine-grained permission model means apps can no longer request blanket access to your file system or network — they must request specific, scoped access. For end users, this is a win. For developers and terminal power users, there are important adjustments to make.
The New Permission Architecture
The old model was binary: an app either had access to a location or it didn't. Sequoia introduces capability scoping — apps declare the specific filesystem paths, network hosts, or hardware interfaces they need, and the system grants only those. The privacy permission dialogs now include the specific path or hostname in the prompt text.
What Changes for Developers
Apps built with Xcode 16+ must adopt PrivacyKit to receive context-aware permission dialogs instead of the generic, alarming prompts that non-compliant apps trigger. The API is ergonomic:
PrivacyKit integration
import PrivacyKit
// Request scoped access to ~/Documents
let request = PrivacyRequest(
scope: .directory(path: .documents),
purpose: "Access your project files"
)
let status = await request.promptUser()
switch status {
case .authorized:
loadProjectFiles()
case .denied:
showPermissionExplainer()
case .restricted:
// MDM policy in effect
break
}Impact for Terminal Users
If you live in the terminal, Terminal.app and iTerm2 now need explicit permission to traverse directories like ~/Downloads or ~/Desktop. The first time you cd into a protected directory, you'll see a system prompt. Grant it once and it persists.
What to Do Now
- Add your terminal to Full Disk Access if you need unrestricted traversal
- Test your shell scripts on Sequoia before upgrading your main machine — use a VM first
- If you distribute macOS apps, update to Xcode 16 and integrate PrivacyKit before the App Store deadline
- Review your app's entitlements: remove any com.apple.security.files.all if you're using scoped access instead
- Use the Console app to filter for "permission" to see exactly what is being denied and why