1 flutter attach 无法连接到设备
出现问题版本 Flutter 3.10.0、 Xcode 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