15

我今天升级到 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)

自从将 xcode 升级到 10.2 后,还有其他人遇到过 RN 的这个问题吗?它仍然可以通过 Xcode 运行.. 但这意味着打开 Xcode。

4

5 回答 5

23

我这样解决了;

首先,你需要走这条路

node_modules/react-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

于 2019-03-27T01:02:12.437 回答
1

我想我也会在这里添加我的解决方案,希望对某人有所帮助。我刚刚升级到 Mac OS Mojave,还升级到了 Xcode 10.2。我的整个反应原生项目都坏了,真的很糟糕。于是我将 Xcode 降级回 10.1。然后,我开始看到这个错误,在运行 react-native run-ios 后说:

找不到 iPhone X 模拟器

上面的“hack”通过使用上面的更新编辑 findMatchingSimulator.js 文件来修复它。

然后,react-native run-ios 走得更远,下一个错误是:

:CFBundleIdentifier,不存在

我通过以下方式解决了这个问题:

  1. cd node_modules/react-native/第三方/glog*TabEnter
  2. 。/配置

现在 react-native run-ios 可以工作了。我希望这对某人有所帮助,这在@ss中很痛苦。

于 2019-05-05T11:41:50.020 回答
0

自 RN 以来,此错误已得到修复,请参阅此处v0.58.0的提交

IIRC 这个错误是在 Xcode 中引入的10.1

此外,您可以通过简单地替换为来解决此startsWith()问题includes()。但是每次更新时都这样做node_modules并不理想,因此我建议尽可能更新您的 RN 版本。

于 2019-04-03T22:29:17.977 回答
0

如果在 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 而不是 isAvailable 属性的 YES 或 NO。您可以使用以下命令进行检查

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; }
于 2019-06-17T07:53:54.100 回答
-1

你甚至只是做这样的事情

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

于 2019-03-28T15:27:34.577 回答