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
1
Install Appium
Install Appium globally via npm:
2
Install XCUITest Driver
Install the XCUITest driver which includes WebDriverAgent:This installs WebDriverAgent at:
~/.appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent/.3
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.
4
Trust Developer Certificate on Device
After the first WDA build, trust the developer certificate on your iOS device:
- On your device: Settings → General → VPN & Device Management
- Tap on your developer certificate (your Apple ID)
- Tap Trust
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
How It Works
1
iproxy Port Forwarding
iproxy forwards USB traffic from device port 8100 to localhost:8100
2
WDA Build & Deploy
xcodebuild builds WDA (if needed) and deploys it to your device
3
WDA Server Running
WDA server runs on the device, listening on port 8100
4
Python Client Connection
Python client connects to localhost:8100 via iproxy
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.
Next Steps
Explore Examples
Check out real-world automation examples
Learn Core Concepts
Understand tasks, profiles, and builders
Platform Integration
Add observability with Minitap Platform
SDK Reference
Dive into the complete API documentation

