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.
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; }
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.