web-dev-qa-db-ja.com

Xcode 10.2にアップグレードしてから、cliを介してreact-native run-iosを実行できなくなりました

Xcode 10.2にアップグレードしました。アップグレードすると、CLIでreact-native run-iosを実行できないためです。

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)

Xcodeを10.2にアップグレードして以来、他の誰かがこのRNの問題を抱えていましたか?それはまだXcodeを介して動作しますが、それはXcodeを開くことを意味します。

15
smj2393

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に更新した後の2番目のアプローチ

Xcode 11 xcrunは、以前のようにisAvailableプロパティに対してYESまたはNOではなく、trueまたはfalseを返します。次のコマンドを使用してそれを確認できます

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; }
0
kaushal

このバグはRN _v0.58.0_以降に修正されています。コミットを参照してください こちら

IIRCこのバグはXcode _10.1_で導入されました

また、startsWith()includes()に置き換えるだけでこれを修正できます。ただし、_node_modules_を更新するたびにこれを行うのは理想的ではないため、可能であればRNバージョンを更新することをお勧めします。

0
Evan Butler