Skip to content

run-ios prioritizes devices over simulators, contradicting docs #2765

@swrobel

Description

@swrobel

Environment

$ npx react-native info
info Fetching system and libraries information...
System:
  OS: macOS 26.2
  CPU: (10) arm64 Apple M1 Max
  Memory: 245.02 MB / 64.00 GB
  Shell:
    version: "5.9"
    path: /bin/zsh
Binaries:
  Node:
    version: 24.13.0
    path: /opt/homebrew/bin/node
  Yarn:
    version: 1.22.22
    path: /opt/homebrew/bin/yarn
  npm:
    version: 11.7.0
    path: /opt/homebrew/bin/npm
  Watchman:
    version: 2026.01.12.00
    path: /opt/homebrew/bin/watchman
Managers:
  CocoaPods:
    version: 1.16.2
    path: bin/pod
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 25.2
      - iOS 26.2
      - macOS 26.2
      - tvOS 26.2
      - visionOS 26.2
      - watchOS 26.2
  Android SDK: Not Found
IDEs:
  Android Studio: 2025.2 AI-252.28238.7.2523.14688667
  Xcode:
    version: 26.2/17C52
    path: /usr/bin/xcodebuild
Languages:
  Java:
    version: 17.0.18
    path: /usr/bin/javac
  Ruby:
    version: 3.4.8
    path: /opt/homebrew/Cellar/ruby@3.4/3.4.8/bin/ruby
npmPackages:
  "@react-native-community/cli":
    installed: 20.1.0
    wanted: ^20.1.0
  react:
    installed: 19.2.0
    wanted: 19.2.0
  react-native:
    installed: 0.83.1
    wanted: ^0.83.1
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: true
iOS:
  hermesEnabled: true
  newArchEnabled: true

Description

This is a continuation of #2254 which was closed, but still presumably is not fixed.

On React Native 0.83.1 with cli 20.1.0, the behavior seems to be much the same as it always has been, except that XCode no longer allows you to disable Wifi connection to iOS devices, so my iPhone always shows up as connected & available, and React Native tries to launch on it instead of on a simulator. I do want to keep my actual device is an available device, but I'm happy to manually choose it on the rare occasion that I want to develop there instead of the simulator.

Either it seems that both places that the docs say that run-ios should launch on a simulator are wrong, and should be updated to match the current behavior, or that the cli behavior is still wrong.

$ y ios
yarn run v1.22.22
$ react-native run-ios
info A dev server is already running for this project on port 8081.
info Found Xcode workspace "ReproducerApp.xcworkspace"
info Found booted Stefan’s iPhone 16
info Building (using "xcodebuild -workspace ReproducerApp.xcworkspace -configuration Debug -scheme ReproducerApp -destination id=00008140-000E149A1123001C")
success Successfully built the app
info Installing and launching your app on Stefan’s iPhone 16
2026-02-06 08:49:04.679 xcodebuild[67946:29302719]  DVTDeviceOperation: Encountered a build number "" that is incompatible with DVTBuildVersion.
2026-02-06 08:49:05.005 xcodebuild[67946:29302694] [MT] DVTDeviceOperation: Encountered a build number "" that is incompatible with DVTBuildVersion.
--- xcodebuild: WARNING: Using the first of multiple matching destinations:
{ platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Any iOS Device }
{ platform:macOS, arch:arm64, variant:Designed for [iPad,iPhone], id:00006001-000A68E90C04801E, name:My Mac }
{ platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Any iOS Simulator Device }
{ platform:iOS Simulator, arch:arm64, id:78AE4C1D-1F97-4333-8FB3-B8C02858219D, OS:26.2, name:iPad (A16) }
{ platform:iOS Simulator, arch:arm64, id:B3EA334B-5F9E-4C56-83BF-ACD83D0A370B, OS:26.2, name:iPad Air 11-inch (M3) }
{ platform:iOS Simulator, arch:arm64, id:9B31ACBD-F921-4A14-9AAE-CDE253919A54, OS:26.2, name:iPad Air 13-inch (M3) }
{ platform:iOS Simulator, arch:arm64, id:13AF4A3F-C96C-4AFE-AAC1-A98DC51D8F04, OS:26.2, name:iPad Pro 11-inch (M5) }
{ platform:iOS Simulator, arch:arm64, id:A3545F97-B91E-4EB2-9BBE-B4729B2ADE3E, OS:26.2, name:iPad Pro 13-inch (M5) }
{ platform:iOS Simulator, arch:arm64, id:F9C33633-F512-49A8-BBC5-A2F26E2ED917, OS:26.2, name:iPad mini (A17 Pro) }
{ platform:iOS Simulator, arch:arm64, id:29EAC21F-592D-4ADD-8257-B7143FC44CD9, OS:26.2, name:iPhone 16e }
{ platform:iOS Simulator, arch:arm64, id:F95B0A04-F981-47C9-9260-5BFC7E5366DD, OS:26.2, name:iPhone 17 }
{ platform:iOS Simulator, arch:arm64, id:34435A25-6EB9-4C86-964A-DD52F799F73E, OS:26.2, name:iPhone 17 Pro }
{ platform:iOS Simulator, arch:arm64, id:1D574866-9789-4EE2-99DA-5945F23DD2A6, OS:26.2, name:iPhone 17 Pro Max }
{ platform:iOS Simulator, arch:arm64, id:5954DD83-553D-4FFD-8897-5273F8F93ABB, OS:26.2, name:iPhone Air }
{ platform:iOS, arch:arm64, id:00008140-000E149A1123001C, name:Stefan’s iPhone 16 }
success Installed the app on the device.
info Installing "/Users/swrobel/Library/Developer/Xcode/DerivedData/ReproducerApp-cajwnowtshehejbinyvmuwkbmdqd/Build/Products/Debug-iphoneos/ReproducerApp.app
08:49:06  Acquired tunnel connection to device.
08:49:06  Enabling developer disk image services.
08:49:06  Acquired usage assertion.
App installed:

Reproducible Demo

This will happen on any app as long as you have a physical device that's set to Automatic run destination in XCode Devices & Simulators:
Image

However, here's a repro: https://github.com/swrobel/cli-reproducer

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions