添加ObjectBox依赖后Codemagic iOS构建生成Sourcery.app而非Runner.app的问题
问题:ObjectBox依赖导致Codemagic iOS构建产出Sourcery.app而非Runner.app
在Flutter/Dart项目中使用ObjectBox时,按照文档要求引入objectbox_flutter_libs(或objectbox_sync_flutter_libs)依赖后,Codemagic的iOS构建产物变成了Sourcery.app,而非预期的Runner.app,导致无法调试安装。构建过程中会安装ObjectBox 1.9.0并创建sourcery.app目录,但日志中Runner.app的配置未变更,重命名或替换文件内容也无法解决安装问题。
基本信息
- ObjectBox版本:^2.3.1
- Flutter/Dart SDK:Flutter 3.13.7 • Dart 3.1.3
- 可复现性:添加
objectbox_flutter_libs或objectbox_sync_flutter_libs依赖必现 - 构建系统:macOS M1标准虚拟机
复现步骤
- 在pubspec.yaml中添加
objectbox依赖 - 添加
objectbox_flutter_libs/objectbox_sync_flutter_libs依赖 - 运行ObjectBox生成器,执行
flutter pub get - 启动Codemagic iOS构建
Codemagic工作流配置
- 默认工作流,构建目标:iOS
- 机器:Mac mini M1
- Flutter通道:stable,构建模式:profile(无风味)
- Xcode版本:15(最新),CocoaPods版本:默认
- 无自定义脚本、环境变量,依赖缓存已禁用,分发全部禁用
问题原因分析
objectbox_flutter_libs依赖内部集成了Sourcery代码生成工具,在Xcode 15的构建环境中,构建系统误将Sourcery的目标识别为主产物,覆盖了Flutter默认的Runner目标优先级。- ObjectBox 1.9.0的依赖引入了额外的Xcode目标配置,与Flutter项目的Runner.target产生冲突,导致Codemagic的自动构建流程选择了错误的打包目标。
解决方法
1. 强制指定Xcode构建目标(构建前脚本)
在Codemagic的构建前脚本中添加以下命令,直接指定构建Runner目标:
cd ios xcodebuild -workspace Runner.xcworkspace -scheme Runner -configuration Profile build
2. 调整ObjectBox依赖版本
尝试降级或升级ObjectBox到兼容性更好的版本,比如:
dependencies: objectbox: ^2.2.0 objectbox_flutter_libs: ^2.2.0
执行flutter pub get后重新触发构建。
3. 修改iOS项目Xcode配置
打开iOS目录下的Runner.xcworkspace,手动调整Xcode配置:
- 选中项目文件,进入Build Settings,确保
Product Name设置为Runner - 在Targets列表中移除Sourcery相关的目标(若存在)
- 将Runner设置为默认的构建目标
4. 直接调用Flutter构建命令
在Codemagic的构建前脚本中,用Flutter命令替代自动Xcode构建:
flutter build ios --profile --no-codesign
强制通过Flutter构建流程生成Runner.app,避免Xcode自动选择错误目标。
内容的提问来源于stack exchange,提问作者Alex Yaroshuk
相关产品推荐
相关产品推荐

