症状:
-
在 Android Studio 或 flutter run 时出现:
Could not run build/ios/iphoneos/Runner.app on <DEVICE_ID>.
Try launching Xcode and selecting "Product > Run" to fix the problem:
open ios/Runner.xcworkspaceError launching application on <DEVICE_NAME>.
-
但是在 Xcode 里直接 Product > Run 可以正常安装并启动 App
-
这个问题同时伴随 Flutter 日志无法显示、热重载不可用(如果用 VS Code 或 flutter run attach)
根本原因:
- /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/ 目录下 缺少真机 iOS 版本对应的 DeviceSupport 文件
- Flutter CLI / Android Studio 在尝试真机部署时依赖该文件来 attach 调试服务
- 缺失时会导致 Android Studio 提示安装失败,但 Xcode 直接 run 会成功(因为 Xcode 内部可以处理调试安装)
解决方案:
-
下载真机对应 iOS 版本的 DeviceSupport 文件,例如 14.8:
- 来源:https://github.com/apptim/iPhoneOSDeviceSupport
- 将对应版本文件放入:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/
-
重启 Xcode 和真机
-
再次在 Android Studio 或命令行执行 flutter run
-
真机部署正常,同时日志和热重载功能也恢复
效果示例:
Launching lib/main.dart on longforus的iPhone8 in debug mode...
Automatically signing iOS for device deployment using specified development team in Xcode project: LK85L26J8M
Running Xcode build...
Xcode build done. 11.2s
Installing and launching...
The Dart VM Service was not discovered after 30 seconds. This is taking much longer than expected...
Debug service listening on ws://127.0.0.1:49866/PAclZr3UDQc=/ws
Syncing files to device longforus的iPhone8...
[GETX] Instance "DBService" has been created
[GETX] Instance "DBService" has been initialized
[GETX] Instance "GlobalService" has been created
[GETX] Instance "GlobalService" has been initialized