XCUITest on real devices
Upload your app (.ipa) and your UI test Runner (.zip) and run your XCUITest tests on our real iPhones and iPads, from CI, with no change to your tests.
Run your existing XCUITest UI tests on our real iPhones and iPads. You upload two things Xcode already builds for you — your app as an .ipa and your UI test Runner as a .zip — and we run the suite on the devices you name.
There is no code to change and nothing of ours to add to your project. Your tests run on the device the same way they do under xcodebuild test.
How it works
Four calls, all to https://hub.testkase.com/xcuitest/v1:
- Upload your app —
POST /xcuitest/v1/appwith your.ipa. You get back afarm://app-…URL. - Upload your test suite —
POST /xcuitest/v1/test-suitewith a.zipof your…-Runner.app. You get back afarm://suite-…URL. - Start a build —
POST /xcuitest/v1/buildwith both URLs and a list of devices. You get back abuild_id. - Check the result —
GET /xcuitest/v1/builds/<build_id>until the build is no longerqueuedorrunning.
Every request, response, field and error code is in the API reference (interactive — you can try each call there); for a step-by-step walkthrough with curl, see Getting started.
A build is one app and one test suite on up to 20 devices. Each device gets its own session: the whole suite (or the part your filters pick) runs once on that device. The devices run at the same time, within your plan's parallel-session limit.
Good to know first
- Development or Ad Hoc builds for a real device. App Store builds and simulator builds don't work.
- No live view. You can't watch a device while your tests run on it. Each test's video arrives once the run has finished.
What you get
Real iPhones and iPads
Physical devices only. Simulators are not available for XCUITest.
Per-test results
Every test with its status, duration and, for a failure, XCTest's message with the file and line.
Per-test video
One clip for each test, ready once the run has finished.
Logs
The device log and the full xcodebuild output (device log unless you turn deviceLogs off).
All Commands
Each XCTest step your test made, like Tap "Login" Button, with failed checks in red.
CI-friendly status
One build status to gate on: passed, failed, error, timedout or stopped.
Every build also shows up in your dashboard under Automate → Mobile Apps → Runs.
In this section
Questions
▶Running XCUITest locally and importing results into Test Management?
That is a different feature. If you run XCUITest on your own devices or in your own CI and want the results in TestKase Test Management, see XCUITest in Test Management.
▶Can I run the same tests on several devices at once?
Yes. List up to 20 devices in one build. Each device runs the full suite (or the part your filters select) once, and they run in parallel up to your plan's thread limit. A device over that limit waits for one of your threads to free up, for as long as maxQueueWaitSeconds allows.
▶Can I split one suite across several devices?
Not yet. Sharding is not available, so every device runs every selected test. See what is not available yet.
▶Can I watch an XCUITest run live?
No. There is no live view of a device while an XCUITest build runs on it. You get a video clip of each test once the run has finished.
▶Can I use the iOS simulator?
No. XCUITest builds run on real iPhones and iPads only. Build your app and tests for a real device (generic/platform=iOS), not for the simulator.
▶How is it billed?
Like Appium: per device session, per minute, against your Automate plan. A build on five devices is five sessions. Waiting in the queue is not billed.
Troubleshooting
The Espresso messages you are most likely to meet — Android 17 and older Espresso, suite/app mismatch, missing instrumentation, unknown devices, zero tests, timeouts — and what to do about each.
Getting started
Build your app and UI test Runner for a real device, get your access key, and run your first XCUITest build on a real iPhone with four curl calls.
