macos沙盒应用权限必须通过entitlements.plist声明并配合info.plist能力键生效,禁用绝对路径例外,合规方式为用户授权+安全书签;基础模板含app-sandbox、user-selected读写、app-scoped书签等关键键值。

macOS 沙盒应用的权限配置必须通过 Entitlements.plist 文件声明,且需与 Info.plist 中的能力键(如 com.apple.security.files.user-selected.read-write)协同生效。硬编码路径或临时例外(如 absolute-path)在 App Store 审核中基本不被接受,合规方式是使用用户授权 + 安全书签。
基础 Entitlements.plist 模板(推荐最小可用配置)
以下为适用于大多数需要访问用户选定文件夹的 macOS 沙盒应用的标准 XML 模板,保存为 Entitlements.plist 并关联到 Xcode Target 的 Signing & Capabilities → “App Sandbox” 下:
ttps://www.php.cn/link/1b6300c90c22cec852da53ce580e1a9b">http://www.apple.com/DTDs/PropertyList-1.0.dtd">
关键字段说明与使用前提
-
com.apple.security.app-sandbox:必须为
true,启用沙盒机制(Xcode 勾选 App Sandbox 后自动生成) -
com.apple.security.files.user-selected.read-write:允许应用通过
NSOpenPanel或NSSavePanel获取用户显式选择的文件/文件夹的长期读写权——这是访问~/Documents、~/Desktop等目录的唯一合规路径 - com.apple.security.files.bookmarks.app-scope:启用应用级安全书签(App-scoped bookmarks),使书签可在重启后恢复访问,无需再次弹窗(但首次仍需用户选择)
- 所有权限键都必须在运行时配合对应 API 使用(例如:选中路径后调用
startAccessingSecurityScopedResource(),访问完立即stopAccessing)
Info.plist 中必须同步配置的键
仅 Entitlements.plist 不够,Info.plist 也需声明对应能力(Xcode Capabilities 自动添加,但建议手动校验):
-
com.apple.security.files.user-selected.read-write→ 值为YES -
NSPhotoLibraryUsageDescription(若启用了照片权限)→ 填写用户可见的用途说明字符串 -
NSDocumentsFolderUsageDescription(macOS 14+ 推荐)→ 明确告知用户为何需要访问文档目录
禁止使用的“审核拒绝型”配置
以下权利在 App Store 提交时会被拒,仅限开发调试或企业内部分发(非 MAS 路径):
-
com.apple.security.temporary-exception.files.absolute-path.*(如read-only或read-write)→ Apple 明确不接受硬编码卷名或绝对路径 -
com.apple.security.files.downloads.read-write→ 已废弃,应改用 user-selected + 书签 -
com.apple.security.files.user-selected.read-only单独启用 → 若实际需写入,会触发 Operation not permitted











