Xcode13.1运行Swift混编Flutter项目dyld加载App.framework失败如何解决?
该报错是iOS应用启动时动态链接器找不到Flutter模块编译生成的App.framework导致的启动崩溃,和你提供的Dart业务代码、AppDelegate代码无直接关联,属于混编配置类问题。
问题诱因
- Flutter模块未生成对应运行环境的有效
App.framework:如果只编译了x86_64的模拟器架构就运行真机,或者只编译了arm64的真机架构就运行模拟器,都会导致镜像无法加载,Xcode13.1版本对架构自动匹配的支持存在缺陷,这类问题出现概率更高 - 未将
App.framework配置为嵌入签名:只在编译阶段引入了App.framework的依赖,没有把库打包到最终的应用包内,启动时就无法找到对应镜像 - Xcode缓存污染:之前编译的旧衍生数据和新的Flutter模块产出路径冲突,导致Xcode索引错误,没有把
App.framework打包进应用 - Flutter版本和Xcode13.1不兼容:2.10版本之前的Flutter对Xcode13的编译链路适配存在bug,会出现
App.framework输出路径异常的问题
排查解决步骤
- 清理全链路缓存:
- 在Flutter模块根目录执行
flutter clean,之后执行flutter build ios --debug(调试场景)或flutter build ios --release(发布场景),确认编译无报错,build目录下正常生成App.framework文件 - 打开Xcode项目,按
Command+Shift+K清理项目缓存,再按Command+Shift+Option+K清空全部衍生数据,重启Xcode后重新编译运行
- 在Flutter模块根目录执行
- 检查Framework嵌入配置:
打开Xcode项目的TARGETS配置页,进入Build Phases标签,找到「Embed Frameworks」项,确认App.framework和Flutter.framework都在列表内,且右侧Embed选项设置为Embed & Sign,如果缺失可以直接从Flutter模块的编译产物目录拖拽添加 - 检查架构匹配配置:
进入TARGETS的Build Settings标签,找到「Excluded Architectures」配置项,确认Debug模式下运行模拟器时排除arm64架构,运行真机时排除x86_64架构,和Flutter模块编译产出的架构保持一致 - 适配版本兼容:
如果以上操作都无法解决问题,将Flutter版本升级到2.10及以上的稳定版,该版本官方已完成Xcode13的全链路适配,可解决底层编译适配bug
内容的提问来源于stack exchange,提问作者yanwei
相关产品推荐
相关产品推荐

