升级Xcode至14.3后Flutter运行出现Thread 1: EXC_BAD_ACCESS错误
问题描述
将Xcode从13.4.1升级到14.3后,运行Flutter应用时,在SharedPreferencesPlugin的registrar.messenger()调用处触发以下异常:
Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)
使用的插件版本为:
shared_preferences: ^2.0.12
问题原因
Xcode 14.3对Objective-C的API调用规则做了调整,旧版本的shared_preferences插件使用的点语法调用registrar.messenger()在新环境下会导致空指针访问,触发崩溃。
修复方案
方案一:升级插件版本(推荐)
- 修改
pubspec.yaml中的依赖,将shared_preferences版本更新到2.2.0及以上:shared_preferences: ^2.2.2 - 执行命令更新依赖:
flutter pub get
方案二:清理重建项目
完成版本升级后,执行以下步骤确保缓存清理干净:
- 清理Flutter项目缓存:
flutter clean - 进入iOS目录更新Pods:
cd ios pod install --repo-update cd .. - 重新运行项目:
flutter run
方案三:临时修改原生代码(不推荐)
如果暂时无法升级插件,可以手动修改iOS原生代码应急(注意:每次执行pod install后需要重新修改):
找到Pods/Target Support Files/shared_preferences/shared_preferences-dummy.m文件,将registrar.messenger()替换为Objective-C消息发送语法[registrar messenger]。
验证
重新运行应用后,检查是否仍出现EXC_BAD_ACCESS异常,同时测试SharedPreferences的读写功能是否正常。
内容的提问来源于stack exchange,提问作者Pedro Rodrigues Dantas Neto
相关产品推荐
相关产品推荐

