我是 iOS 编程新手。
我有一个包含一些测试的项目。我可以通过从 XCode 菜单中选择“产品”->“测试”来运行这些测试,它们在物理设备上运行良好。我还可以使用命令行中的
xcodebuild test -workspace Runner.xcworkspace -scheme Runner -configuration Debug -sdk iphoneos -destination id=<MY_SIMULATOR_DEVICE_ID>
运行这些测试。
但是,如果我将设备 ID 从模拟器设备交换到物理设备,测试似乎会开始,冻结几秒钟,然后崩溃并在终端中显示以下输出。
Testing started
2024-04-23 19:35:41.994 xcodebuild[36786:17267497] [MT] IDETestOperationsObserverDebug: 30.775 elapsed -- Testing started completed.
2024-04-23 19:35:41.994 xcodebuild[36786:17267497] [MT] IDETestOperationsObserverDebug: 0.000 sec, +0.000 sec -- start
2024-04-23 19:35:41.994 xcodebuild[36786:17267497] [MT] IDETestOperationsObserverDebug: 30.775 sec, +30.775 sec -- end
Test session results, code coverage, and logs:
/Users/<username>/Library/Developer/Xcode/DerivedData/Runner-eexstwzprjmpijhalzmikpiyqqud/Logs/Test/Test-Runner-2024.04.23_19-34-58--0300.xcresult
Testing failed:
Runner (1662) encountered an error (Early unexpected exit, operation never finished bootstrapping - no restart will be attempted. (Underlying Error: Test crashed with signal segv before starting test execution.))
系统信息:
我想知道在这两种方法之间移动时我错过了什么。谁能帮我?谢谢!
所以我自己弄清楚了。这实际上是多种因素综合作用的结果。
首先,“在 iOS 14+ 中,调试模式 Flutter 应用程序只能从 Flutter 工具、带有 Flutter 插件的 IDE 或 XCode 启动”。当我删除导致启动崩溃的一行时,我才发现了此限制,并且在应用程序启动后,我的手机上出现了一条消息告诉我这一点。我没有看到任何文档提到这一点。
这意味着,要直接在设备上运行(例如从命令行而不是 XCode),必须在发布配置中编译 Flutter 应用程序。
其次,我的应用程序启动成功,但无法输入任何文本进行自动化测试。这正是我首先尝试在调试模式下运行应用程序的原因。我遇到了 this issues tracker 并按照建议将
tester.testTextInput.register();
添加到我的测试代码中,并且成功了!
现在我可以在发布模式下从命令行直接在物理设备上运行测试。这肯定会让 CI 变得更容易!