Xamarin.iOS应用更新需添加未使用权限的原因及解决方案咨询
解决Xamarin.Forms iOS应用App Store审核ITMS-90683及SMS Extension误判问题
问题背景
用Xamarin.Forms开发的iOS应用已上线3年,近期更新时遭遇ITMS-90683错误,要求补充NSContactsUsageDescription、NSMicrophoneUsageDescription等隐私权限说明,但应用并未使用这些权限。上次紧急发布时添加模糊描述后通过,但本次更新因被误判为“使用SMS Fraud Extension拦截短信”被拒,怀疑和之前添加的权限描述、依赖库或Share Extension有关。
针对性解决方案
1. 处理Xamarin.Essentials导致的冗余权限
直接切换到Link All会闪退的话,用自定义链接配置文件精准保留用到的模块:
- 在iOS项目中新建
linker.xml文件,内容示例(根据你实际用到的Essentials功能调整):
<linker> <assembly fullname="Xamarin.Essentials"> <type fullname="Xamarin.Essentials.Preferences" preserve="all" /> <type fullname="Xamarin.Essentials.Connectivity" preserve="all" /> <!-- 只保留你实际调用的功能模块 --> </assembly> </linker>
- 在iOS项目属性的iOS Build选项中,找到Link Description File,选择刚才创建的
linker.xml。 - 这样链接器会移除未用到的Essentials代码,对应的权限需求也会被清除,同时避免全量链接导致的闪退问题。
2. 排查Share Extension的影响
- 检查Share Extension项目的依赖:确保Extension只引入必要的库,不要包含Xamarin.Essentials这类带多权限的包(如果Extension不需要的话)。
- 清理Extension的Info.plist:确保里面没有添加多余的权限描述,只保留Extension功能必需的配置。
3. 解决SMS Extension误判审核问题
- 移除Info.plist中之前添加的模糊权限描述,只保留应用实际用到的权限说明。
- 在App Store Connect提交审核时,在审核备注中明确说明:
本应用未集成任何SMS拦截/过滤扩展,之前添加的通讯录权限描述是因依赖库的误检测导致,现已通过链接优化移除了所有未使用的权限相关代码,应用全程不会调用通讯录、麦克风等未声明的权限。
- 可以附加项目结构截图,证明项目中不存在SMS Extension相关的代码或配置。
额外验证步骤
- 用Xcode的Organizer导出归档包,查看包内容中的
Info.plist和嵌入的框架,确认冗余权限描述和相关框架已被移除。 - 在本地测试时,用iOS系统的隐私设置检查应用是否请求了未用到的权限,确保实际行为和声明一致。
内容的提问来源于stack exchange,提问作者Pelin Konaray
相关产品推荐
相关产品推荐

