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を開くことを意味します。
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; }
このバグはRN _v0.58.0
_以降に修正されています。コミットを参照してください こちら
IIRCこのバグはXcode _10.1
_で導入されました
また、startsWith()
をincludes()
に置き換えるだけでこれを修正できます。ただし、_node_modules
_を更新するたびにこれを行うのは理想的ではないため、可能であればRNバージョンを更新することをお勧めします。