记录 Flutter 错误

146 阅读1分钟

1 flutter attach 无法连接到设备

出现问题版本 Flutter 3.10.0Xcode 16.3

表现 执行 flutter attach 之后

flutter attach  Waiting for your-iPhone to connect...

Waiting for a connection from Flutter on your-iPhone...

排查方法: 1 执行 flutter doctor 看是否有异常。

2 执行 flutter devices 查看可连接设备:

$ flutter devices

1 connected device:

macOS (desktop) • macos • darwin-arm64 •

发现确实没有需要连接的 iPhone,但是 xcode 却能正确发现设备。

3 执行 xcrun xcdevice list 可查看当前连接设备状态:

  {
    "ignored" : false,
    "modelCode" : "iPhone11,2",
    "simulator" : false,
    "modelName" : "iPhone XS",
    "error" : {
      "code" : -13,
      "failureReason" : "",
      "description" : "iPhone-xs is not connected",
      "recoverySuggestion" : "Xcode will continue when iPhone-xs is connected and unlocked.",
      "domain" : "com.apple.platform.iphoneos"
    },
    "operatingSystemVersion" : "16.2 (20C65)",
    "identifier" : "****** -000924663A90003A",
    "platform" : "com.apple.platform.iphoneos",
    "architecture" : "arm64e",
    "interface" : "usb",
    "available" : false,
    "name" : "有道-杨杰- iPhone-xs",
    "modelUTI" : "com.apple.iphone-xs-1"
  },
  {
    "ignored" : false,
    "modelCode" : "iPhone11,2",
    "simulator" : false,
    "modelName" : "iPhone XS",
    "operatingSystemVersion" : "18.5 (22F76)",
    "identifier" : "****** 000924663A90003A",
    "platform" : "com.apple.platform.iphoneos",
    "architecture" : "arm64e",
    "interface" : "usb",
    "available" : true,
    "name" : "xs",
    "modelUTI" : "com.apple.iphone-xs-1"
  },

此时发现有两个相同 identifier 的同一设备、一个为 available, 另一个为 error 。 搜索发现 flutter issues 中 由此 MR 点我 由于我flutter 版本低 才会有此问题。按照 mr 中的修改后,重新编译 flutter 工具即可。

看注释发现问题(flutter 解决方式为去重):

  • Xcode 15 使用了新的设备连接堆栈(可能和 CoreDevice/usbmuxd 相关),导致:

  • xcrun xcdevice list 返回同一台设备多条记录;

  • 特别是在 USB 和网络双通路共存、或者设备状态发生变化后更易复现;

  • 官方尚无提供清理命令(类似 simctl delete 模拟器),所以只能通过逻辑去重处理这些重复记录。

END