Flutter iOS端报错平台不允许不安全HTTP,配置info.plist后问题仍未解决
问题根源:Info.plist 配置层级错误
Info.plist 是严格的「键-值」结构,每个 key 必须对应明确的 value(字符串、字典、数组等)。你当前的写法把 NSAppTransportSecurity 和 NSAllowsArbitraryLoads 设为同级 key:
NSAppTransportSecurity没有对应任何有效 value,会被 iOS 直接忽略NSAllowsArbitraryLoads不属于允许放在 plist 顶层的 key,同样不会生效
这就是你加了配置但 ATS 拦截规则未关闭的核心原因。
正确的 ATS 配置写法
NSAppTransportSecurity 是父级规则容器,它的 value 必须是一个字典,所有 ATS 相关的子配置都要放在这个字典内部。正确的配置片段如下:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
你需要把原来 plist 中错误的三行:
<key>NSAppTransportSecurity</key> <key>NSAllowsArbitraryLoads</key> <true/>
替换为上面这段正确的配置即可。
配置修复后的必做操作
iOS 和 Flutter 的构建缓存经常导致 plist 修改不生效,按顺序执行以下操作:
- 执行
flutter clean清空项目全局构建缓存 - 确认你修改的是项目主配置路径
ios/Runner/Info.plist,而非其他 target 下的 plist 文件 - 进入项目的
ios目录,删除Pods文件夹、Podfile.lock文件 - 执行
cd ios && pod install --repo-update重新拉取 iOS 依赖 - 完全卸载模拟器/真机上已安装的旧版本 App(旧 plist 会被系统缓存,不卸载会读取旧配置)
- 重新执行
flutter run启动项目
补充说明:如果修复层级后仍有部分 HTTP 请求被拦截,可在 ATS 的字典内额外添加 <key>NSAllowsLocalNetworking</key><true/> 放行本地局域网请求;如果只想开放指定 HTTP 域名而非全局放行,也可以在 ATS 字典内添加对应域名的例外规则。
内容的提问来源于stack exchange,提问作者Ravindra S. Patil
相关产品推荐
相关产品推荐

