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

时间:2014-08-19 09:48:51

标签: ssh jenkins ios-simulator xcode6 xcodebuild

我似乎遇到了将Xcode6与jenkins集成的问题,我目前有这个设置并使用Xcode 5。

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

命令

xcodebuild -workspace PROJECTNAME.xcworkspace -scheme BGO_Tests -destination' platform = iOS模拟器,名称= iPhone 5s' -derivedDataPath ./Build clean test

  

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

     

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

使用最近的Xcode 6 beta 6测试

5 个答案:

答案 0 :(得分:31)

注意: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."

预先启动

我到了那里,我在那里建议的东西不再工作了。除了进行此处提到的更改之外,还需要启动模拟器xcodebuild期待 BEFORE 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>' 

旧帖子

此错误已在Xcode 6.3及更高版本中修复。如果您在较新的Xcode中遇到类似问题,则可能是另一个错误。

Apple跟进有关错误ID#18001199:

  

运行GUI不支持LaunchDaemons提供的上下文   应用。 SSH服务和Jenkins的默认设置是   两者都实现为LaunchDaemons。在早期版本的Xcode 5中   xcodebuild可以在这个上下文中运行iOS模拟器上的测试,但是   这从来都不是受支持的配置,正如您已经注意到的那样   已不再使用Xcode 6。

     

与LaunchDaemons不同,LaunchAgents提供了可以运行的上下文   GUI应用程序 - 如果用户当时使用窗口登录   服务器/ Aqua会话。从中转换Jenkins配置   成为LaunchAgent的LaunchDaemon将避免报道   问题。您还可以使用launchd在iOS模拟器上运行测试   来自SSH会话,可以通过手工制作LaunchAgent   加载/启动,或使用“launchctl submit”。

好的,经过对这里的评论的更多挖掘(非常感谢Opal),我发现通过JNLP启动奴隶可以起作用。

正如很多人提到的,目前无法通过SSH运行单元测试,因此您可能希望现在转向JNLP代理,直到Apple修复它。


如果与JNLP连接仍无法解决问题,请尝试使用此comment中提到的解决方案。

即:在命令行上运行:

  

DevToolsSecurity -enable

     

sudo dscl。 -append / Groups / _developer GroupMembership“user-that-runs-the-sim”

     

security authorizationdb write system.privilege.taskport is-developer

参见参考文献herehere

我最近发现,如果您安装新版本的Xcode并且不启动它。模拟器可能会再次开始超时。为了解决这个问题,我不得不手动启动Xcode,并安装它所要求的其他工具。

答案 1 :(得分:5)

我最终通过doing the steps here在Xcode 5上解决了这个问题,基本上是在运行:

sudo security authorizationdb write system.privilege.taskport allow

这将消除一类这些身份验证弹出窗口。你还需要运行:

sudo DevToolsSecurity -enable

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

答案 2 :(得分:3)

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

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

不幸的是,詹金斯奴隶然后安装自己 - 你猜对了它 - LaunchDaemon,导致完全相同的问题,无法启动测试; Reference

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

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

答案 3 :(得分:1)

我终于找到了一个很好的简单解决方案。 JNLP引起了我们的jenkins服务器的许多问题。

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

“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"

2016年8月2日更新 现在修复了Xcode 7.2.1(“命令行工具'xcodebuild test'将不再等待Simulator.app启动”)

答案 4 :(得分:0)

之前我见过这个错误,有一种可能性是因为你可能已经从互联网上下载了Xcode6 Beta(而不是appstore,因为它尚未提供),你试图运行它的机器会弹出一个问你是否真的想从互联网上打开这个应用程序。

当xcodebuild尝试启动iPhone模拟器应用时会发生同样的情况。

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

如果仍然无效,我会尝试:

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