React Native iOS应用Info.plist位置权限用途字符串的审核问题咨询
React Native iOS App Store 权限审核问题解决方案
疑问解答
1. React Native为何默认添加NSLocationWhenInUseUsageDescription却留空?必须补充有效字符串吗?
React Native核心框架内置了Geolocation定位相关API,初始化项目时会自动在Info.plist中添加该权限键,但由于无法预知开发者的具体使用场景,所以默认留空。
根据苹果App Store审核规则,所有权限用途字符串必须非空且清晰说明用途——哪怕你没直接使用定位功能,只要Info.plist中存在该键,就不能留空,必须补充有效的描述文本。
2. 未直接使用定位,但第三方库包含定位代码,是否需要添加NSLocationAlwaysAndWhenInUseUsageDescription?
苹果审核会检测最终打包的二进制文件中是否包含定位权限相关的API调用,不管代码来自你自己还是第三方库。react-native-permission为了支持定位权限申请,会引入相关系统API,所以审核时会触发权限检测。
这种情况分两种处理:
- 如果你的App完全不需要定位功能:优先清理第三方库中定位相关的代码(比如通过配置禁用定位模块,或更换不包含定位权限的权限库),这样可以彻底移除权限键,避免后续问题。
- 如果无法清理第三方库的定位代码:必须添加NSLocationAlwaysAndWhenInUseUsageDescription键及非空用途描述,如实说明情况即可(比如“本应用未使用始终定位服务,该声明为第三方依赖所需”)。
符合规范的具体操作步骤
步骤1:修复空的NSLocationWhenInUseUsageDescription
打开项目的Info.plist(Xcode中直接编辑或修改XML文件),找到该键,补充真实清晰的描述:
<key>NSLocationWhenInUseUsageDescription</key> <string>本应用未使用定位服务,该声明为第三方依赖所需</string>
如果你的App确实用到定位,就替换为具体场景,比如“获取您的位置以推荐附近商家”。
步骤2:处理NSLocationAlwaysAndWhenInUseUsageDescription缺失
- 若需要始终定位权限:添加该键并补充用途:
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>在后台持续获取位置以提供实时导航服务</string>
- 若不需要始终定位权限:
- 尝试在react-native-permission中禁用定位模块:查看库的文档,通过配置项关闭定位权限支持;或在
Podfile中排除定位相关的Pod依赖。 - 若无法禁用,就添加该键并如实描述:
- 尝试在react-native-permission中禁用定位模块:查看库的文档,通过配置项关闭定位权限支持;或在
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>本应用未使用始终定位服务,该声明为第三方依赖所需</string>
步骤3:彻底移除不必要的权限(推荐)
如果你的App完全不需要定位功能,建议直接修改react-native-permission的配置,移除定位相关的代码,或者更换为仅包含你需要的权限的库。这样可以从根源上避免权限相关的审核问题,也减少App的权限声明冗余。
内容的提问来源于stack exchange,提问作者CS7
相关产品推荐
相关产品推荐

