I'm seeing this error in my TeamCity build agent output:
...
[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
...
where the mentioned log contains:
...
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
...
If I run the exact same command directly on the build agent machine:
$ /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
it works. Any idea why this fails from the TeamCity build agent?
OK, it looks like we've figured out the real problem. The plist
file provided with TeamCity contains SessionCreate
property, which should not be there for latest Mac OS X version.
The problem should be fixed in TeamCity 9.0.4, but as a workaround, you should place jetbrains.teamcity.BuildAgent.plist
to
~/Library/LaunchAgents/jetbrains.teamcity.BuildAgent.plist
and remove SessionCreate
property and value from it.
The current variant of jetbrains.teamcity.BuildAgent.plist file is:
<?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>
Per TeamCity's documentation, there are two ways to create a build agent daemon on OS X:
/Library/LaunchDaemons/jetbrains.teamcity.BuildAgent.plist
~/Library/LaunchAgents/jetbrains.teamcity.BuildAgent.plist
It turns out that neither of these options will allow the TeamCity build agent to launch the Xcode Simulator.
If the build agent is manually started after directly (not SSH) logging into the build agent machine:
$ sh buildAgent/bin/agent.sh start
the TeamCity build agent will be able to launch the simulator. To run this script at startup, create a .app
using Automator: https://stackoverflow.com/a/6445525/429533
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With