一句话结论
App 一调用相机、相册、定位、麦克风就闪退,很多情况下跟签名无关,是包里缺少了隐私用途说明(Usage Description,向用户解释为什么要这个权限的一段文案)。系统发现你要用权限却没说明用途,会直接把 App 终止掉。
这个机制是怎么运作的
苹果要求 App 在申请敏感权限时,必须同时给出一段人话说明:这个权限拿来干什么。这段说明会显示在系统弹出的授权框上,用户看了再决定给不给。
关键点是:这段说明是强制的,不是选填。系统检查它的时机在权限弹窗之前,如果包里找不到对应的说明,系统不会弹窗、不会降级,而是直接让 App 崩掉。所以表现特别突兀——点一下按钮,App 直接退到桌面,没有任何提示。
哪些权限需要配
- 相机、麦克风这类采集类权限。
- 相册读取与写入。
- 定位(包括使用时定位与始终定位,两者是分开的两条说明)。
- 通讯录、日历、提醒事项。
- 蓝牙、本地网络、面容识别等较新的权限项。
规则是:用到了哪一个,就必须为哪一个配说明,少一个就崩一个。而且同一个权限在不同系统版本上的要求可能还有变化,新系统往往会增加新的必填项。
为什么签名分发下更容易暴露
上架的 App 在提交审核时,这个问题基本会被卡掉,轮不到用户手上。签名分发的包不走这个流程,等于少了一道检查,问题就被带到了用户面前。
还有一种情况:研发在调试阶段只测了主流程,恰好没点过那个调用相机的按钮;或者用的测试机早就授权过了,弹窗不会再次触发。等到真实用户第一次点,才暴露出来。
自查怎么做
- 把 App 里所有会触发权限申请的功能,在一台刚重置过授权记录的设备上逐个点一遍,别用自己天天在测的那台机器。
- 对照包里的权限声明清单,逐个确认有没有对应的说明文案,尤其是第三方库悄悄带进来的权限。
- 说明文案要写具体用途,别写「需要使用相机权限」这种等于没写的话,也别几处权限共用一段文案。
- 升级系统大版本之后重测一遍,新系统常会新增必填项。
和签名权限是两回事
这里要区分清楚:隐私用途说明是给系统看的文案,签名时写入的权限声明(entitlements,权限声明文件)是证书允许这个 App 拥有哪些能力。两者都要有,但崩在哪一个上表现不同。说明缺失是「一调用就退」,权限声明没开是「调用无反应或者日志里报权限不足」。
小结
遇到「某个具体功能一碰就崩」,先别往掉签上想。把那台设备的授权记录清掉,重新走一遍首次授权流程,多半能当场复现。这类问题修起来很快,难的是意识到它在那儿。
我是本期作者小思,想解决苹果企业签名、超级签名、TF签名问题?可以在微信公众号对话框找到我哦~(QQ:822404920 微信:A-mk5888)