Skip to main content
While emulators are great for development, testing on physical devices is essential for accurate performance testing and device-specific features like camera, GPS, and sensors.
Make sure you’ve completed the environment setup and can run your app in simulators before deploying to devices.

iOS devices

Prerequisites

  • Mac with Xcode installed
  • Apple Developer account (free accounts can deploy to devices for 7 days)
  • Physical iOS device with USB cable
  • iOS 15.1 or newer on your device

Setup steps

1

Connect your device

Connect your iOS device to your Mac via USB cable. If prompted on your device, tap “Trust This Computer”.
2

Enable Developer Mode

On iOS 16+, go to Settings → Privacy & Security → Developer Mode and enable it. Your device will restart.
3

Open your project in Xcode

Always open the .xcworkspace file, not the .xcodeproj file, when using CocoaPods.
4

Select your device

In Xcode, click the device dropdown near the top-left and select your connected iPhone from the list.
5

Configure signing

Select your project in the navigator, then:
  1. Select your app target
  2. Go to Signing & Capabilities
  3. Check “Automatically manage signing”
  4. Select your Team (your Apple ID)
Xcode will automatically create a provisioning profile.
6

Build and run

Click the play button (▶️) in Xcode or press Cmd + R.Or from command line:

Trust the developer certificate

On first launch, you’ll see “Untrusted Developer”:
1

Open Settings on your device

Go to Settings → General → VPN & Device Management
2

Trust your Apple ID

Tap your Apple ID under “Developer App”, then tap Trust
3

Launch the app again

Open the app from your home screen
Free Apple Developer accounts require you to re-sign apps every 7 days. Paid accounts ($99/year) allow apps to stay installed for a year.

Running on specific iOS devices

List available devices:
Run on a specific device:

Wireless debugging (iOS)

Debug without a cable:
1

Connect via USB initially

Connect your device via cable and ensure it appears in Xcode
2

Enable network debugging

In Xcode, go to Window → Devices and SimulatorsSelect your device, check “Connect via network”
3

Disconnect cable

Once the network icon appears next to your device, you can unplug the cable
Your Mac and iOS device must be on the same Wi-Fi network for wireless debugging.

Android devices

Prerequisites

  • Android device with USB debugging enabled
  • Android 7.0 (API 24) or newer
  • USB cable
  • Android SDK Platform Tools (adb)

Enable USB debugging

1

Enable Developer Options

On your Android device:
  1. Go to Settings → About Phone
  2. Tap Build Number 7 times
  3. You’ll see “You are now a developer!”
2

Enable USB Debugging

  1. Go to Settings → System → Developer Options
  2. Enable USB Debugging
  3. (Optional) Enable Install via USB for faster installs
3

Connect your device

Connect your Android device via USB cable. Your device will prompt you to allow USB debugging - tap Allow.
4

Verify connection

Check that your device is connected:
You should see output like:

Build and run

With your device connected and Metro running:
The app will automatically install and launch on your connected device.

Connecting to development server

Your device needs to connect to the Metro bundler on your computer:

Running release builds

Test the production version of your app:
Release builds:
  • Are optimized and minified
  • Have JavaScript bundle included
  • Don’t connect to Metro
  • Run at production performance
Release builds require a signing key for production. See Android documentation for generating release APKs.

Wireless debugging (Android)

Debug over Wi-Fi without USB:
1

Connect via USB first

Connect your device via USB and ensure adb devices shows it
2

Enable TCP/IP mode

3

Find device IP address

On your device: Settings → About Phone → Status → IP AddressOr via adb:
4

Connect wirelessly

Example:
5

Disconnect USB and verify

Unplug the USB cable and run:
You should see your device with IP:port
To revert to USB mode:

Testing device-specific features

Once running on device, you can test features unavailable in emulators:

Camera

GPS/Location

Push Notifications

Sensors

Developer menu on devices

iOS

Open the developer menu by:
  • Shaking your device
  • Three-finger tap (if shake doesn’t work)

Android

Open the developer menu by:
  • Shaking your device
  • Running adb shell input keyevent 82
  • Using hardware menu button (older devices)

Developer menu options

Reload JavaScript bundle (same as pressing R twice in Metro)

Performance profiling on devices

React DevTools Profiler

Profile component render performance:
1

Install React DevTools

2

Run React DevTools

3

Connect your app

Open developer menu on device → Enable Debug → Open Debugger
4

Use Profiler

Switch to Profiler tab in React DevTools to record and analyze renders

Native profiling

Profile native iOS performance:
  1. In Xcode, select Product → Profile (Cmd + I)
  2. Choose a template:
    • Time Profiler: CPU usage
    • Allocations: Memory usage
    • Network: Network activity
  3. Click record and interact with your app

Troubleshooting

Error: “Code signing is required for product type ‘Application’”Solution:
  1. Open Xcode
  2. Select your project → Target
  3. Go to Signing & Capabilities
  4. Enable “Automatically manage signing”
  5. Select your Team
Error: “Untrusted Developer” when launchingSolution:
  1. Go to Settings → General → VPN & Device Management
  2. Tap your developer certificate
  3. Tap Trust
Issue: adb devices shows no devicesSolutions:
  • Ensure USB debugging is enabled
  • Try a different USB cable (some are charge-only)
  • Install device-specific USB drivers (Windows)
  • Run adb kill-server then adb start-server
  • Check USB connection mode (should be File Transfer/MTP)
Error: “Could not connect to development server”Solutions:
  1. Set up reverse port forwarding:
  2. Or configure device’s IP manually in developer menu
  3. Ensure both computer and device are on same network
  4. Check firewall isn’t blocking port 8081
Possible causes:
  • Network configuration issues
  • Missing native dependencies
  • Platform-specific code errors
Solution:
  • Check error message details
  • Test with release build: --mode release
  • Review platform-specific code with Platform.OS

Building for distribution

Once you’re ready to share your app:

iOS TestFlight

Distribute beta builds to testers via TestFlight

Android Internal Testing

Use Google Play Console for internal testing

iOS App Store

Submit your app to the Apple App Store

Google Play Store

Publish to Google Play Store

Next steps

1

Test on multiple devices

Test on different screen sizes, OS versions, and manufacturers
2

Profile performance

Use profiling tools to identify bottlenecks
3

Test device features

Verify camera, GPS, notifications, and sensors work correctly
4

Prepare for release

Generate signed builds and prepare store listings