Looking for other options? Check out the Local Quickstart for Android/iOS simulators or Cloud Mobile Quickstart for zero-setup cloud devices.
Make sure youβve completed the Installation steps before proceeding.
What Youβll Need
macOS with Xcode
Required for code signing and building WDA
Physical iOS Device
iPhone or iPad connected via USB cable
Node.js & npm
For installing Appium and drivers
Apple Developer Account
Free account works - needed for code signing
One-Time Setup
Install XCUITest Driver
Install the XCUITest driver which includes WebDriverAgent:This installs WebDriverAgent at:
~/.appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent/.Configure Code Signing
WebDriverAgent must be code-signed to run on physical devices. This is a one-time setup.In Xcode:
Option A: Using Xcode (Recommended)
- Open the Project Navigator (panel on the left), then select the WebDriverAgent project at the top.
- Select the WebDriverAgentRunner target (top-left dropdown)
- Go to Signing & Capabilities tab
- Check βAutomatically manage signingβ
- Select your Team (your Apple ID)
-
Change the iOS Bundle Identifier to something unique:
- Example:
com.yourname.WebDriverAgentRunner - Must be unique across all Apple apps
- Example:
-
Select your physical device as the run destination in Xcode, then build the IntegrationApp target once. This will trigger the code-signing process and install the required provisioning profile on your device.
Option B: Using CLI (Advanced)
Youβll still need to get your Team ID from Xcode or your Apple Developer account.
Using Your Physical iOS Device
After the one-time setup, mobile-use handles everything automatically:- β Starts iproxy for USB port forwarding
- β Builds and runs WebDriverAgent via xcodebuild
- β Connects to WDA and waits for it to be ready
- β Cleans up processes when your script exits
Basic Example
physical_device_demo.py
Multiple Devices
If you have multiple devices connected, specify which one to use:multiple_devices.py
How to find your device UDID
How to find your device UDID
Advanced Configuration
Managing WDA Externally
For debugging or custom setups, you can disable auto-start and manage iproxy/WDA manually:manual_wda_setup.py
Available WDA Configuration Options
Available WDA Configuration Options
| Option | Type | Default | Description |
|---|---|---|---|
auto_start_iproxy | bool | True | Auto-start USB port forwarding |
auto_start_wda | bool | True | Auto-build and run WDA via xcodebuild |
wda_url | str | "http://localhost:8100" | WDA server URL |
wda_project_path | str | None | None | Custom path to WebDriverAgent.xcodeproj |
wda_startup_timeout | float | 120.0 | Max seconds to wait for WDA startup |
How It Works
The WDA wrapper automatically manages iproxy and xcodebuild processes, cleaning them up when your script exits.
Getting Your Device UDID
Troubleshooting
"Untrusted Developer" error
"Untrusted Developer" error
Solution: Trust the developer certificate on your device
- Go to Settings β General β VPN & Device Management
- Tap on your developer certificate
- Tap Trust
"A valid provisioning profile was not found"
"A valid provisioning profile was not found"
Possible causes:
- No Team selected in Xcode
- Bundle Identifier conflict
- Device not registered in Apple Developer account
- Open the WDA project in Xcode
- Verify a Team is selected for both targets
- Try a different Bundle Identifier (e.g.,
com.yourname.WebDriverAgentRunner) - Check device registration in your Apple Developer account
"iPhone is locked" error
"iPhone is locked" error
Solution: Keep your device unlocked
- Unlock your device before running automation
- Keep it unlocked during the initial WDA build
- Consider disabling auto-lock temporarily: Settings β Display & Brightness β Auto-Lock β Never
Build failures or xcodebuild errors
Build failures or xcodebuild errors
Debugging steps:
- First build takes time: Initial builds can take 1-2 minutes
- Check Xcode: Open the project in Xcode for detailed error messages
- Verify signing: Ensure code signing is configured for both
WebDriverAgentRunnerandWebDriverAgentLibtargets - Clean build: In Xcode, go to Product β Clean Build Folder
- Update Xcode: Make sure youβre running the latest version
Connection timeout or WDA not responding
Connection timeout or WDA not responding
Troubleshooting:
- Verify WDA is running on device (you should see the WDA screen)
- Check iproxy is running:
ps aux | grep iproxy - Test WDA manually:
curl http://localhost:8100/status - Restart your device and try again
- Increase timeout in config:
wda_startup_timeout=180.0
For more troubleshooting help, check the Troubleshooting Guide or join our Discord community.

