web-dev-qa-db-fra.com

Depuis la mise à niveau vers Xcode 10.2, je ne peux plus exécuter run-ios réactif natif via le cli

J'ai effectué une mise à niveau vers Xcode 10.2 aujourd'hui, car depuis la mise à niveau, je ne peux pas exécuter react-native run-ios via le 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)    

Si je lance xcrun simctl list devices tous les simulateurs montrent (Shutdown) (unavailable, runtime profile not found):

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

Quelqu'un d'autre a-t-il eu ce problème avec RN depuis la mise à niveau de xcode vers 10.2? Cela fonctionne toujours via Xcode .. mais cela signifie ouvrir Xcode.

15
smj2393

si n'a pas pu être trouvé, le simulateur persiste toujours après le remplacement des lignes de code suivantes dans runSimulator.js.

Chemin pour runSimulator.js -> /node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js

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

avec celui-ci

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

commenter les lignes suivantes après le remplacement

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

et 2ème approche après la mise à jour vers XCode 11

Xcode 11 xcrun renvoie vrai ou faux et non OUI ou NON pour la propriété isAvailable comme précédemment. Vous pouvez vérifier cela en utilisant la commande suivante

xcrun simctl list devices --json 

la commande ci-dessus imprimera tous les périphériques disponibles comme suit

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

Remplacez YES par true dans le code suivant

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

comme ça

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

Ce bug a été corrigé depuis RN v0.58.0, Voir commits ici

IIRC ce bug a été introduit dans Xcode 10.1

Vous pouvez également résoudre ce problème en remplaçant simplement startsWith() par includes(). Mais faire cela chaque fois que vous mettez à jour node_modules N'est pas idéal, donc je recommanderais de mettre à jour votre version RN si possible.

0
Evan Butler