我已更新到Xcode 10,并且由于这样做,我无法在终端使用命令react-native run-ios
运行模拟器。我收到此错误:
找不到iPhone 6模拟器
当我转到“ Xcode”>“窗口”>“设备和模拟器”时,模拟器就在其中,当我执行xcrun simctl list devices
时,我还会看到模拟器列表。
我可以使用react-native run-ios --device
和Xcode在手机上运行该应用程序,并且尝试使用多个应用程序,因此它不是该应用程序。
当我转到Xcode>首选项>位置时,在命令行工具中选择了Xcode 10.0(10A255)。
我尝试重新启动计算机,以及删除并重新安装Xcode。
有什么想法吗?
这是我的设置:
答案 0 :(得分:16)
我有类似的问题。 React Native-0.52.3,XCode-10.2 beta 2
function findMatchingSimulator(simulators, simulatorName) {
if (!simulators.devices) {
return null;
}
const devices = simulators.devices;
var match;
for (let version in devices) {
// Making sure the version of the simulator is an iOS (Removes Apple Watch, etc)
if (!version.includes('iOS')) {
continue;
}
[...]
}
}
打开文件:node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js
检查您的设备版本是否正确,例如:第29行console.log(version)
将其与第30行的条件进行比较:if (version.indexOf('iOS') !== 0) {
我有这样的版本列表:
com.apple.CoreSimulator.SimRuntime.watchOS-5-0 -1
com.apple.CoreSimulator.SimRuntime.tvOS-12-1 -1
com.apple.CoreSimulator.SimRuntime.tvOS-12-2 -1
在这种情况下,我的任何版本都不会返回true ...如果您拥有
version.indexOf('iOS') !== 0
代替!version.includes('iOS')
,它为我解决了这个问题。答案 1 :(得分:10)
该错误已在react-native
中修复,因此您可以更新package.json中的软件包:
npm install -g npm-check-updates
ncu -u react-native
npm install
答案 2 :(得分:7)
找到了解决我问题的方法。
您需要进入react-native节点模块中的local-cli/runIOS/findMatchingSimulator.js
并将第37行更改为
if (
simulator.availability !== '(available)' &&
simulator.isAvailable !== 'YES'
) {`
有关解决方案和React-native github问题的更多信息:
https://github.com/facebook/react-native/commit/1031872
https://github.com/facebook/react-native/issues/21571
答案 3 :(得分:5)
我去了node_modules / react-native / local-cli / runIOS / findMatchingSimulator.js
我已替换:
if (version.indexOf('iOS') !== 0 )
使用
if (!version.includes("iOS" ))
和
if (simulator.availability !== '(available)')
使用
if (simulator.isAvailable !== true)
答案 4 :(得分:2)
我只想与大家分享我如何解决它,也许它可以帮助某人。
编辑此文件: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;
}
对我有用。
我使用了 console.log(version)来查看我从变量 version 中得到了什么,并且该值不是预期的。
答案 5 :(得分:0)
一个对我有用的选项
使用
检查Mac中安装的模拟器的列表myFetch(apiUrl, httpOptions) {
return axios.get(apiUrl, httpOptions)
}
在模拟器列表上,选择任何模拟器名称并像这样运行
xcrun simctl list --json devices
希望这对您有用
答案 6 :(得分:0)
转到node_modules / react-native / local-cli / runIOS /,然后在findMatchingSimulator.js中将第30行替换为
if (version.indexOf('com.apple.CoreSimulator.SimRuntime.iOS') !== 0) {
答案 7 :(得分:0)
使用带有本机版本0.55.3
和 XCode 10 ,我必须做两次 更改才能运行react-native run-ios
。
在node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js
内部:
@ martin-leroux描述的更改:
更改
// Skipping non-available simulator
if (simulator.availability !== true) {
到
// Skipping non-available simulator
if (
simulator.availability !== '(available)' &&
simulator.isAvailable !== 'YES'
) {`
更改@samernady提到的行:
更改
// Making sure the version of the simulator is an iOS or tvOS (Removes Apple Watch, etc)
if (!version.startsWith('iOS') && !version.startsWith('tvOS')) {
到
// Making sure the version of the simulator is an iOS or tvOS (Removes Apple Watch, etc)
if (!version.includes('iOS') && !version.startsWith('tvOS')) {
答案 8 :(得分:0)
可以解决以下问题。
/node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js
替换此行
if (!version.startsWith('iOS') && !version.startsWith('tvOS')) {
使用
if (!version.includes('iOS') && !version.includes('tvOS')) {
答案 9 :(得分:0)
xcrun simctl list --json devices
自己编辑node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js
。
确保findMatchingSimulator
函数返回一个match
对象,如
{
udid: simulator.udid,
name: simulator.name,
version
}
答案 10 :(得分:0)
我有一个findMatchingSimulator.js的自重构版本。如果将来有人仍然会遇到此问题,并且上述解决方案无法解决您的问题,则只需覆盖... node_modules / react-native / local-cli / runIOS / findMatchingSimulator.js中的findMatchingSimulator-Method 使用以下代码:
function findMatchingSimulator(simulators, simulatorName) {
if (!simulators.devices) {
return null;
}
const devices = simulators.devices;
var match = null;
for(let version in devices){
//Skip WatchOS
if(!version.includes("tvOS") && !version.includes("iOS")){
continue;
}
for(let d in devices[version]){
var currentDevice = devices[version][d];
if(!currentDevice.isAvailable){
continue;
}
if(currentDevice.state === "Booted" ){
let booted = currentDevice.state === "Booted";
if(currentDevice.name === simulatorName ){
return {
udid: currentDevice.udid,
name: currentDevice.name,
booted,
version,
};
}else if(!match){
//keep track of first available & bootable device
match = {
udid: currentDevice.udid,
name: currentDevice.name,
booted,
version,
};
}
}
}
}
if (match) {
return match;
}
return null;
}
}
编辑:此代码将选择一个已打开的模拟器,并且您仍然可以使用--simulator =“ NAME”参数。
答案 11 :(得分:-1)
我要做的是:
npm install -g npm
答案 12 :(得分:-1)
从package.json中删除这些行 “反应”:“ XXXXXXXX”, “ react-native”:“ YYYYYYYYY”,
然后运行 npm install --save react-native react