如何配置 Xcode `simctl launch` 命令超时?

How can I configure the Xcode `simctl launch` command timeout?

当我 运行 simctl launch 命令在 iOS 模拟器中启动应用程序时,应用程序可能会或可能不会出现,具体取决于 iOS 模拟器一起行动。以下观察结果使我相信涉及某种超时,但从有限的 simctl 文档中看不出超时是什么以及如何控制它。

启动应用程序时,如果应用程序在 35-90 秒内未启动,则可能无法启动(iOS 模拟器进入主屏幕)。但是,如果应用程序设法在 20 秒内启动,它总会出现。

如果第一次启动失败,相同的应用程序、相同的机器、相同的命令通常会在第 2 次或第 3 次尝试时成功,因为 'warm up' 需要这样做。

我猜超时时间大概是 30 秒。如何将其设置为更大的值?

更新:

这是我们的确切事件顺序:

  1. 如果设备已关闭,请启动它 (simctl boot ...) 并等待状态在 simctl list
  2. 中更改为已启动
  3. 卸载应用程序(simctl uninstall ...
  4. 安装应用程序(simctl install ...
  5. 关闭设备 (simctl shutdown ...) 并等待它关闭
  6. 启动iOS模拟器(open -a "<path to simulator> --args -CurrentDeviceUDID <device id>)
  7. 等待设备达到已启动状态
  8. 启动应用程序(simctl launch ...

最后一步并不总是成功。没有错误,只是应用程序没有出现。

无法将超时配置为高于 30 秒。对于我们超时的问题(等待系统应用程序签入),30 秒已经非常高了。假设设备已经启动,那应该不是问题。


更新:

根据更新后的问题,现在很清楚设备是通过 'simctl boot' 而不是 iOS 模拟器启动的。目前,如果您从命令行启动设备,它只能用于非 UI 工作(例如:单元测试),因为该设备被配置为没有连接头。如果您尝试在此状态下启动应用程序,您将收到错误消息,因为系统应用程序无法响应启动请求。我怀疑您可能想做一些我在对 Xcode 6 - Launch simulator from command line

的回答中描述的事情
open -a "iOS Simulator" --args -CurrentDeviceUDID <DEVICE UDID>
simctl install ...
simctl launch ...

换句话说,从第 5 步开始。

如果 iOS 模拟器已经是 运行,您必须从 iOS 模拟器 GUI 切换到另一个设备(或终止进程并使用命令行参数重新启动它如上)。

如果问题发生在没有使用 'simctl boot' 的情况下,请更新。

在我们将硬件升级到带有 SSD 驱动器的设备之前,我们一直遇到这些问题。与 iPhoto 类似... iOS Simulator 可以在具有传统硬盘驱动器的计算机上使用。这似乎是一种方法,如何迫使开发人员购买新硬件,即使旧硬件仍然可以正常工作。