Flutter iOS模拟器运行报错:Runner存在循环依赖,构建结果不可靠
解决Flutter iOS模拟器运行时Xcode循环依赖错误(Cycle inside Runner)
问题重现
运行带Widget Extension的Flutter iOS项目时,Xcode抛出循环依赖错误:
Error (Xcode): Cycle inside Runner; building could produce unreliable results. Cycle details: → Target 'Runner': CodeSign /Users/asmaalkhaldi/Desktop/Brmjha/tajiduh-1/build/ios/Debug-iphonesimulator/Runner.app ○ That command depends on command in Target 'Runner': script phase “[CP] Embed Pods Frameworks” ○ Target 'Runner' has copy command from '/Users/asmaalkhaldi/Desktop/Brmjha/tajiduh-1/build/ios/Debug-iphonesimulator/AthkarWidgetExtension.appex' to '/Users/asmaalkhaldi/Desktop/Brmjha/tajiduh-1/build/ios/Debug-iphonesimulator/Runner.app/PlugIns/AthkarWidgetExtension.appex' ○ That command depends on command in Target 'Runner': script phase “Thin Binary” ○ Target 'Runner' has process command with output '/Users/asmaalkhaldi/Desktop/Brmjha/tajiduh-1/build/ios/Debug-iphonesimulator/Runner.app/Info.plist' ○ Target 'Runner' has copy command from '/Users/asmaalkhaldi/Desktop/Brmjha/tajiduh-1/build/ios/Debug-iphonesimulator/AthkarWidgetExtension.appex' to '/Users/asmaalkhaldi/Desktop/Brmjha/tajiduh-1/build/ios/Debug-iphonesimulator/Runner.app/PlugIns/AthkarWidgetExtension.appex' 2 command: P0:target-Runner-18c1723432283e0cc55f10a6dcfd9e0288a783a885d8b0b3beb2e9f90bde3f49-:Debug:Copy /Users/asmaalkhaldi/Desktop/Brmjha/tajiduh-1/build/ios/Debug-iphonesimulator/Runner.app/PlugIns/AthkarWidgetExtension.appex /Users/asmaalkhaldi/Desktop/Brmjha/tajiduh-1/build/ios/Debug-iphonesimulator/AthkarWidgetExtension.appex
调整Embed Pods Frameworks至Run Script上方后问题仍存在。
解决方案
1. 调整Widget Extension复制步骤的执行顺序
打开Xcode,进入Runner target的Build Phases标签:
- 找到复制
AthkarWidgetExtension.appex的Copy Files阶段(目标路径为PlugIns) - 将该阶段拖拽到
[CP] Embed Pods Frameworks和Thin Binary两个脚本阶段之前 - 保存配置后重新编译
2. 修改Widget Extension的构建设置
进入AthkarWidgetExtension target的Build Settings标签:
- 搜索
Skip Install选项,将其值设置为YES - 该设置会避免Extension产物被重复复制,打破依赖循环链
3. 清理构建缓存
执行以下命令彻底清理Flutter和Xcode的构建缓存:
flutter clean cd ios pod deintegrate pod install cd ..
清理完成后重启Xcode,重新运行项目。
4. 检查Info.plist处理逻辑
若项目中有自定义处理Info.plist的脚本,需确认该脚本的执行顺序不会与Extension复制步骤形成依赖闭环,必要时调整其在Build Phases中的位置。
错误原因
该循环依赖由Runner target内的多个操作互相依赖导致:复制Widget Extension的操作依赖Thin Binary脚本,而CodeSign操作又依赖Embed Pods Frameworks脚本,同时Info.plist的处理逻辑又与这些步骤形成了闭环,导致Xcode无法确定正确的执行顺序。
内容的提问来源于stack exchange,提问作者asma alkhaldi
相关产品推荐
相关产品推荐

