Jenkins 与 Xcode 8 和 iOS 模拟器:"Timed out waiting 120 seconds for simulator to boot, current state is 1"
Jenkins with Xcode 8 and iOS Simulators: "Timed out waiting 120 seconds for simulator to boot, current state is 1"
我在我的机器上安装了本地版本的 Jenkins,一台带有 El Capitan 的 Macbook Pro,在将配置推送到我们的 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
但由于某些原因,最近开始出现此错误,这确实影响了 运行 此环境的本地版本。
在我的情况下,这几乎完全与我安装 Jenkins 的方式有关。
我最初在 /Library/LaunchDaemons/org.jenkins.plist
中将 Jenkins 安装为根进程。在那个配置中,它在 UserName
键下有我的用户名,并且 运行ning whoami
表明这是正确的,但是 OSX 运行s Daemons
与 LaunchAgents
是关键。
在那个 plist 中,我还将 SessionCreate
设置为 true
,这在这种情况下会导致问题。
这需要编辑/明确设置为 "false" 以确保,<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 签名时,运行这样,您应该不再需要解锁钥匙串,但如果你这样做,这就是我们与 Jenkins 一起使用的过于偏执的脚本,
$ 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 是真正的 运行ning 作为您的用户,您实际上应该不再需要解锁钥匙串了。
希望这对那些一直在使用这款手机的人有所帮助CI见鬼。
我在我的机器上安装了本地版本的 Jenkins,一台带有 El Capitan 的 Macbook Pro,在将配置推送到我们的 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
但由于某些原因,最近开始出现此错误,这确实影响了 运行 此环境的本地版本。
在我的情况下,这几乎完全与我安装 Jenkins 的方式有关。
我最初在 /Library/LaunchDaemons/org.jenkins.plist
中将 Jenkins 安装为根进程。在那个配置中,它在 UserName
键下有我的用户名,并且 运行ning whoami
表明这是正确的,但是 OSX 运行s Daemons
与 LaunchAgents
是关键。
在那个 plist 中,我还将 SessionCreate
设置为 true
,这在这种情况下会导致问题。
这需要编辑/明确设置为 "false" 以确保,<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 签名时,运行这样,您应该不再需要解锁钥匙串,但如果你这样做,这就是我们与 Jenkins 一起使用的过于偏执的脚本,
$ 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 是真正的 运行ning 作为您的用户,您实际上应该不再需要解锁钥匙串了。
希望这对那些一直在使用这款手机的人有所帮助CI见鬼。