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

通过SSH在Xcode 6下运行Xcode构建测试时超时,ssh,jenkins,ios-simulator,xcode6,xcodebuild,Ssh,Jenkins,Ios Simulator,Xcode6,Xcodebuild,我似乎在将Xcode6与jenkins集成时遇到了问题,我目前有这样的设置并使用Xcode5 当xcode 6通过SSH远程运行时,模拟器超时,当我在本地运行时,它会成功 命令 xcodebuild-workspace PROJECTNAME.xcworkspace-scheme BGO_测试-目标'platform=iOS模拟器,name=iphone5s'-derivedDataPath./Build clean测试 2014-08-19 10:46:36.591 xcodebuild[33

我似乎在将Xcode6与jenkins集成时遇到了问题,我目前有这样的设置并使用Xcode5

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

命令

xcodebuild-workspace PROJECTNAME.xcworkspace-scheme BGO_测试-目标'platform=iOS模拟器,name=iphone5s'-derivedDataPath./Build clean测试

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

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


使用最新的Xcode 6 beta 6测试,我以前见过这个错误,一种可能性是,由于您可能从internet下载了Xcode 6 beta(不是appstore,因为它还不可用),您尝试运行它的机器将显示一个弹出窗口,询问您是否真的想从internet上打开这个应用

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

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

如果这仍然不起作用,我会尝试:

  • 重置模拟器的内容和设置
  • 重新启动计算机,确保启动时没有模拟器运行(重新启动时,您可以选择不重新打开任何应用程序)

  • 我的工作原理是OSX上的SSH是作为启动守护进程启动的,启动守护进程不允许显示UI

    我通过使用JavaWebStart启动Jenkins从机来解决这个问题,然后将Jenkins从机作为启动服务安装

    不幸的是,Jenkins slave随后将自己安装为一个启动守护进程,这与无法启动测试的问题完全相同

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


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

    我最终在Xcode5上解决了这个问题,基本上运行了:

    sudo security authorizationdb write system.privilege.taskport allow
    
    这将消除其中一类身份验证弹出窗口。您还需要运行:

    sudo DevToolsSecurity -enable
    

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

    注意:设备名称在Xcode 7中更改,因此您不再使用
    iPhone 5(9.1模拟器)指定它们
    而是
    iPhone5(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>' 
    
    #首先获取所需的UDID
    xcrun仪器-s
    #然后启动它
    打开-一个“iOS模拟器”-args-CurrentDeviceUDID
    #等一段时间。。。。
    睡眠5
    #然后启动单元测试
    xcodebuild[…]-destination'platform=iOS模拟器,name='10〕
    
    旧职位 此错误在Xcode 6.3及以上版本中已修复。如果您在较新的Xcode中遇到类似问题,则可能是另一个错误

    苹果公司关于Bug ID#18001199的后续行动:

    运行GUI时不支持启动守护进程提供的上下文 SSH服务和Jenkins的默认设置是 在早期版本的Xcode 5中,两者都实现为启动守护进程 xcodebuild可以在此上下文中在iOS模拟器上运行测试,但是 这从来都不是一个受支持的配置,正如您所注意到的 从Xcode 6开始不再工作

    与LaunchDaemon不同,LaunchAgent提供了一个可以运行的上下文 GUI应用程序-如果用户当时已登录,则显示一个窗口 服务器/Aqua会话。正在从转换Jenkins配置 从LaunchDaemon到LaunchAgent可以避免报告的错误 您还可以使用launchd在iOS模拟器上运行测试 从SSH会话,通过手工创建LaunchAgent和手动 加载/启动,或使用“启动CTL提交”

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

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


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

    i、 e:在命令行上运行以下命令:

    开发工具安全-启用

    sudo dscl.-append/Groups/_开发者组成员身份“运行sim卡的用户”

    安全授权db write system.privilege.taskport是开发人员

    见参考文献和


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

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

    > SSH超时的解决方法通过

    “Mavericks(10.9)和Yosemite(10.10)确定进程是否可以通过访问进程的父级访问辅助功能挂钩。通过将launchd放入允许的进程列表中,通过SSH或Jenkins启动的进程可以访问整个系统的辅助功能挂钩。为此,您可以修改
    #!/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"