You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Flutter 1.17.1升级iOS端遇EXC_BAD_ACCESS问题求助

针对Flutter 1.17.1 + Xcode 11.4.1 iOS崩溃问题的解决方案

我之前也碰到过类似的iOS端EXC_BAD_ACCESS崩溃情况,结合社区经验和自己的排查,给你几个可以尝试的方向:

1. 排查第三方插件的兼容性

Flutter版本升级后,很多老的第三方插件可能还没适配新的引擎版本,这是导致崩溃的常见原因。

  • 先把项目里的所有插件列出来,逐个检查它们的最新版本是否支持Flutter 1.17.x:运行flutter pub outdated查看插件版本状态
  • 优先更新那些标注为outdated的插件,尤其是涉及原生(iOS)交互的插件,比如权限、地图、媒体类的
  • 如果某个插件没有更新,尝试临时移除该插件,重新运行项目,看是否还会崩溃——如果移除后恢复正常,那就是这个插件的问题,可以考虑找替代插件或者给原仓库提Issue

2. 清理更彻底的构建缓存

你已经试过flutter clean,但有时候iOS端的缓存需要额外清理:

  • 执行flutter clean
  • 进入iOS目录,删除Pods文件夹和Podfile.lock文件:cd ios && rm -rf Pods Podfile.lock
  • 重新安装依赖:pod install
  • 打开Xcode,清理Xcode的缓存:点击菜单栏Product -> Clean Build Folder(快捷键Cmd+Shift+K
  • 重启Xcode和Flutter终端,再尝试运行项目

3. 调整Xcode的构建配置

有些情况下,Xcode的编译设置会和新版Flutter引擎冲突:

  • 打开iOS项目的Runner target,进入Build Settings
  • 找到Optimization Level,把Debug模式下的选项从Fastest, Smallest [-Os]改成None [-O0]
  • 检查Enable Bitcode是否设置为NO(新版Flutter默认关闭Bitcode,但有些老项目可能没改)
  • 尝试关闭Dead Code Stripping(Debug模式下)

4. 尝试Flutter稳定版的小版本更新

你现在用的是1.17.1,这个版本可能存在一些已知的iOS兼容性问题,可以尝试升级到同稳定版系列的后续小版本,比如1.17.5(稳定版):

  • 切换到稳定通道:flutter channel stable
  • 升级到最新稳定版:flutter upgrade
  • 重复步骤2的清理缓存操作后再运行

5. 检查Flutter引擎的本地缓存

有时候本地的Flutter引擎缓存可能损坏,导致运行异常:

  • 删除Flutter SDK的缓存目录:rm -rf ~/flutter/bin/cache
  • 重新执行flutter doctor让Flutter重新下载引擎文件
  • 再进行项目的清理和构建

如果以上方法都不行,你可以尝试在Xcode里开启调试模式,查看崩溃时的调用栈信息——具体操作是:

用Xcode打开iOS项目,点击Run按钮启动调试,当崩溃发生时,查看左侧的Debug Navigator里的调用栈,找到具体的崩溃代码位置(可能是Flutter引擎的代码,也可能是你的原生插件代码),这能帮助定位更精准的问题。

内容的提问来源于stack exchange,提问作者Bruno

火山引擎 最新活动