来自TeamCity构建代理的“无法在Simulator中运行应用程序”

时间:2014-11-06 20:23:18

标签: ios xcode ios-simulator teamcity

我在TeamCity构建代理输出中看到此错误:

...
[14:17:50][Step 2/2] Starting: /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -project Foobar/Foobar.xcodeproj -scheme foobarNightly SYMROOT=/Users/Me/buildAgent/work/e60c5dca158b2d23/Foobar/build OBJROOT=/Users/Me/buildAgent/work/e60c5dca158b2d23/Foobar/build test -sdk iphonesimulator8.1
[14:17:50][Step 2/2] in directory: /Users/Me/buildAgent/work/e60c5dca158b2d23
...
[14:17:53][Step 2/2] FoobarTests (BUILD)
[14:17:53]=== BUILD TARGET FoobarTests OF PROJECT Foobar WITH CONFIGURATION Debug ===
[14:17:53]Check dependencies
[14:17:53]Testing failed:
[14:17:53]  Test target FoobarTests encountered an error (Unable to run app in Simulator If you believe this error represents a bug, please attach the log file at /var/folders/yy/lc1xnprn1w3g98mcy5mprm5c0000gn/T/com.apple.dt.XCTest-status/Session-2014-11-04_11:17:51-qkVM7k.log)
[14:17:53][Step 2/2] ** TEST FAILED **
[14:17:54][Step 2/2] Process exited with code 65
...

所提到的日志包含:

...
2014-11-04 11:17:51.085 Beginning test session with Xcode 6A1052d
2014-11-04 11:17:51.085 /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -project Foobar/Foobar.xcodeproj -scheme foobarNightly SYMROOT=/Users/Me/buildAgent/work/e60c5dca158b2d23/Foobar/build OBJROOT=/Users/Me/buildAgent/work/e60c5dca158b2d23/Foobar/build test -sdk iphonesimulator8.1
2014-11-04 11:17:51.085 Testing on device: <DVTiPhoneSimulator: 0x7fcb257b2210> {
        SimDevice: SimDevice : iPad 2 (B694B12B-BAE3-48FD-A351-CFC5855B5D14) : state={ Booted } deviceType={ SimDeviceType : com.apple.CoreSimulator.SimDeviceType.iPad-2 } runtime={ SimRuntime : 8.1 (12B411) - com.apple.CoreSimulator.SimRuntime.iOS-8-1 }
}
2014-11-04 11:17:51.085 Initializing test infrastructure.
2014-11-04 11:17:51.085 Writing testing status log to /var/folders/yy/lc1xnprn1w3g98mcy5mprm5c0000gn/T/com.apple.dt.XCTest-status/Session-2014-11-04_11:17:51-qkVM7k.log.
2014-11-04 11:17:51.107 Creating the connection.
2014-11-04 11:17:51.107 Listening for proxy connection request from the test bundle (all platforms)
2014-11-04 11:17:51.107 Resuming the connection.
2014-11-04 11:17:51.107 Test connection requires daemon assistance.
2014-11-04 11:17:51.469 Checking test manager availability..., will wait up to 120s
2014-11-04 11:17:52.148 testmanagerd handled session request.
2014-11-04 11:17:52.148 Waiting for test process to launch.
2014-11-04 11:17:53.323 Launch session started, setting a disallow-finish-token on the run operation.
2014-11-04 11:17:53.323 Waiting for test process to check in..., will wait up to 120s
2014-11-04 11:17:53.334 Adding console adaptor for test process.
2014-11-04 11:17:54.012 Test operation failure: Unable to run app in Simulator
2014-11-04 11:17:54.012 _finishWithError:Error Domain=IDEUnitTestsOperationsObserverErrorDomain Code=3 "Unable to run app in Simulator" UserInfo=0x7fcb28ddd570 {NSLocalizedDescription=Unable to run app in Simulator} didCancel: 1
...

如果我直接在构建代理机器上运行完全相同的命令:

$ /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -project Foobar/Foobar.xcodeproj -scheme foobarNightly SYMROOT=/Users/Me/buildAgent/work/e60c5dca158b2d23/Foobar/build OBJROOT=/Users/Me/buildAgent/work/e60c5dca158b2d23/Foobar/build test -sdk iphonesimulator8.1

它有效。知道为什么会失败来自TeamCity构建代理吗?

2 个答案:

答案 0 :(得分:6)

好的,看起来我们已经找到了真正的问题。随TeamCity提供的plist文件包含SessionCreate属性,不应该存在最新的Mac OS X版本。

问题应该在TeamCity 9.0.4中修复,但作为解决方法,您应该将jetbrains.teamcity.BuildAgent.plist置于 ~/Library/LaunchAgents/jetbrains.teamcity.BuildAgent.plist 并从中删除SessionCreate属性和值。

jetbrains.teamcity.BuildAgent.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>WorkingDirectory</key> <string>/agent/home/directory</string> <key>Debug</key> <false/> <key>Label</key> <string>jetbrains.teamcity.BuildAgent</string> <key>OnDemand</key> <false/> <key>KeepAlive</key> <true/> <key>ProgramArguments</key> <array> <string>bash</string> <string>--login</string> <string>-c</string> <string>launcher/bin/TeamCityAgentService-macosx-universal-32 -c ../conf/wrapper.conf</string> </array> <key>RunAtLoad</key> <true/> <key>StandardErrorPath</key> <string>logs/launchd.err.log</string> <key>StandardOutPath</key> <string>logs/launchd.out.log</string> </dict> </plist>

答案 1 :(得分:5)

根据TeamCity的documentation,有两种方法可以在OS X上创建构建代理守护程序:

  • 系统范围:/Library/LaunchDaemons/jetbrains.teamcity.BuildAgent.plist
  • 特定于用户:~/Library/LaunchAgents/jetbrains.teamcity.BuildAgent.plist

事实证明, 这两个选项都不允许TeamCity构建代理启动Xcode Simulator。

如果直接(而非SSH)登录构建代理程序计算机后手动启动构建代理程序:

$ sh buildAgent/bin/agent.sh start

TeamCity构建代理将能够启动模拟器。要在启动时运行此脚本,请使用Automator创建.apphttps://stackoverflow.com/a/6445525/429533