在Xcode 6下通过SSH运行xcodebuildtesting时超时

我似乎有问题与jenkins集成Xcode6,我目前有这个设置和Xcode 5的工作。

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

命令

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] iPhoneSimulator:超过120秒等待模拟器启动,当前状态为1。

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

testing了最近的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." 

预先启动

我得到了一个点,我在那里提出的没有工作了。 除了在这里提到的变化,你需要启动模拟器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>' 

旧post

这个bug在Xcode 6.3及以上版本中已经修复。 如果你在更新的Xcode中遇到类似的问题,这可能是另一个bug。

苹果跟进关于错误ID#18001199:

运行GUI应用程序不支持LaunchDaemons提供的上下文。 SSH服务和Jenkins的默认设置都是以LaunchDaemons的forms实现的。 在Xcode 5的早期版本中,xcodebuild可以在这个上下文中的iOS模拟器上运行testing,但是这从来不是受支持的configuration,正如你已经注意到的,它不再是Xcode 6的工作。

与LaunchDaemons不同,LaunchAgents提供了一个可以运行GUI应用程序的上下文 – 如果用户在当时login,则使用窗口服务器/ Aqua会话。 将Jenkinsconfiguration从LaunchDaemon转换为LaunchAgent将避免报告的问题。 您还可以使用launchd从SSH会话在iOS模拟器上运行testing,可以通过制作LaunchAgent并手动加载/启动,或使用“launchctl submit”。

好了,经过对周围的评论进行了更多的挖掘(非常感谢Opal )之后,我发现通过JNLP启动slave是可行的。

正如很多人提到的那样,目前还不能通过SSH运行unit testing,因此您现在可能需要转向JNLP代理,直到Apple修复它为止。


如果与JNLP连接仍然无法解决问题,请尝试使用本评论中提到的解决scheme。

即:在命令行上运行这些:

DevToolsSecurity – 启用

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

安全authorizationdb写入system.privilege.taskport是开发人员

见这里和这里的参考。

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

我最终通过在这里执行这些步骤来解决这个问题,本质上是运行:

 sudo security authorizationdb write system.privilege.taskport allow 

这将消除一类这些身份validationpopup窗口。 您还需要运行:

 sudo DevToolsSecurity -enable 

但是,一旦我升级到Xcode 6,当尝试通过SSH运行xcodebuildtesting时,我现在得到无限的挂起。 只要我login到控制台,并从键盘上运行它们,它们就可以继续运行。

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

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

不幸的是,jenkins奴隶然后安装自己 – 你猜对了 – LaunchDaemon,导致无法启动testing完全相同的问题; 参考 。

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

这终于让我在OSX jenkins slave上运行XCode6(Beta6)testing。

我终于find了一个很好的简单解决scheme。 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(“命令行工具”xcodebuildtesting“将不再等待Simulator.app启动”)

我以前见过这个错误,有一种可能性是因为你可能从互联网上下载了Xcode6 Beta(不是应用程序,因为它不可用),你试图运行它的机器会popup询问你是否你真的想从互联网上打开这个应用程序。

当xcodebuild尝试启动iPhone模拟器应用程序时也会发生这种情况。

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

如果仍然不起作用,我会尽力:

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