【问题标题】:Reading qDebug output of Apps on ios devices from command line从命令行读取 ios 设备上应用程序的 qDebug 输出
【发布时间】:2015-11-27 02:09:21
【问题描述】:

我目前正在对运行 iOS 的设备上的 Qt 应用程序进行自动化测试。到目前为止,我能够很好地安装和运行这些应用程序,但我无法读取它们的输出。据我了解,阅读 this 问题,Qt 使用 gdb 服务器std::outstd::err 的输出传递给 Qt Creator,但我无法理解如何使用此信息。除了包标识符之外,我只获得了应用程序的 .ipa 文件。我可以访问应用程序代码,但我不能更改它。

我使用libmobiledevicelibraries 来处理所有任务,例如设备的连接、安装和执行。

总结:我想读取显示在我的控制台上的 Qt 编写的应用程序的调试输出,就像它在 “应用程序输出” 窗口中一样我的创造者。

【问题讨论】:

  • 在为 iOS 构建时,我也直接在 XCode 中运行了 qmake 生成的项目文件。所以这个问题可能更通用......并且可能是,如何在 XCode 中使用 iOS 自动化测试,或在 XCode for iOS 中重定向 std err std out。
  • 可能最简单的方法是将所有调试输出作为槽调用排队到调试接口对象中。该对象将存在于辅助线程中,并通过网络连接将调试输出发送出去。
  • @phyatt 在 XCode 中显示输出并不是我真正需要的。我想要的是从命令行访问所有提示,因为我开发了一些 python 软件来处理所有基础设施。
  • @Kuba Ober,这听起来像是一个可行的解决方案,但正如问题中所述,我无法编辑应用程序的代码库
  • 嗯,Qt Creator 带有完整的源代码。为自己构建一个副本(当然是在 Qt Creator 下),运行它,看看它在显示输出时做了什么。

标签: ios qt continuous-integration qdebug


【解决方案1】:

现在,半年后,我找到了一个既优雅又稳定的解决方案。

我使用节点安装了ios-deploy 工具:

npm install -g ios-deploy

使用它,我能够安装应用程序并通过以下方式收听它的输出:

ios-deploy --debug --bundle path/to/my.app

我收到了完整的 qDebugstd::outstd::err 输出非常好。

要卸载应用程序,我只需添加-9--uninstall_only 选项:

ios-deploy --debug --bundle path/to/my.app --uninstall_only

使用此解决方案,应用程序可以可靠启动,而不会因锁定屏幕而崩溃

【讨论】:

    【解决方案2】:

    我找到了一种使用 imobiledevice 库的方法。通过调用Idevicedebug -u <uuid> run de.foo.app,我能够执行该应用程序。 qDebug 输出提示为std::out

    由于应用程序在以锁定屏幕启动时崩溃,我必须先检查idevicediagnostics ioreg IOPower 的输出,以检查显示器是否处于空闲状态。

    【讨论】:

      猜你喜欢
      • 2013-03-30
      • 2016-11-24
      • 1970-01-01
      • 2015-08-02
      • 2013-07-07
      • 2013-02-18
      • 2013-10-01
      • 2014-11-01
      相关资源
      最近更新 更多