无法找到 iPhone X 模拟器。 运行 带有 --verbose 标志的 CLI 以获取更多详细信息

Could not find iPhone X simulator. Run CLI with --verbose flag for more details

我下载了最近发布的 Xcode 11 测试版,但现在我无法在我的模拟器上 运行 我的 React-Native 应用程序。 我知道有一些关于堆栈溢出的问题,但他们没有帮助。问题是没有

/node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js

根本没有文件。在 local-cli 文件夹中只有一个名为 cli.js

的文件
'use strict';

var cli = require('@react-native-community/cli');

if (require.main === module) {
  cli.run();
}

module.exports = cli;

如果您的项目是使用 react-native init 创建的,在您的 CLI 中<您应该能够键入 xcrun simctl list devices 获取所有可用模拟器的列表。 滚动到顶部以查看可用设备列表。 如果你想 运行 Simulator with say iPhone XS Max, 那么就; react-native run-ios --simulator="iPhone XS Max"

我遇到了同样的问题。尝试玩测试版并得到了一点。我能够在 Xcode 10 中打开 .xcodeproj 文件,然后在 运行 模拟器中打开。然后我可以在 Atom 中进行更改并在模拟器中刷新应用程序。

我今天更新到 xcode,2019 年 7 月 26 日,我收到了同样的消息。我对 iMac 进行了简单的重启,运行 "react-native run-ios" 它启动了,模拟器也启动了 运行!

error Could not find "iPhone X" simulator. Run CLI with --verbose flag for more details.

问题

如果你用最新的 Xcode (11) 试试这个,没有 iPhone X!

运行 模拟器本身,在顶部菜单中,在硬件、设备下查看,iOS 13.0.

你会看到有: - iPhone 8 - iPhone 8 加 - iPhone XS - iPhone XS 最大 - iPhone XR - ...和一些 iPads

当你执行运行-ios时,react-native被设计成匹配一个请求的设备。

内部硬编码默认值是 iPhone X。

试图匹配所请求设备的函数在:

/node_modules/@react-native-community/cli-platform-ios/build/commands/runIOS/findMatchingSimulator.js

这个函数的设计目的是让你可以给它一个设备,以及一个可选的版本号。

如果找不到给定的设备和版本,它将return默认使用列表中的第一个设备进行匹配。

但是...实际上,第一个设备是手表,任何手表都被排除在匹配之外,所以这个功能将return null。

解决方案 1 - 使用现有 Xcode iOS 设备

运行 首先是模拟器本身,如上所述,然后记下你想要的 iPhone 或 iPad。

然后将此名称作为可选参数传递给 运行-ios 命令行命令,如下所示:

react-native run-ios --simulator="iPhone 8"

解决方案 2 - 添加新的 Xcode iOS 设备

根据Xcode 11 Release Notes

"Xcode no longer creates every available iOS simulator device by default. Instead a set of the most commonly used devices are created. To create other devices — or multiple instances of a device — open the Devices window, select Simulators, click the + button, enter a name, and select the relevant device type and OS version. In Terminal, execute the xcrun simctl create command, for example xcrun simctl create "我的 iPhone 7" "iPhone 7" iOS13.0. (49428617)"

在Xcode中,您需要添加一个名为"iPhone X"的新设备。

也在这里回答:

error Could not find iPhone X simulator #418

转到 Xcode > 打开开发者工具 > 模拟器 > 添加模拟器

通过命令行添加 iPhone X 模拟器:

/Applications/Xcode.app/Contents/Developer/usr/bin/simctl create "iPhone X" com.apple.CoreSimulator.SimDeviceType.iPhone-X com.apple.CoreSimulator.SimRuntime.iOS-13-0

为我解决了这个问题。

我也被困在这个问题上很长时间 time.One 解决这个问题的方法是在 node_modules 文件夹中进行更改。步骤如下。

  1. 转到 node_modules/@react-native-community/cli/build/commands 并打开 findMatchingSimulator.js
  2. 求函数findMatchingSimulator
  3. 完成该函数后,您将看到该函数返回第一个匹配的模拟器以打开您的项目。
  4. 有一行我们遍历设备并检查设备是否可用。
  5. 在此检查前加上 console.log 以获取每个设备的详细信息。

       for (const i in device) {
           const simulator = device[i]; // Skipping non-available simulator
           console.log(JSON.stringify(simulator));
    
           if (simulator.availability !== '(available)' && simulator.isAvailable !== 'YES') 
           {
            continue;
           }
           ...................
    
  6. 现在 运行 您的 react-native run-ios 命令。您将看到控制台中打印的所有模拟器设备详细信息。选择一个你喜欢的,然后用你想要的模拟器替换 return null

    以我为例:

    return {
        udid: "E345U7U8-2213-11WQ-443D-OOJU7865P8J1",
        name: "iPhone 11",
        booted : false,
        version : null
      }

运行 react-native run-ios 再一次

试试这个

react-native run-ios --simulator="iPhone 11"