在Xcode 6下通过SSH运行xcodebuild测试时超时



我似乎在集成Xcode6与jenkins时遇到了问题,我目前有这个设置并使用xcode5。

使用xcode 6通过SSH远程运行模拟器超时,当我在本地运行时,它成功了。

命令

xcodebuild -workspace PROJECTNAME。xcworkspace -scheme BGO_Tests -destination 'platform=iOS Simulator,name=iPhone 5s' -derivedDataPath ./Build clean test

2014-08-19 10:46:36.591 xcodebuild[33966:381f] iphone模拟器启动时超时等待120秒,当前状态为1.

测试失败:测试目标BGO_Tests遇到错误(超时等待120秒模拟器启动,当前状态为1

)

用最近的Xcode 6 beta 6测试

注意:设备名称在Xcode 7中改变了,所以你不再使用iPhone 5 (9.1 Simulator)而是使用iPhone 5 (9.1)

使用xcrun instruments -s来获取设备的当前列表,然后你可以使用:

xcrun instruments -w "iPhone 5 (9.1)" || echo "(Pre)Launched the simulator."

<标题>下水前的h1> 到达了一个点,我在那里提出的不再起作用了。除了进行这里提到的更改之外,您还需要在xcodebuild运行之前启动xcodebuild期望的模拟器:
# First get the UDID you need
xcrun instruments -s
# Then launch it
open -a "iOS Simulator" --args -CurrentDeviceUDID <sim device UDID>
# and wait some time....
sleep 5
# Then launch your unit tests
xcodebuild [...] -destination 'platform=iOS Simulator,name=<device name matching the UDID>' 
<标题>旧邮政h1> Xcode 6.3及以上版本中修复了这个错误。如果你在较新的Xcode中遇到类似的问题,很可能是另一个bug。

Apple跟进Bug ID# 18001199:

LaunchDaemons提供的上下文不支持运行GUI应用程序。SSH服务和Jenkins的默认设置如下都实现为LaunchDaemons。在Xcode 5的早期版本中在这种情况下,xcodebuild可以在iOS模拟器上运行测试这从来都不是一个受支持的配置,正如你所注意到的从Xcode 6起不再工作

与LaunchDaemons不同,LaunchAgents提供了一个可以运行的上下文GUI应用程序——如果用户在登录的时候,有一个窗口server/Aqua会话。转换你的Jenkins配置从LaunchDaemon到LaunchAgent可以避免报告的问题问题。您还可以使用laund在iOS模拟器上运行测试通过制作LaunchAgent或手动从SSH会话中获取加载/启动它,或者使用"launchctl submit。

好了,在对这里的评论进行了更多的挖掘之后(非常感谢Opal),我发现通过JNLP启动从机是有效的。

正如许多人提到的,目前还不可能在SSH上运行单元测试,所以您可能希望现在转向JNLP代理,直到Apple修复它。


如果连接JNLP仍然不能解决问题,请尝试此评论中提到的解决方案。

DevToolsSecurity启用

sudo DSCL。-append/Groups/_developer GroupMembership "user-that- running -the-sim"

security authorizationdb write system.privilege.taskport is-developer

参见参考文献。

我最近发现,如果你安装了一个新版本的Xcode,但没有启动它。模拟器可能再次开始计时。为了解决这个问题,我不得不手动启动Xcode,并安装所需的额外工具。

我最终在Xcode 5上解决了这个问题,通过执行下面的步骤,基本上是运行:

sudo security authorizationdb write system.privilege.taskport allow

这将消除一类身份验证弹出框。您还需要运行:

sudo DevToolsSecurity -enable

然而,一旦我升级到Xcode 6,我现在得到一个无限挂当试图运行xcodebuild测试通过SSH。只要我登录到控制台,并通过键盘运行它们,它们就会继续正常运行。

我遇到了同样的问题。我的工作理论是OSX上的SSH是作为LaunchDaemon启动的,LaunchDaemon不允许呈现UI;参考。

我能够通过使用Java Web Start启动Jenkins slave来解决这个问题。然后,我将Jenkins slave作为启动服务安装。

不幸的是,Jenkins奴隶然后将自己安装为-你已经猜到了- LaunchDaemon,导致无法启动测试的完全相同的问题;参考。

我通过将/System/Library/LaunchDaemons中的Jenkins Slave LaunchDaemon plist和jar文件移动到~/Library/LaunchAgents中来解决这个问题,并更新了plist文件中的路径。

最终允许我在OSX jenkins slave上运行XCode6 (Beta6)测试。

我终于找到了一个很好的简单的解决方案。JNLP导致了jenkins服务器的大量问题。

通过https://corner.squareup.com/2015/07/ios-build-infrastructure.html解决SSH超时

"Mavericks(10.9)和Yosemite(10.10)决定进程是否可以通过访问进程的父进程访问可访问性钩子。通过将launchd放在允许的进程列表中,通过SSH或Jenkins启动的进程可以访问整个系统的可访问性钩子。要做到这一点,您可以根据本文要点修改TCC数据库。需要重新启动才能使更改生效。"

#!/bin/bash
# This will add lauchd to the list of allowed processes for accessibility access
sudo sqlite3 /Library/Application Support/com.apple.TCC/TCC.db "INSERT or REPLACE INTO access VALUES('kTCCServiceAccessibility','/sbin/launchd',1,1,1,NULL)"
# This outputs the rows in the TCC database
sudo sqlite3 /Library/Application Support/com.apple.TCC/TCC.db 'select * from access'
echo "Restart is required for these changes to take effect"

更新8/02/2016 现在在Xcode 7.2.1中修复了这个问题("命令行工具' xcodebuild test '将不再超时等待模拟器。

我以前见过这个错误,一种可能性是,因为你可能从互联网下载了Xcode6测试版(不是appstore,因为它还不可用),你试图运行它的机器将显示一个弹出窗口,询问你是否真的想打开这个应用程序,因为它来自互联网。

当xcodebuild尝试启动iPhone模拟器应用程序时,也会发生相同的情况。

你可能想尝试的一件事是与机器共享屏幕,然后在弹出的窗口中点击"打开"。

如果仍然不工作,我会尝试:

  1. 重置内容&模拟器设置
  2. 重新启动机器并确保启动时没有运行模拟器(您可以选择在重新启动时不重新打开任何应用程序)

最新更新