上传Flutter iOS应用至TestFlight时遇ITMS-91061报错:已添加隐私清单仍提示flutter_local_notifications缺失隐私清单
兄弟,我太懂你这种明明按要求加了隐私清单,结果苹果还是揪着插件不放的崩溃感了!之前帮朋友排查过一模一样的问题,给你整理几个亲测有用的解决思路,你挨个试试:
先把flutter_local_notifications更到最新稳定版
很多时候这个报错是因为旧版本的插件本身就没自带隐私清单。你直接在终端跑flutter pub upgrade flutter_local_notifications把插件更到最新,然后重新执行pod install,再打包上传试试。官方在新版本里已经补了这个隐私清单文件,大概率升级完就搞定了。手动给插件补隐私清单(没法升级版本的情况)
要是项目有依赖限制没法升级插件,那只能手动给它加隐私清单:- 打开iOS项目的Pods目录,找到
flutter_local_notifications/ios文件夹 - 新建一个
PrivacyInfo.xcprivacy文件,内容要包含插件用到的API对应的隐私声明,比如:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>NSPrivacyAccessedAPITypes</key> <array> <dict> <key>NSPrivacyAccessedAPICategory</key> <string>NSPrivacyAccessedAPICategoryUserNotifications</string> <key>NSPrivacyAccessedAPITypeReasons</key> <array> <string>E174.1</string> </array> </dict> </array> </dict> </plist> - 把这个文件添加到flutter_local_notifications的target里,或者直接拖进Xcode项目,确保打包时能包含进去。
- 打开iOS项目的Pods目录,找到
清缓存重新构建,避免旧内容残留
有时候Flutter或CocoaPods的缓存会搞鬼,明明改了配置却没生效。你按这个顺序执行命令:flutter clean→cd ios && pod deintegrate→pod install→ 回到根目录重新打包。这样能彻底清掉旧的构建产物,保证用的是最新配置。检查主应用隐私清单的完整性
主应用的PrivacyInfo.xcprivacy也要确保包含flutter_local_notifications用到的API条目,比如上面提到的用户通知API,而且用途对应的理由代码(比如E174.1)和实际描述要准确,不能随便填或者留空,苹果对这块审核卡得很严。
另外提个醒:确保你用的是Xcode 15及以上版本,隐私清单是iOS 17以后的要求,老版本Xcode对隐私清单的处理可能有问题。上传前记得先用Xcode的「Validate App」功能验证一下,能提前发现问题,省得白等上传后的审核报错。
备注:内容来源于stack exchange,提问作者Vaibhav Pujari

