启动模拟器时 xcodebuild 超时

Posted

技术标签:

【中文标题】启动模拟器时 xcodebuild 超时【英文标题】:xcodebuild times out when starting simulator 【发布时间】:2017-06-07 11:33:27 【问题描述】:

我正在尝试使用 TeamCity 为我的 ios 应用设置自动化测试。目前,我的代理正在构建,但一旦构建最后一个目标并运行代码设计,它就会挂起并显示以下内容:

[19:29:34][CodeSign] CodeSign /var/root/Library/Developer/Xcode/DerivedData/MyProductiOS-fgkoogiimhlbckdlbckzmqfyaoff/Build/Products/Debug-iphonesimulator/MyProductiOSUITests-Runner.app/PlugIns/MyProductiOSUITests.xctest
[19:29:34][CodeSign]     cd /Users/ericmiller/.tcagent/work/f9abef315a0137d4
[19:29:34][CodeSign]     export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate
[19:29:34][CodeSign]     export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/Users/ericmiller/.pyenv/shims:/Users/ericmiller/.rbenv/shims:/Users/ericmiller/.pyenv/shims:/Users/ericmiller/Scripts:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/opt/local/bin"
[19:29:34][CodeSign] Signing Identity:     "-"
[19:29:34][CodeSign]     /usr/bin/codesign --force --sign - --timestamp=none /var/root/Library/Developer/Xcode/DerivedData/MyProductiOS-fgkoogiimhlbckdlbckzmqfyaoff/Build/Products/Debug-iphonesimulator/MyProductiOSUITests-Runner.app/PlugIns/MyProductiOSUITests.xctest
[19:29:34][CodeSign] /var/root/Library/Developer/Xcode/DerivedData/MyProductiOS-fgkoogiimhlbckdlbckzmqfyaoff/Build/Products/Debug-iphonesimulator/MyProductiOSUITests-Runner.app/PlugIns/MyProductiOSUITests.xctest: replacing existing signature
[19:31:32][CodeSign] 2017-01-22 19:31:32.279 xcodebuild[28262:86807]  iOSSimulator: Timed out waiting 120 seconds for simulator to boot, current state is 1.
[19:31:32][CodeSign] 2017-01-22 19:31:32.290 xcodebuild[28262:86805]  iOSSimulator: Timed out waiting 120 seconds for simulator to boot, current state is 1.
[19:31:32][CodeSign] 2017-01-22 19:31:32.291 xcodebuild[28262:86797] Error Domain=IDETestOperationsObserverErrorDomain Code=3 "Timed out waiting 120 seconds for simulator to boot, current state is 1. If you believe this error represents a bug, please attach the log file at /var/root/Library/Developer/Xcode/DerivedData/MyProductiOS-fgkoogiimhlbckdlbckzmqfyaoff/Logs/Test/89F7C786-9E91-419F-98CA-F36385618DC2/Session-MyProductiOSTests-2017-01-22_192932-E95vcV.log" UserInfo=NSLocalizedDescription=Timed out waiting 120 seconds for simulator to boot, current state is 1. If you believe this error represents a bug, please attach the log file at /var/root/Library/Developer/Xcode/DerivedData/MyProductiOS-fgkoogiimhlbckdlbckzmqfyaoff/Logs/Test/89F7C786-9E91-419F-98CA-F36385618DC2/Session-MyProductiOSTests-2017-01-22_192932-E95vcV.log
[19:31:32][CodeSign] 2017-01-22 19:31:32.291 xcodebuild[28262:86797] Error Domain=IDETestOperationsObserverErrorDomain Code=3 "Timed out waiting 120 seconds for simulator to boot, current state is 1. If you believe this error represents a bug, please attach the log file at /var/root/Library/Developer/Xcode/DerivedData/MyProductiOS-fgkoogiimhlbckdlbckzmqfyaoff/Logs/Test/89F7C786-9E91-419F-98CA-F36385618DC2/Session-MyProductiOSUITests-2017-01-22_192932-mrX7wQ.log" UserInfo=NSLocalizedDescription=Timed out waiting 120 seconds for simulator to boot, current state is 1. If you believe this error represents a bug, please attach the log file at /var/root/Library/Developer/Xcode/DerivedData/MyProductiOS-fgkoogiimhlbckdlbckzmqfyaoff/Logs/Test/89F7C786-9E91-419F-98CA-F36385618DC2/Session-MyProductiOSUITests-2017-01-22_192932-mrX7wQ.log

模拟器应用在 Dock 中打开。单击模拟器没有任何作用,但如果我右键单击并选择窗口,我可以看到模拟器确实在运行但没有显示任何内容。 Example

我正在寻找一种解决方法来测试我的代码,尽可能不要切换到物理设备而不是模拟器。我怎样才能实现这个目标,我的配置可能有什么问题?

编辑:

Sven Driemecker 找到了解决方案。这是我的配置。 在运行 xcodebuild 之前,我运行以下 shell 脚本以确保测试环境卫生。

xcrun simctl shutdown %env.simulator_guid%
killall Simulator
killall com.apple.CoreSimulator.CoreSimulatorService
xcrun simctl erase %env.simulator_guid%

然后,在运行 xcodebuild 时,添加以下选项:

-destination "id=%env.simulator_guid%"

最后,清理一切:

xcrun simctl shutdown %env.simulator_guid%
killall Simulator
killall com.apple.CoreSimulator.CoreSimulatorService

更新:这是一个blog post I wrote,关于如何为 XCode/iOS 设置基本的 TeamCity CI。

【问题讨论】:

请归档雷达并包含 sysdiagnose -q 的输出和来自 ~/Library/Logs/CoreSimulator 的日志。 【参考方案1】:

尝试从 Xcode 11.3.1 在模拟器中运行 iOS 应用程序时,我遇到了类似的错误。我发现重新选择虚拟硬件可以比本页中提到的其他解决方案更快地解决此问题。

当我在 Xcode 中收到 “等待 Simulator.app 准备就绪时超时” 错误时,Simulator.app 通常已启动,但没有显示实际的模拟器。选择 Hardware > Device > [OS version] -> [Simulator Name] 会导致模拟器出现并在下次尝试运行时成功启动我的应用程序。

【讨论】:

在 Xcode 11.4 中,模拟器菜单项已移至 File > Open Device > [OS version] -> [Simulator Name] 很好的描述。我们能否确定这个问题是否仅限于某些系统?我只在莫哈韦看到这个。 @matt 每次在 macOS 10.15.3 和 Xcode 11.3.1 上重新启动后,我都能可靠地看到这个问题(我想这是一个常见的配置)。我的设置唯一新颖的地方是我删除了所有股票模拟器,随后使用“设备和模拟器”窗口创建了一个 iPhone 11 iOS 13.3 模拟器(没有配对手表)。 我遇到了类似的问题。我最终通过从模拟设备中手动删除应用程序来解决它。之后模拟器就可以正常开始调试了。 这个问题似乎是resolved in Xcode 11.5 修复了 Xcode 有时无法在模拟设备中运行应用程序的一些问题,并出现错误“等待 Simulator.app 变为超时”准备好了”。【参考方案2】:

这看起来很奇怪,但简单地重置模拟器通常可以解决这个问题。我们经常在自己的 CI 系统上遇到同样的错误。

尝试模拟器-菜单 -> 重置内容和设置,然后重新启动模拟器。

您可以在命令行上强制执行此操作,但我不建议这样做,因为它会显着减慢您的构建速度。

【讨论】:

哇!谢谢!这非常有效。我将准确地更新我的帖子以帮助任何未来的访问者。 不客气!您在 cmd 行上的自动模拟器清理看起来与我们前段时间尝试的非常相似,但我们遇到了主要的性能问题。很高兴听到您的方法似乎很快。也想试试! 它并没有我最初想象的那么快。它使我的构建时间增加了 4 分钟。但是,这对于这个项目是可以接受的,因为我是唯一的开发人员,并且构建机器的注意力是一体的。此外,由于我已经自动化了 Carthage,它无论如何都在构建一堆东西。它也是一台相对较慢的机器,最低规格为 2011MBP(尽管配备 8G RAM 和 SSD)。 顺便说一句,我写了一篇关于为 iOS XCode 项目设置 TeamCity CI 的入门教程。您似乎知识渊博,以至于您不需要它,但是如果您认识这样做的人,可能会很好地传递下去。此外,这样任何访问该线程的人都可以找到它。 sosheskaz.github.io/2017/03/07/XCode-CI-Article.html 很棒的文章,以前从未使用过 TeamCity 来支持 Hudson/Jenkins。很快就会试一试。【参考方案3】:

如果您从另一个 Xcode 运行 Simulator.app,Xcode 11.3 及更早版本中存在一个错误,可能会以这种方式表现出来。有一个小的比赛窗口可能会发生这种情况。这已在 Xcode 11.3.1 中修复。

但是……

Xcode 11.3.1 及更高版本(截至本评论的 Xcode 11.4.1)中存在一个错误,它也以这种方式表现出来。要解决此问题,您可以在 Dock 启动后单击 Simulator.app(即使它是前台)。或者,您可以通过“编辑 -> 自动同步粘贴板”在 Simulator.app 中启用粘贴板同步。

【讨论】:

哇,我从来没有猜到自动粘贴板同步的东西,这对我有用。 是的,在启动时初始化粘贴板同步时出现故障,导致应用程序处于尴尬状态。它已在 Xcode 11.5+ 中修复。 谢谢您,先生! “自动同步粘贴板”也为我解决了这个问题。【参考方案4】:

我还没有找到解决此问题根本原因的好方法,但我找到了解决方法。如果您只是在 Xcode 中构建应用程序之前打开模拟器,则可以绕过此问题。

【讨论】:

【参考方案5】:

只是杀死重新打开模拟器对我有用。

【讨论】:

【参考方案6】:

您也可以查看模拟器应用的Window 菜单。

可能有一个或多个模拟器窗口被标记为使用[External Display]。当您从菜单中选择一个窗口时,不会出现任何内容,但是您可以按Cmd-W 将其关闭。

使用外接显示器关闭所有窗口后,模拟器将再次开始正常工作。

我不确定如何为模拟器选择外接显示器,但这种情况发生在我身上几次,只是退出模拟器应用程序并没有帮助。我必须按照上面的描述进行操作,或者重新启动机器。

【讨论】:

以上是关于启动模拟器时 xcodebuild 超时的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 9:xcodebuild -exportArchive 错误读取文件:info.plist

带有参数的 xcode 命令行测试在启动时传递

如果使用模拟器,从 Xcode 和 xcodebuild 运行 xctests 会失败 - dyld:未加载库:@rpath/libswiftSwiftOnoneSupport.dylib 问题 -

自动化 Xcode 模拟器:如何从终端构建和启动应用程序

将 xcodebuild 与 iOS 项目和 iOS 模拟器一起使用

升级到xcode模拟器无法响应,打不开修复iOS模拟器无法启动