How to test your iOS app on real iPhones without a device cloud
Plug your own iPhones into one Mac and drive them from there. Xcode runs your app and XCUITest suites on a connected phone; for a no-code device lab, iFarm records a flow once, replays it on every iPhone, and writes a pass/fail HTML report with a screenshot of every check. Cloud device farms are the alternative when you need models you don't own.
Why real iPhones still matter
The Simulator is fast and free, and it's where most testing should start. But some things only show up on hardware:
- Camera flows: scanning, photo capture, permissions.
- Push notifications arriving and opening the right screen.
- Face ID prompts and other system sheets appearing over your app.
- Bluetooth accessories and pairing.
- Real networks: slow cellular, captive Wi-Fi, a debugging proxy.
- Older phones: smaller screens, less memory, the oldest iOS you support.
- Long runs: crashes, memory growth and battery drain after hours of use.
A support ticket that says "it breaks on my iPhone" is often one of these. Reproducing it on the same model and iOS version is the fastest fix.
Your options
| Xcode + XCUITest | Cloud device farm | Device lab on one Mac (iFarm) | |
|---|---|---|---|
| Devices | Your own, plugged in | The provider's | Your own, plugged in |
| Tests written as | Swift code in your project | Your existing test code (XCUITest, Appium and others) | Recorded or edited steps, no code |
| Many phones at once | Possible, with your own CI setup | Yes | Yes, in one window |
| Reports | Xcode test results | The provider's dashboard | Pass/fail HTML page per run, with screenshots |
| Scheduling | Your CI | The provider or your CI | Built in, for example nightly |
| Cost | Free with Xcode | Paid; see each provider's pricing | Free (iFarm), plus your phones |
| Your data | Stays with you | Your build runs on their devices | Stays on your Mac |
Xcode and XCUITest
The standard path. Plug in an iPhone, choose it as the run destination, and press Run; Apple explains it in Running your app in Simulator or on a device. For automated checks, UI tests built with XCTest (often called XCUITest) launch your app and tap through it from code.
It's precise and it lives in your repository. The costs are writing and maintaining test code, and the work of running suites across several phones on a schedule.
Cloud device farms
Services such as AWS Device Farm and BrowserStack App Automate host real iPhones in their data centers. As of November 2026, AWS describes running tests on "a large selection of physical devices", and BrowserStack lists Appium and XCUITest among the frameworks it runs on real devices. Their own pages have current pricing.
They shine when you need models you don't own, or a wide matrix for a release. The trade-offs: you pay per use or per plan, your build runs on someone else's hardware, and you usually still need test code.
A device lab on one Mac
If you already have a drawer of iPhones (old personal phones, team phones, a few cheap older models), you can turn them into a lab without a server, Docker or a subscription. That's what iFarm does: a free Mac app that runs real iPhones from one Mac. Every phone shows live in one window, you control any of them with the mouse, and you automate them by recording.
For a code-first, self-hosted alternative built on Appium, see self-hosted iOS device farm vs iFarm.
Build a device lab with iFarm
What you need
- A Mac on macOS 14 or later (a Mac mini works well as an always-on host).
- Xcode, free from the Mac App Store, and an Apple ID added in it.
- iPhones on iOS 16 or later, Developer Mode on, a data cable each.
- A powered USB hub for 3 or more phones.
- A paid Apple Developer Program team is recommended for more than a couple of phones; see free vs paid Apple developer account.
How many phones one Mac runs
| Mac memory | Phones, comfortably |
|---|---|
| 8 GB | 5–10 |
| 16 GB | 10–20 |
| 32 GB or more | 20–30, limited by USB hubs |
Each phone costs about 140 MB of Mac memory. iFarm's Health page shows "Room for about N more phones" for your Mac.
Steps
- Install Xcode and iFarm, and add your Apple ID in Xcode → Settings → Accounts.
- Connect each iPhone by USB, trust the Mac and turn on Developer Mode. iFarm's setup guide installs its helper on each phone, signed with your team.
- Install your build on the phones the way you normally do (Xcode, TestFlight or the App Store).
- Open one phone large and press Record. Go through the flow you want to test: sign up, log in, check out, change a setting. Press Stop and save.
- Open the automation and turn on Test mode in its header.
- Add checks where they matter: a Wait for text step for every screen that must appear.
- Press Run on all phones, a group, or the checked ones.
- Open the report from the run (Open report) or from History (Report).
What test mode changes
Normal automations are forgiving: they dismiss popups and recover when something gets in the way. A test shouldn't be. In test mode:
- Popups are left to your steps, so permission prompts can be tested: add a step that taps Allow or Don't Allow yourself.
- Nothing tries to recover: no going back, no reopening the app. A problem shows up as a failure.
- Every Wait for text step is a check that must pass, including the ones a recording adds automatically.
- Each run writes a pass/fail report: an HTML page with every check and a screenshot of each, the phone and iOS version, the app's version and build, the timing and the full log. Reports are kept in
~/Library/Application Support/iFarm/Reports, one folder per run, ready to zip and send.
Why recordings survive different screen sizes
For each tap, iFarm remembers the text on screen under your finger, not just the coordinates. On replay it waits up to 8 seconds for that button, picks the copy of the text nearest where you tapped, and then checks for the word that appeared after it. So a flow recorded on one iPhone runs on other sizes. Steps without text fall back to the position on screen.
Run it nightly
Add a schedule (Plan → Schedules) to run the test every night on all phones or a group, on chosen weekdays. History lists every run with the phone, what started it and the result, with a screenshot of any failure. Chain tests into a flow if one depends on another (on success, on failure, always).
Tests worth running on a phone lab
| Test | Why a real device |
|---|---|
| Sign-up and log-in on every phone | Keyboard, autofill and layout differ by size |
| Permission prompts (camera, notifications, location) | System prompts appear only on device in their real form |
| Languages and text sizes | Set phones up differently and run one flow to see where layouts break |
| Bug from a support ticket | Same model and iOS version as the customer |
| Reliability over hours | Crashes, memory growth and battery drain |
| App Store screenshots | Several iPhone sizes at once |
For network testing, set a phone's Wi-Fi proxy (Settings → Wi-Fi → ⓘ → Configure Proxy) to a debugging proxy such as Charles or Proxyman. iFarm never changes the phones' network settings itself.
One phone, one driver
iFarm's helper and Xcode's own UI tests (XCUITest) can't drive the same phone at the same time. Give each its own phone, or stop iFarm on that phone while your XCUITest suite runs.
Tip: If you test for clients, use phones dedicated to testing and follow each client's rules. A replay taps whatever is on screen, so don't run one on a phone someone is using.
Frequently asked questions
Can I test an iOS app on a real iPhone for free?
Yes. Xcode is free and a free Apple ID can install your app on your own iPhone, though it has to be reinstalled every 7 days. iFarm is free too.
Do I need a device cloud to test on several iPhones?
No. You can plug several iPhones into one Mac and run the same flow on all of them. A cloud farm helps when you need models you don't have.
Can iFarm run my XCUITest suite?
No. iFarm replays its own recorded or edited steps. Run XCUITest from Xcode or CI, on a phone iFarm isn't driving at that moment.
How do I share test results with a client?
Each test-mode run writes an HTML report with screenshots in its own folder under ~/Library/Application Support/iFarm/Reports. Zip the folder and send it.
Does testing need a jailbreak?
No. Stock iPhones with Developer Mode on are all you need.