Не удалось найти симулятор iPhone 6 после обновления до Xcode 10

Я обновил до Xcode 10, и с тех пор, как я это сделал, я не могу запустить симулятор в терминале с помощью команды react-native run-ios. Я получаю эту ошибку:

Не удалось найти симулятор iPhone 6

Когда я захожу в Xcode> Window> Devices and Simulator, там есть симулятор, и когда я делаю xcrun simctl list devices я также вижу список симулятора.

Я могу запустить приложение на своем телефоне с помощью react-native run-ios --device и из react-native run-ios --device, и я пробовал использовать несколько приложений, так что это не приложение.

Когда я иду в Xcode> Preferences> Locations, Xcode 10.0 (10A255) выбирается в Инструментах командной строки.

Я попытался перезагрузить компьютер, а также удалить и переустановить Xcode.

Есть идеи что это может быть?

Вот моя установка:

  • MacOs High Sierra 10.13.6
  • Xcode Version 10.0
  • response-native-cli: 2.0.1
  • реактивный: 0.57.1

Ответ 1

У меня была похожая проблема. React Native - 0.52.3, XCode - 10.2 beta 2

function findMatchingSimulator(simulators, simulatorName) {
  if (!simulators.devices) {
    return null;
  }
  const devices = simulators.devices;
  var match;
  for (let version in devices) {
    // Making sure the version of the simulator is an iOS (Removes Apple Watch, etc)
    if (!version.includes('iOS')) {
      continue;
    }
    [...]
  }
}
  • Открыть файл: node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js

  • Проверьте правильность версии вашего устройства, например: в строке 29 console.log(version)

  • Сравните его с условием в строке 30: if (version.indexOf('iOS') !== 0) {

У меня был список версий, как это:

com.apple.CoreSimulator.SimRuntime.watchOS-5-0 -1
com.apple.CoreSimulator.SimRuntime.tvOS-12-1 -1
com.apple.CoreSimulator.SimRuntime.tvOS-12-2 -1

Ни одна из моих версий не возвращает истину в этом состоянии... Если у вас есть

  • Замените version.indexOf('iOS') !== 0 на !version.includes('iOS') и это решит эту проблему для меня.

Ответ 2

Я пошел в node_modules/реагировать-нативный /local-cli/runIOS/findMatchingSimulator.js

И я заменил:

if (version.indexOf('iOS') !== 0 )

с

if (!version.includes("iOS" ))

А также

if (simulator.availability !== '(available)')

с

if (simulator.isAvailable !== true)

Ответ 3

Ошибка была исправлена в react-native поэтому вы можете обновить пакет в package.json:

npm install -g npm-check-updates
ncu -u react-native
npm install

Ответ 4

Нашел что-то, что решило мою проблему.
Вам нужно зайти в local-cli/runIOS/findMatchingSimulator.js в модуле узла-реагирования и изменить строку 37 для

if (
        simulator.availability !== '(available)' &&
        simulator.isAvailable !== 'YES'
) {'

Больше информации о решении и проблеме на реакции-родной github:
https://github.com/facebook/react-native/commit/1031872
https://github.com/facebook/react-native/issues/21571

Ответ 5

Я просто хочу поделиться с вами, ребята, как я это исправил, может быть, это может кому-то помочь.

Отредактируйте этот файл: node_modules/Reaction-native/local-cli/runIOS/findMatchingSimulator.js

Изменить:

if (!version.startsWith('iOS') && !version.startsWith('tvOS')) {
  continue;
}

Для того, чтобы:

if (!version.startsWith('com.apple.CoreSimulator.SimRuntime.iOS') 
    && !version.startsWith('com.apple.CoreSimulator.SimRuntime.tvOS')) {
  continue;
}

Это сработало для меня.

Я использовал console.log(version), чтобы увидеть, что я получил от версии переменной, а значение не было ожидаемым, как и должно быть.

Ответ 6

это может быть решено, чтобы исправить файл ниже.

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

заменить эту строку

if (!version.startsWith('iOS') && !version.startsWith('tvOS')) {

с

if (!version.includes('iOS') && !version.includes('tvOS')) {

Ответ 7

При использовании собственной 0.55.3 -версии 0.55.3 с XCode 10 мне пришлось сделать два изменения, чтобы запустить react-native run-ios.

Внутри node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js:

  1. Изменение, как описано @martin-leroux:

    + Изменить

    // Skipping non-available simulator
    if (simulator.availability !== true) {
    

    в

    // Skipping non-available simulator
    if (
        simulator.availability !== '(available)' &&
        simulator.isAvailable !== 'YES'
    ) {'
    
  2. Измените строку, упомянутую @samernady:

    + Изменить

    // Making sure the version of the simulator is an iOS or tvOS (Removes Apple Watch, etc)
    if (!version.startsWith('iOS') && !version.startsWith('tvOS')) {
    

    в

    // Making sure the version of the simulator is an iOS or tvOS (Removes Apple Watch, etc)
    if (!version.includes('iOS') && !version.startsWith('tvOS')) {
    

Ответ 8

один вариант, который работал для меня

Проверьте список симуляторов, установленных на вашем Mac, используя

xcrun simctl list --json devices

в списке симулятора выберите любое имя симулятора и запустите так

react-native run-ios --simulator 'iPhone 6s'

Надеюсь, что это работает для вас

Ответ 9

Перейдите в node_modules/Reaction-native/local-cli/runIOS/и в findMatchingSimulator.js замените строку 30 на

if (version.indexOf('com.apple.CoreSimulator.SimRuntime.iOS') !== 0) {

Ответ 10

Я решил мою проблему с помощью этого сценария. Пожалуйста, посмотрите

fooobar.com/questions/17028096/...

Ответ 11

xcrun simctl list --json devices

Редактируйте node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js самостоятельно. Убедитесь, что функция findMatchingSimulator возвращает объект match, например

{
    udid: simulator.udid,
    name: simulator.name,
    version
}

Ответ 12

Что я должен был сделать:

 npm install -g npm

Ответ 13

удалите эти строки из package.json  "реагировать": "XXXXXXXX",  "реагировать-родной": "ГГГГГГГГ",

тогда беги npm install --save реактивная реакция