You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 14 Widget位置权限弹窗未显示自定义描述,应用遭苹果驳回求助

解决iOS 14 Widget位置权限弹窗不显示自定义描述的问题

我之前踩过一模一样的坑,当时也被苹果审核驳回了,折腾了半天终于搞明白问题出在哪:

核心误区:Widget的权限弹窗文本取自主App的Info.plist,而非Widget扩展的Info.plist

Widget作为App扩展,本身没法独立拥有专属的权限配置——当你的Widget发起位置权限请求时,系统会直接复用主App的权限描述文本,而不是你在Widget扩展Info.plist里填的内容。你之前只在Widget的配置文件里加了权限键,这就是自定义文本死活不显示、只弹出系统默认内容的根本原因。

正确的配置步骤

  • 第一步:给主App的Info.plist添上权限描述键
    根据你的需求选择对应的键,建议同时覆盖两种场景避免遗漏:

    • 如果只需要Widget在前台被查看时获取位置,添加 NSLocationWhenInUseUsageDescription,填入清晰具体的自定义描述;
    • 如果需要后台持续更新位置,添加 NSLocationAlwaysAndWhenInUseUsageDescription(iOS 13+ 推荐用这个替代旧的NSLocationAlwaysUsageDescription)。

    主App Info.plist示例代码:

    <key>NSLocationWhenInUseUsageDescription</key>
    <string>你的位置用于为Widget提供个性化内容,比如附近店铺推荐、实时天气定位等</string>
    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>你的位置用于在App后台时也能更新Widget内容,确保你获取实时的周边信息</string>
    
  • 第二步:同步配置Widget扩展的Info.plist(可选但推荐)
    虽然系统优先读取主App的配置,但为了避免潜在的逻辑冲突,最好在Widget的Info.plist里也添加完全相同的权限键和描述文本,保持配置一致性。

  • 第三步:检查权限请求逻辑
    确保Widget里的权限请求代码和你配置的权限类型匹配:

    let locationManager = CLLocationManager()
    // 对应WhenInUse权限
    locationManager.requestWhenInUseAuthorization()
    // 若需要后台权限则用下面这句
    // locationManager.requestAlwaysAuthorization()
    

额外注意事项

  • 权限描述一定要具体,不能含糊(比如只写"需要你的位置"),苹果审核会严格检查,必须让用户明确知道位置数据的用途;
  • 测试前彻底卸载App和Widget,重新安装后测试首次权限弹窗,避免旧配置缓存干扰;
  • 如果用到后台位置更新,还要在主App的Info.plist里添加UIBackgroundModes并勾选location项。

内容的提问来源于stack exchange,提问作者user923288

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:27:47