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

Sta*_*ner 39 ssh xcodebuild jenkins ios-simulator xcode6

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

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

命令

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

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

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

测试了最近的Xcode 6 beta 6

Mic*_*Loo 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."
Run Code Online (Sandbox Code Playgroud)

预先启动

我得到了一点,我在那里提出的建议不再适用了.除了进行此处提到的更改之外,还需要启动模拟器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>' 
Run Code Online (Sandbox Code Playgroud)

老帖子

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

关于Bug ID#18001199的Apple跟进:

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

与LaunchDaemons不同,LaunchAgents提供了一个上下文,您可以在其中运行GUI应用程序 - 如果用户当时使用窗口服务器/ Aqua会话登录.将Jenkins配置从LaunchDaemon转换为LaunchAgent将避免报告的问题.您还可以使用launchd从SSH会话在iOS模拟器上运行测试,方法是制作LaunchAgent并手动加载/启动它,或者使用"launchctl submit".

好的,经过一些更多的围绕这里的评论(非常感谢Opal),我发现通过JNLP启动奴隶相反.

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


如果与JNLP连接仍无法解决问题,请尝试本评论中提到的解决方案.

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

DevToolsSecurity -enable

sudo dscl.-append/Groups/_developer GroupMembership"user-that-runs-the-sim"

security authorizationdb write system.privilege.taskport is-developer

请参阅此处此处的参考资料.

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


Tad*_*Tad 5

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

sudo security authorizationdb write system.privilege.taskport allow
Run Code Online (Sandbox Code Playgroud)

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

sudo DevToolsSecurity -enable
Run Code Online (Sandbox Code Playgroud)

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

  • 我开了一张关于Apple的门票.他们承认这是一个问题,作为一个JNLP启动了Jenkins奴隶的解决方法 - 这对我来说完全没有帮助,因为我在Thoughtworks Go上.如果我得到解决方案,会通知您. (4认同)

Sta*_*ner 1

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

\n\n

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

\n\n

“Mavericks (10.9) 和 Yosemite (10.10) 确定进程是否可以通过访问进程的出身来访问可访问性钩子。通过将 launchd 放入允许的进程列表中,通过 SSH 或 Jenkins 启动的进程可以访问跨域的可访问性钩子。系统。为此,您可以根据此要点修改 TCC 数据库。需要重新启动才能使更改生效。”

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

更新 8/02/2016 \n此问题现已在 Xcode 7.2.1 中修复(“命令行工具 \xe2\x80\x98xcodebuild test\xe2\x80\x99 将不再超时等待 Simulator.app 启动”)

\n