You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加WatchOS应用后Xcode运行Flutter应用遇Runner循环依赖错误

Flutter添加WatchOS应用后Xcode循环依赖错误解决方法

问题场景

给Flutter应用添加WatchOS应用后,Xcode运行时触发Runner目标内部循环依赖错误,导致无法构建运行,核心错误信息如下:

Target 'Runner' 存在从'/Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/chargeExtension.appex'到'/Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/Runner.app/PlugIns/chargeExtension.appex'的复制命令
○ 该命令依赖Target 'Runner'中的脚本阶段“[CP] Copy Pods Resources”
○ 该命令依赖Target 'Runner'中的脚本阶段“[CP] Embed Pods Frameworks”
○ 该命令依赖Target 'Runner'中的脚本阶段“Thin Binary”
○ Target 'Runner'存在输出为'/Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/Runner.app/Info.plist'的处理命令
○ Target 'Runner'存在从'/Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/chargeExtension.appex'到'/Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/Runner.app/PlugIns/chargeExtension.appex'的复制命令

原始依赖循环追踪:

target:  ->
node:  ->
command:  ->
node: /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Intermediates.noindex/Runner.build/Debug-iphonesimulator/Runner.build/Objects-normal/arm64/ExtractedAppShortcutsMetadata.stringsdata ->
command: P0:target-Runner-18c1723432283e0cc55f10a6dcfd9e0288a783a885d8b0b3beb2e9f90bde3f49-:Debug:ExtractAppIntentsMetadata ->
node:  ->
command: P0:::Gate target-Runner-18c1723432283e0cc55f10a6dcfd9e0288a783a885d8b0b3beb2e9f90bde3f49--fused-phase9-copy-files ->
node: <Copy /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/Runner.app/Watch/zeon_watch Watch App.app> ->
command: P0:target-Runner-18c1723432283e0cc55f10a6dcfd9e0288a783a885d8b0b3beb2e9f90bde3f49-:Debug:Copy /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/Runner.app/Watch/zeon_watch Watch App.app /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-watchsimulator/zeon_watch Watch App.app ->
node:  ->
command: P0:::Gate target-Runner-18c1723432283e0cc55f10a6dcfd9e0288a783a885d8b0b3beb2e9f90bde3f49--fused-phase8-copy-files ->
node: <Copy /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/Runner.app/PlugIns/chargeExtension.appex> ->
CYCLE POINT ->
command: P0:target-Runner-18c1723432283e0cc55f10a6dcfd9e0288a783a885d8b0b3beb2e9f90bde3f49-:Debug:Copy /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/Runner.app/PlugIns/chargeExtension.appex /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/chargeExtension.appex ->
node:  ->
command: P0:::Gate target-Runner-18c1723432283e0cc55f10a6dcfd9e0288a783a885d8b0b3beb2e9f90bde3f49--fused-phase7--cp--copy-pods-resources ->
node: /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/Runner.app/GoogleMapsResources.bundle ->
command: P2:target-Runner-18c1723432283e0cc55f10a6dcfd9e0288a783a885d8b0b3beb2e9f90bde3f49-:Debug:PhaseScriptExecution [CP] Copy Pods Resources /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Intermediates.noindex/Runner.build/Debug-iphonesimulator/Runner.build/Script-7A31133EF4437D7DDEFFA042.sh ->
node:  ->
command: P0:::Gate target-Runner-18c1723432283e0cc55f10a6dcfd9e0288a783a885d8b0b3beb2e9f90bde3f49--fused-phase6--cp--embed-pods-frameworks ->
node: /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/Runner.app/Frameworks/AppInvokeSDK.framework ->
command: P2:target-Runner-18c1723432283e0cc55f10a6dcfd9e0288a783a885d8b0b3beb2e9f90bde3f49-:Debug:PhaseScriptExecution [CP] Embed Pods Frameworks /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Intermediates.noindex/Runner.build/Debug-iphonesimulator/Runner.build/Script-3496F4E0C3D5FD3F1DAB8BC7.sh ->
node:  ->
command: P0:::Gate target-Runner-18c1723432283e0cc55f10a6dcfd9e0288a783a885d8b0b3beb2e9f90bde3f49--fused-phase5-thin-binary ->
node:  ->
command: P2:target-Runner-18c1723432283e0cc55f10a6dcfd9e0288a783a885d8b0b3beb2e9f90bde3f49-:Debug:PhaseScriptExecution Thin Binary /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Intermediates.noindex/Runner.build/Debug-iphonesimulator/Runner.build/Script-3B06AD1E1E4923F5004D2608.sh ->
node: /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/Runner.app/Info.plist/ ->
directoryTreeSignature: � ->
directoryContents: /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/Runner.app/Info.plist ->
node: /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/Runner.app/Info.plist ->
command: P0:target-Runner-18c1723432283e0cc55f10a6dcfd9e0288a783a885d8b0b3beb2e9f90bde3f49-:Debug:ProcessInfoPlistFile /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/Runner.app/Info.plist /Users/ragulpr/Steam-A/zeon/ev-flutter/ios/Runner/Info.plist ->
node: /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/Runner.app/PlugIns/chargeExtension.appex ->
command: P0:target-Runner-18c1723432283e0cc55f10a6dcfd9e0288a783a885d8b0b3beb2e9f90bde3f49-:Debug:Copy /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/Runner.app/PlugIns/chargeExtension.appex /Users/ragulpr/Library/Developer/Xcode/DerivedData/Runner-dubuyvxkrtxsotfiyerxmyrtvdpv/Build/Products/Debug-iphonesimulator/chargeExtension.appex

构建阶段顺序截图:
构建阶段顺序

解决方法

1. 移除重复的复制命令

  • 打开Xcode,选中Runner目标,进入Build Phases标签页
  • 查找所有涉及chargeExtension.appex的复制命令,删除反向复制的条目(仅保留将chargeExtension.appex复制到Runner.app/PlugIns/的命令)

2. 调整构建阶段顺序

确保构建阶段按以下标准顺序排列:

  • Dependencies
  • Compile Sources
  • Link Binary With Libraries
  • Copy Bundle Resources
  • [CP] Embed Pods Frameworks
  • [CP] Copy Pods Resources
  • Thin Binary
  • Embed App Extensions(若存在)
  • Embed Watch Content

3. 清理构建缓存

  • 执行Product > Clean Build Folder(快捷键Cmd+Shift+K)
  • 删除DerivedData目录:终端运行rm -rf ~/Library/Developer/Xcode/DerivedData
  • 进入ios目录执行pod install

4. 检查WatchOS目标配置

  • 确保WatchOS应用目标不依赖Runner的扩展,反之亦然
  • 确认Runner的Embed Watch Content阶段仅包含WatchOS应用,未错误引入扩展文件

5. 验证Info.plist配置

  • 检查Runner的Info.plist是否存在对chargeExtension.appex的重复引用
  • 确保扩展的NSExtension配置仅在自身Info.plist中定义

内容的提问来源于stack exchange,提问作者Ragul PR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:14:50