【问题标题】:How can I configure the Xcode `simctl launch` command timeout?如何配置 Xcode `simctl launch` 命令超时?
【发布时间】:2015-03-26 16:48:17
【问题描述】:

当我运行simctl launch 命令在 iOS 模拟器中启动应用程序时,该应用程序可能会或可能不会出现,这取决于 iOS 模拟器需要多长时间才能完成它的动作。以下观察结果使我相信存在某种超时,但从有限的 simctl 文档中看不出该超时是什么以及如何控制它。

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

如果第一次启动失败,相同的应用程序、相同的机器、相同的命令通常会在第二次或第三次尝试时成功,因为任何需要“预热”的东西都会这样做。

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

更新

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

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

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

【问题讨论】:

  • 定义“iOS Simulator 一起行动”。此外,请更具体地说明您的用户案例以及您遇到的确切错误。
  • @JeremyHuddlestonSequoia,感谢您对超时的明确答复!我添加了启动模拟器的步骤,有什么遗漏吗?
  • 是的,这就是缺少的信息。请参阅我的更新答案。

标签: xcode xcode6 ios-simulator


【解决方案1】:

无法将超时时间配置为高于 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”的情况下,请更新。

【讨论】:

  • 嗯,我有一个使用 2012 Mac Mini(8Gb RAM,机器上没有其他任何东西)的用户经常遇到这个限制。我们的代码检查会在尝试启动应用程序之前等待设备状态启动。我们还有什么需要等待的吗?
  • 好吧,我们在步骤 1-4 中所做的只是更新应用程序,所以听起来应该不会有什么不同,但是我会将这些步骤移到步骤 5 之后,让您知道有没有变化。再次感谢!
  • 通过重启解决了这个问题。去搞清楚!无论如何,感谢您的帮助,并确认 30 秒超时。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 2016-12-27
    相关资源
    最近更新 更多