После обновления до Xcode 10.2 я больше не могу запускать ios run-ios через cli.

Сегодня я обновился до Xcode 10.2, так как после обновления я не могу запустить react-native run-ios через cli:

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

Found Xcode workspace a.xcworkspace

Could not find iPhone X simulator

Error: Could not find iPhone X simulator
    at resolve (/Users/user/Documents/work/a/a-light-ui/node_modules/react-native/local-cli/runIOS/runIOS.js:149:13)
    at new Promise (<anonymous>)
    at runOnSimulator (/Users/user/Documents/work/a/a-light-ui/node_modules/react-native/local-cli/runIOS/runIOS.js:134:10)
    at Object.runIOS [as func] (/Users/user/Documents/work/a/a-light-ui/node_modules/react-native/local-cli/runIOS/runIOS.js:106:12)
    at Promise.resolve.then (/Users/user/Documents/work/a/a-light-ui/node_modules/react-native/local-cli/cliEntry.js:117:22)    

Если я запускаю xcrun simctl list devices, все симуляторы показывают (Shutdown) (unavailable, runtime profile not found):

iPhone X (7AADFA50-7B57-4A40-8434-9A86F345D7ED) (Shutdown) (unavailable, runtime profile not found)

У кого-нибудь еще была эта проблема с RN с момента обновления xcode до 10.2? Он по-прежнему работает через Xcode ... но это означает открытие Xcode.


person smj2393    schedule 26.03.2019    source источник
comment
это может вам помочь: stackoverflow.com/questions/54504076/   -  person Ankush Rishi    schedule 26.03.2019
comment
Попробуйте переустановить инструменты командной строки   -  person Sarmad Shah    schedule 26.03.2019
comment
Попробуйте этот сценарий. stackoverflow.com/a/56920807/706888   -  person omprakash8080    schedule 07.07.2019


Ответы (5)


Решил вот так;

Во-первых, вам нужно пройти этот путь

node_modules / реагировать-native / local-cli / runIOS / findMatchingSimulator.js

а потом;

Вам нужно изменить этот код

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

с участием

if (!version.startsWith('com.apple.CoreSimulator.SimRuntime.iOS') && !version.startsWith('com.apple.CoreSimulator.SimRuntime.tvOS'))

Надеюсь, это будет полезно,

ссылка: https://github.com/facebook/react-native/issues/21498#issuecomment-476621627

person krnz    schedule 27.03.2019
comment
Это работает! Спасибо @Abdullah K. Надеюсь, они скоро выпустят правильное исправление, поскольку это означает, что нам нужно будет вносить это изменение каждый раз, когда мы запускаем npm install - person smj2393; 27.03.2019
comment
Это работает. Также нашел решение здесь: github.com/facebook/react-native/issues/23282 < / а> - person ljmocic; 03.04.2019

Я думал, что добавлю сюда свое решение в надежде кому-то помочь. Я только что обновился до Mac OS Mojave, а также до Xcode 10.2. Весь мой проект React Native сломался, очень плохо. Затем я понизил версию Xcode до версии 10.1. Затем я начал видеть эту ошибку, как сказано после запуска run-ios для реакции:

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

вышеупомянутый «хак» исправил это, отредактировав файл findMatchingSimulator.js с указанными выше обновлениями.

Затем run-ios, поддерживающий реакцию, пошел дальше, следующая ошибка была:

: CFBundleIdentifier, не существует

Я исправил это:

  1. cd node_modules / react-native / third-party / glog * Tab Enter
  2. ./configure

Теперь работает run-ios, поддерживающая реакцию. Надеюсь, это кому-то поможет, это было головной болью в @ss.

person shinercoder    schedule 05.05.2019

Эта ошибка исправлена ​​с RN v0.58.0, см. здесь.

IIRC эта ошибка была введена в Xcode 10.1

Кроме того, вы можете исправить это, просто заменив startsWith() на includes(). Но делать это каждый раз, когда вы обновляете node_modules, далеко не идеально, поэтому я бы порекомендовал обновить вашу версию RN, если это возможно.

person Evan Butler    schedule 03.04.2019

если не удалось найти, симулятор все еще сохраняется после замены следующих строк кода в runSimulator.js.

Путь для runSimulator.js -> /node_modules/react-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; }

прокомментируйте следующие строки после замены

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

и второй подход после обновления до XCode 11

Xcode 11 xcrun возвращает true или false, а не YES или NO для свойства isAvailable, как раньше. Вы можете проверить это с помощью следующей команды

xcrun simctl list devices --json 

команда выше распечатает все доступные устройства, как показано ниже

 com.apple.CoreSimulator.SimRuntime.iOS-12-2" : [
  {
    "state" : "Booted",
    "isAvailable" : true,
    "name" : "iPhone X",
    "udid" : "E53748D1-628B-4A99-A419-4D7AE7CE4745"
  }
]

Замените YES на true в следующем коде

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

нравится

if ( simulator.availability !== '(available)' && simulator.isAvailable !== true ) { continue; }
person kaushal    schedule 17.06.2019

Вы даже просто делаете что-то вроде этого

if (version.indexOf('iOS') === -1)...

person Tausif    schedule 28.03.2019