被 Guideline 2.5.4 拒审,意思是你声明了没有任何用户可见功能在用的后台模式:App 进了后台,只能做它声明过、而且用户能感知到的事,比如音频播放、定位、VoIP、任务收尾、本地通知。修法是把每项后台声明对应到一个功能,把“到点提醒”换成预先安排的本地通知,确认不需要后再删掉多余的声明。
我们在它上面被拒过一次,经验主要在于:为什么你事先看不到它。
下面来自我们自己的送审记录。想确认你收到的信引用的是哪一条,可以把拒信粘贴到 App 审核拒信解读。
为什么没有任何警告
后台模式在 Info.plist 或 Capabilities 里勾上就生效,编译、运行、测试全绿。没有哪个工具会告诉你“这项声明没有被任何用户可见功能用到”。只有审核时,有人把声明和实际行为逐项对一遍。
最常见的踩法是:“为了让提醒在锁屏后还能响,顺手勾一个后台模式。” 功能看起来能用,但选错了机制。你想要的是让进程一直活着;真正需要的只是“在未来某个时刻通知用户”。
怎么处理,顺序是
- 先列清单: 每一项后台声明,旁边写它对应的用户可见功能。
- 把“到点提醒”类需求换成本地通知, 在未来的触发时间预先安排好,不依赖进程存活。
- 确认没有后台模式也能工作之后,再删声明。 先删声明,功能会坏,人就会想把声明加回去。
常见问题
2.5.4 后台模式被拒怎么改?
列出每一项后台声明和它对应的用户可见功能,把“到点提醒”类需求换成预先安排的本地通知,没有功能在用的声明删掉。要先确认没有它也能工作,再删声明。
锁屏后还要响提醒,需要开后台模式吗?
不需要。在触发时间预先安排好的本地通知不依赖进程存活,不开后台模式也能按时提醒。
多余的后台模式,Xcode 为什么不提示?
后台模式勾上就生效,编译、运行、测试全绿。没有工具会检查它有没有被用户可见功能用到,只有审核员会把声明和实际行为逐项对一遍。
2.5.4 允许 App 在后台做什么?
只能做声明过、而且用户能感知到的事,比如音频播放、定位、VoIP、任务收尾、本地通知。
一分钟自检
打开 UIBackgroundModes,逐项回答:用户在哪个界面、做了什么操作会触发它? 答不出来的就是风险项。再把 App 切到后台观察半分钟,看它是否真的在做那件事。
后台能力不是“以防万一”的保险,每一项声明都是一份要被核对的承诺。
以上来自 Obelisk Club 自己的送审记录。Apple 的措辞会变,请以当前 App Review 指南和你收到的消息为准。