Flutter升级至3.16.0后iOS出现Cycle inside Runner构建错误求助
Flutter 3.16.0升级后iOS构建出现"Cycle inside Runner"错误的解决方法
问题分析
从错误日志可以看出,构建循环的核心是OneSignalNotificationServiceExtension的复制操作与Runner Target的Thin Binary、[CP] Embed Pods Frameworks脚本执行顺序冲突,导致Xcode无法解析正确的依赖链。这是Flutter 3.16.0升级后,Xcode构建阶段默认配置变化与第三方扩展(如OneSignal)不兼容引发的问题。
解决步骤
1. 调整Runner Target的构建阶段顺序
- 打开项目的
ios/Runner.xcworkspace - 选中Runner Target,切换到Build Phases标签页
- 拖拽调整脚本顺序,确保:
- Thin Binary 脚本位于 [CP] Embed Pods Frameworks 之前
- Copy Files(复制OneSignalNotificationServiceExtension.appex的步骤)位于 [CP] Embed Pods Frameworks 之后、Code Sign 之前
2. 添加扩展的目标依赖
- 在Runner Target的Build Phases中,找到Target Dependencies
- 点击
+号,添加OneSignalNotificationServiceExtension,确保Runner会等待扩展构建完成后再执行后续步骤
3. 优化Thin Binary脚本(仅真机执行)
- 打开Thin Binary脚本内容,在原代码外层添加条件判断,让脚本仅在真机构建时运行:
模拟器构建不需要二进制瘦身,这一步可以避免不必要的依赖触发。if [ "$CONFIGURATION" = "Release" ] || [ "$PLATFORM_NAME" != "iphonesimulator" ]; then # 原脚本内容保持不变 /usr/bin/xcrun lipo -remove "$ARCHS_TO_EXCLUDE" -output "$TARGET_BUILD_DIR/$INFOPLIST_PATH" "$TARGET_BUILD_DIR/$INFOPLIST_PATH" fi
4. 彻底清理后重新构建
- 执行命令清理Flutter缓存:
flutter clean - 删除iOS目录下的
Pods文件夹和Podfile.lock文件 - 更新并安装Pods:
cd ios && pod install --repo-update - 重启Xcode,清理Derived Data(路径:Xcode -> Settings -> Locations -> Derived Data,点击右侧箭头删除对应文件夹)
- 重新运行项目
5. 升级OneSignal插件(可选)
检查pubspec.yaml中的onesignal_flutter版本,升级到适配Flutter 3.16.0的最新版本,避免插件与新版本Flutter的兼容性问题。
内容的提问来源于stack exchange,提问作者Junior
相关产品推荐
相关产品推荐

