使用 XCode 菜单与使用“xcodebuild test”命令行进行 iOS 单元测试

问题描述 投票:0回答:1

我是 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.))

系统信息:

  • macOS 索诺玛 14.4.1
  • XCode 15.3
  • 运行 iOS 17.4.1 的 iPhone 13 Pro

我想知道在这两种方法之间移动时我错过了什么。谁能帮我?谢谢!

ios flutter xcode
1个回答
0
投票

所以我自己弄清楚了。这实际上是多种因素综合作用的结果。

首先,“在 iOS 14+ 中,调试模式 Flutter 应用程序只能从 Flutter 工具、带有 Flutter 插件的 IDE 或 XCode 启动”。当我删除导致启动崩溃的一行时,我才发现了此限制,并且在应用程序启动后,我的手机上出现了一条消息告诉我这一点。我没有看到任何文档提到这一点。

这意味着,要直接在设备上运行(例如从命令行而不是 XCode),必须在发布配置中编译 Flutter 应用程序。

其次,我的应用程序启动成功,但无法输入任何文本进行自动化测试。这正是我首先尝试在调试模式下运行应用程序的原因。我遇到了 this issues tracker 并按照建议将

tester.testTextInput.register();
添加到我的测试代码中,并且成功了!

现在我可以在发布模式下从命令行直接在物理设备上运行测试。这肯定会让 CI 变得更容易!

© www.soinside.com 2019 - 2024. All rights reserved.