Xcode 13.2.1运行Flutter iOS应用报No such module 'Flutter'如何修复
iOS扩展Target编译报错
No such module 'Flutter'修复方案 匹配环境
- Xcode Version 13.2.1 (13C100)
- Flutter SDK: 2.10.5
- Dart: 2.16.2
- Mac 处理器:Intel Core i7
操作步骤
- 先清理全量编译缓存,终端进入项目根目录依次执行以下命令:
flutter clean flutter pub get cd ios pod deintegrate pod install --repo-update - 执行完命令后,用Xcode打开
ios/Runner.xcworkspace(注意必须打开xcworkspace后缀的工作区文件,不要打开xcodeproj后缀的项目文件),选中报错的扩展Target,打开Build Settings标签页修改以下配置:- 找到
Framework Search Paths配置项,新增路径$(SRCROOT)/Flutter,设置搜索规则为recursive,同时在路径列表最顶部添加$(inherited),保证继承项目层级的路径配置 - 找到
Other Linker Flags配置项,新增$(inherited)和-framework Flutter两个参数 - 找到
Build Active Architecture Only配置项,Debug模式设置为Yes,Release模式配置和主Runner Target保持一致,避免Intel架构下编译架构不匹配 - 找到
iOS Deployment Target配置项,设置的最低系统版本必须和主Runner Target完全一致,不可高于主Target版本
- 找到
- 切换到同Target下的
Build Phases标签页,做以下检查和修改:- 展开
Link Binary With Libraries列表,如果存在手动导入的错误路径Flutter.framework,先选中删除 - 点击标签页左上角的+号,选择
New Run Script Phase新建编译脚本,把新建的脚本拖到所有编译步骤的最前面,粘贴以下脚本内容:/bin/sh "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build - 展开新建脚本的
Input Files列表,新增路径$(SRCROOT)/Flutter/Flutter.framework,避免重复触发Flutter编译 - 禁止在扩展Target的Embed Frameworks步骤中添加Flutter.framework:iOS扩展不允许嵌套嵌入动态框架,直接嵌入会触发后续签名、符号重复报错,Flutter.framework只需要在主Runner Target的Embed Frameworks中配置即可
- 展开
- 回到主Runner Target的
Build Phases标签页,展开Embed Frameworks列表,确认Flutter.framework已在列表中,且勾选了Copy only when installing选项
踩坑提示:Flutter 2.10.5版本默认生成的Podfile不会自动为扩展Target关联Flutter依赖,不要手动在Podfile的扩展Target块中调用
flutter_additional_pods方法,会导致编译时符号冲突。
内容的提问来源于stack exchange,提问作者Saad Aboulsooud Abdelmoaty Ali
相关产品推荐
相关产品推荐

