iOS定位权限ITMS-90738与ITMS-90683问题排查求助
问题概述
上传应用至App Store Connect时触发以下两个权限相关错误:
ITMS-90738:无效的用途描述字符串 - SuperNewsV2UIKit.app中的
NSLocationAlwaysAndWhenInUseUsageDescription键对应值不被允许。应用代码或依赖库引用了访问敏感位置数据的API,Info.plist需包含该键及清晰的用户面向用途描述。
ITMS-90683:Info.plist中缺失用途字符串 - 应用代码或权限涉及访问敏感数据,需包含NSLocationWhenInUseUsageDescription键及对应用途字符串,即使未直接使用相关API,若依赖库引用也需添加。
已尝试操作
- 配置主Info.plist文件
- 禁用部分Info.plist配置项
- 使用
InfoPlist.xcstrings目录配置Info.plist本地化
核心矛盾:必须保留NSLocationWhenInUseUsageDescription才能让地图定位功能正常请求权限并工作;若替换为NSLocationAlwaysAndWhenInUseUsageDescription,定位功能直接失效,但保留原键又会触发App Store的上传错误。
解决方案建议
1. 同时配置两个定位权限键
苹果的权限检测逻辑是:若代码/依赖库中存在对「始终允许」定位权限的API调用,必须同时配置NSLocationWhenInUseUsageDescription和NSLocationAlwaysAndWhenInUseUsageDescription两个键,且各自的用途描述需清晰、符合实际场景:
NSLocationWhenInUseUsageDescription:描述前台使用定位的场景(例如:「在使用应用时获取您的位置,为您提供精准的地图定位服务」)NSLocationAlwaysAndWhenInUseUsageDescription:若应用确实需要后台定位,描述后台场景;若仅前台使用,可如实说明(例如:「为满足系统权限检测要求配置,应用仅在前台使用您的位置」)
需确保这两个键同时存在于主Info.plist和所有本地化的InfoPlist.xcstrings文件中,键名拼写完全一致(区分大小写)。
2. 排查依赖库的权限调用
触发NSLocationAlwaysAndWhenInUseUsageDescription的检测,大概率是项目中某第三方依赖库(如地图SDK、统计SDK、位置服务SDK)调用了requestAlwaysAuthorization()相关API。可通过以下方式排查:
- 在Xcode中全局搜索
requestAlwaysAuthorization关键词,定位调用来源 - 使用Xcode的
Product > Analyze功能,扫描代码中的权限相关问题 - 检查依赖库的官方文档,看是否有配置项可禁用「始终允许」权限的请求
若找到对应依赖库,优先升级到最新版本(部分库已默认使用前台权限),或通过配置参数关闭Always权限请求。
3. 检查所有Build Target的配置
确保项目中所有Build Target(包括主应用、扩展、测试Target等)的Info.plist文件都配置了这两个权限键,避免因某个Target遗漏导致上传报错。
4. 清理缓存后重新打包
执行Product > Clean Build Folder清理Xcode缓存,然后重新Archive并上传,避免旧配置缓存导致的检测异常。
内容的提问来源于stack exchange,提问作者Kous92

