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 SettingsPrivacy & SecurityDeveloper Mode and enable it. Your device will restart.
3

Open your project in Xcode

cd ios
open YourProjectName.xcworkspace
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:
npx react-native run-ios --device

Trust the developer certificate

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

Open Settings on your device

Go to SettingsGeneralVPN & 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:
xcrun xctrace list devices
Run on a specific device:
npx react-native run-ios --device="Your iPhone Name"

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 WindowDevices 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 SettingsAbout Phone
  2. Tap Build Number 7 times
  3. You’ll see “You are now a developer!”
2

Enable USB Debugging

  1. Go to SettingsSystemDeveloper 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:
adb devices
You should see output like:
List of devices attached
14ed2fcc    device

Build and run

With your device connected and Metro running:
# Start Metro bundler
npx react-native start

# In another terminal, build and install
npx react-native run-android
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:
npx react-native run-android --mode release
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

adb tcpip 5555
3

Find device IP address

On your device: SettingsAbout PhoneStatusIP AddressOr via adb:
adb shell ip addr show wlan0
4

Connect wirelessly

adb connect <device-ip>:5555
Example:
adb connect 192.168.1.150:5555
5

Disconnect USB and verify

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

Testing device-specific features

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

Camera

import {Camera} from 'react-native-camera';

GPS/Location

import Geolocation from '@react-native-community/geolocation';

Push Notifications

import messaging from '@react-native-firebase/messaging';

Sensors

import {Accelerometer} from 'react-native-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

npm install -g react-devtools
2

Run React DevTools

react-devtools
3

Connect your app

Open developer menu on device → Enable DebugOpen 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 ProductProfile (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 SettingsGeneralVPN & 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:
    adb reverse tcp:8081 tcp:8081
    
  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

Build docs developers (and LLMs) love