在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的窗口中单击“打开”。
如果仍然不起作用,我会尽力:
- 重置模拟器的内容和设置
- 重新启动机器,并确保在启动时没有模拟器正在运行(您可以select不重新启动时重新打开任何应用程序)