Info.plist 权限用途说明
勾选你的 App 会请求的受保护资源(相机、照片、定位、通讯录、日历、蓝牙、本地网络、面容 ID、HealthKit、跟踪等),就能得到所需的每个 NS…UsageDescription 键,以及写有你的 App 名称和具体功能的一句话中英文用途说明。可复制为 Info.plist 行、InfoPlist.xcstrings 字符串目录或 InfoPlist.strings 文件。也可以粘贴 Info.plist,找出缺少的配对键、占位文字、施压措辞和已弃用的键。不会上传任何内容。
键名、适用平台和弃用信息均摘自苹果文档 Protected resources,核对日期 2026-10-30。
你的 App
放在每句话开头。留空则用 “This app” / “本 App”。
你的 App 用到了什么
只勾选 App 真正会请求的权限。每项会加一个键;请求得越少越容易被允许,这也是 App 审核准则 5.1.1 (iii) 的要求。
已选 0 项
生成的说明
至少勾选一项才能看到说明。
它是怎么工作的
- •所有键都摘自苹果的 Protected resources 文档,并附上苹果列出的平台和版本。苹果标记为弃用的键(例如在 iOS 17 被替换的 NSCalendarsUsageDescription)会被标出,不会提供,除非你说明仍支持旧系统。
- •每句话都遵循苹果对用途说明的建议:用一句完整的话说明访问的用途。句子以你的 App 名称开头,以你填写的功能结尾,让读者看到好处,例如“Trailmate 会使用相机,让你可以拍下路标。”
- •有些键需要成对出现。勾选“始终定位”会同时加上“使用期间”的键,因为 Core Location 先显示“使用期间”的弹窗。“旧系统”选项会用同一句话加上 iOS 17 之前的日历和提醒事项键。
- •Info.plist 行是转义过的 XML,用制表符缩进,与 Xcode 写出的一致。字符串目录为每个键提供英文和简体中文;.strings 文件每种语言一个。
- •检查功能在本页读取你的 Info.plist,并标出:空字符串、TODO 之类的占位文字、短于一句话的说明、“本应用需要访问您的相机”这类含糊的说明、“否则无法使用”这类施压措辞、超过 4000 字节的说明、拼错或未知的键、已弃用的键,以及缺少配对的键(例如有始终定位却没有使用期间定位)。
它做不到的事
- •它不会扫描你的代码来找出请求了哪些权限,需要你自己勾选;在项目里搜索 AVCaptureDevice、CLLocationManager、PHPhotoLibrary、CNContactStore 和 EKEventStore 是个好的开始。
- •它无法判断你的句子是否属实。请写下 App 实际如何使用该权限;App 审核会对照 App 的行为检查说明。
- •措辞检查基于规则匹配,不是人工判断。没有问题不代表一定通过审核,有警告也可能在具体情境下没问题。
- •它不处理字典类的键(如 NSLocationTemporaryUsageDescriptionDictionary、NSIdentityUsageDescriptionDictionary),也不处理部分资源还需要的 entitlement(HealthKit、HomeKit、NFC、Siri)。
- •英文和中文以外的翻译需要你自己完成。字符串目录可以在 Xcode 中继续添加语言。
- •它只读取 XML 属性列表,二进制的请先用 plutil -convert xml1 转换。
常见问题
- 什么样的用途说明才算好?
- 苹果要求准确、具体的说明,通常是一句完整的话:访问什么、用来做什么、对用户有什么帮助。“Trailmate 在你使用时获取你的位置,用来显示你附近的步道”是好的;“本应用需要访问您的位置”则不行。App 审核准则 5.1.1 (ii) 要求用途说明清楚、完整地描述你对数据的使用。
- 为什么我的 App 因用途说明被按 5.1.1 拒绝?
- 通常是因为说明含糊(“需要访问相机”)、是占位文字,或与 App 实际行为不符。准则 5.1.1 (iv) 也不允许施压:不得操纵、诱骗或强迫用户同意,所以别写“不允许就无法使用”这类话,并在用户拒绝时提供其他方式,比如允许手动输入地址代替共享位置。
- 两个定位键都需要吗?
- 在 iOS 上请求“始终”权限时需要。同时添加 NSLocationWhenInUseUsageDescription 和 NSLocationAlwaysAndWhenInUseUsageDescription:Core Location 会先用前者的说明请求“使用期间”权限,之后再请求升级为“始终”。如果只在 App 打开时需要定位,只用“使用期间”的键即可。macOS App 使用 NSLocationUsageDescription。
- 用 NSPhotoLibraryUsageDescription 还是 NSPhotoLibraryAddUsageDescription?
- 只保存图片时用仅添加的键。如果只是让用户挑选照片,系统照片选择器运行在 App 之外,完全不需要权限,这也是准则 5.1.1 (iii) 推荐的做法。只有 App 自己读取图库时才用 NSPhotoLibraryUsageDescription。
- iOS 17 之后日历用哪个键?
- 读写事件用 NSCalendarsFullAccessUsageDescription,只添加事件用 NSCalendarsWriteOnlyAccessUsageDescription。NSCalendarsUsageDescription 已弃用;只有 App 也运行在 iOS 16 或更早版本时,才与新键一起保留。如果在 iOS 17 及以上只弹出系统事件编辑界面,就不需要日历权限。
- 用途说明怎么翻译?
- 在 target 中添加 InfoPlist.xcstrings 字符串目录;较旧的项目则在每个 .lproj 文件夹中放 InfoPlist.strings。键仍写在 Info.plist 里,值是开发语言的句子;字符串目录提供其他语言。本页会替你写好英文和简体中文。