关于ITMS-91053缺失API声明警告的技术咨询
关于ITMS-91053缺失API声明警告的技术咨询
最近好多开发者都被苹果这个新的隐私政策警告搞懵,我来给你拆解下这两个问题的答案:
问题1:是否需要在App的隐私清单中声明依赖库使用的API?
是的,哪怕是第三方SDK调用的API,你也得在自己App的隐私清单里一并声明。虽然理想状态下每个合规的SDK都应该自带隐私清单,但目前不少SDK还没跟上苹果的新要求。苹果的校验是针对整个App二进制包的——只要扫描到有调用需要理由声明的API,不管是你的业务代码还是依赖的SDK,都得在主App的隐私清单里统一填写对应的使用理由。
不过等后续SDK更新了自带的隐私清单后,你可以优先依赖SDK的清单内容,减少自己的维护成本。
问题2:如何定位到底是哪个依赖(或代码)调用了这些API?有没有本地工具可以校验?
给你推荐几个实用的方法:
- Xcode原生工具:升级到Xcode 15及以上版本后,你可以先在
Info.plist里添加NSPrivacyAccessedAPITypes数组,Xcode会自动做静态分析,帮你检查有没有遗漏的API声明;也可以通过Product > Analyze触发全面的静态扫描,相关的API调用警告会直接显示在分析结果里。 - 命令行工具排查:
- 用
codesign工具查看二进制的API引用:执行codesign --display --requirements - --entitlements - YourAppBinaryPath,然后过滤你关注的API类别关键词(比如SystemBootTime对应的底层APImach_absolute_time)。 - 用
nm命令扫描二进制符号:执行nm -U YourAppBinaryPath | grep "关键词",比如搜getattrlist(对应FileTimestamp类别),能快速定位到调用了相关API的模块。
- 用
- 排除法定位SDK:可以暂时移除某个第三方SDK,重新打包上传TestFlight测试版本,如果警告消失,就说明这个SDK是问题来源,之后可以联系SDK开发者索要他们的隐私清单,或者自己根据SDK的功能推断合理的使用理由。
- 开源辅助工具:现在社区里有不少开源脚本可以自动扫描App依赖的所有SDK,帮你快速找出哪些SDK调用了需要声明的API,你可以搜这类工具来提高效率。
额外提醒
一定要对照苹果官方文档里的说明,给每个API类别选择符合实际场景的使用理由,不能随意填写——从2024年5月1日开始,新提交的App或更新必须完成这些声明,届时警告会变成审核错误,影响上线。
备注:内容来源于stack exchange,提问作者matrejek




