Jenkins使用XCode 8和iOS模拟器:“模拟器启动等待120秒,当前状态为1”

时间:2016-11-20 13:52:58

标签: xcode jenkins ios-simulator xcode8 xcodebuild

我在我的计算机上安装了本地版本的Jenkins,MacBook Pro使用El Capitan,我将其用于开发和调试目的,然后再将配置推送到我们的CI版本中。

最近,我认为自升级到XCode 8后,我们开始收到此超时错误

iOSSimulator: Timed out waiting 120 seconds for simulator to boot, current state is 1.

要测试的命令很简单xcodebuild

xcodebuild clean test -scheme UnitTests -destination OS=9.3,name='iPhone 6' -sdk iphonesimulator -configuration Release ONLY_ACTIVE_ARCH=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES -enableCodeCoverage=YES

但是由于某种原因,最近出现了这个错误,这个错误确实影响了能够运行这个环境的本地版本。

1 个答案:

答案 0 :(得分:2)

在我的情况下,这几乎与我安装Jenkins的方式有关。

我最初在/Library/LaunchDaemons/org.jenkins.plist中安装了Jenkins作为根进程。在该配置中,它在UserName密钥下面有我的用户名,并且运行whoami表明这是正确的,但是OSX如何运行DaemonsLaunchAgents的关键是关键

在那个plist中,我也SessionCreate设置为true,这在这种情况下会导致问题。

这需要编辑/明确设置为&#34; false&#34;可以肯定的是,<key>SessionCreate</key><false/>,用户和组名称键也应该被检查为正确的登录用户,在我的情况下,我的plist的开头看起来像,

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>UserName</key>
    <string>seaders</string>
    <key>GroupName</key>
    <string>staff</string>
    <key>SessionCreate</key>
    <false/>
    <key>EnvironmentVariables</key>
    <dict>
      <key>JENKINS_HOME</key>
      <string>/Users/Shared/Jenkins/Home</string>
    </dict>
    ...

对于我的情况,我需要将Jenkins配置plist从root LaunchDaemons移到我自己用户的LaunchAgent目录中,

$ # If jenkins is currently loaded from root, it needs unloading
$ sudo launchctl unload /Library/LaunchDaemons/org.jenkins.plist
$ sudo mv /Library/LaunchDaemons/org.jenkins.plist ~/Library/LaunchAgents/
$ # If jenkins had run under root, and used the regular log paths, we need to change the ownerships of a few places, my full command is
$ sudo chown -R seaders:staff ~/Library/LaunchAgents/org.jenkins.plist /var/log/jenkins/ /Users/Shared/Jenkins/Home
$ launchctl load ~/Library/LaunchAgents/org.jenkins.plist

这样做的整体效果是Jenkins真正以当前登录用户身份运行,流程属于您,用户和群组名称属于您,并且您明确告诉它不是完全创建一个新会话。

除此之外,在使用iOS签名,以这种方式运行时,您不再需要解锁钥匙串,但如果这样做,这就是我们使用的过于偏执的脚本詹金斯,

$ security unlock-keychain -p ${USERPASS} ${HOME}/Library/Keychains/login.keychain
$ security list-keychains -s ${HOME}/Library/Keychains/login.keychain
$ security -v list-keychains -s ${HOME}/Library/Keychains/login.keychain
$ security list-keychains # so we can verify that it was added if it fails again
$ security -v unlock-keychain -p ${USERPASS} ${HOME}/Library/Keychains/login.keychain

但是,如果如果在将计算机正确设置为开发框之后就会遇到密钥错误,允许对应用进行签名,并且Jenkins真正以您的用户身份运行,你不应该再解锁钥匙链了。

希望这可以帮助那些经历过移动CI的人。