用react-native開發(fā)時(shí)雕拼,一切準(zhǔn)備就緒了曼尊,現(xiàn)在我們運(yùn)行下項(xiàng)目吧菲盾。yarn react-native run-ios一下昏兆,然后發(fā)現(xiàn)控制臺(tái)(或者終端)居然報(bào)錯(cuò):Could not find iPhone X simulator。當(dāng)你嘗試指定模擬器運(yùn)行試試:react-native run-ios --simulator="iPhone 8"报强,然后發(fā)現(xiàn)還是報(bào)錯(cuò)灸姊,只不過(guò)報(bào)錯(cuò)換成了Could not find iPhone 8 simulator。這里貼一下曾經(jīng)我看到的Stack Overflow上給出的解決辦法秉溉。其實(shí)原因不在這里厨钻。
我的react-native版本是:0.57.5
請(qǐng)打開文件/node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js,看42行的這個(gè)判斷坚嗜。其實(shí)我們可以在42行之前加個(gè)打印console.log(version)查看所有的設(shè)備version,然后就會(huì)看到诗充,根本沒有像42行判斷里面提到的iOS和tvOS開始的version苍蔬。所以這個(gè)for in循環(huán)每次執(zhí)行到這里就跳出去了。
這不是它的本意蝴蜓,下面的代碼不執(zhí)行的話就會(huì)根本找不到simulator了碟绑,所以就會(huì)一直報(bào)錯(cuò)Could not find iPhone * simulator,所以我們需要改一下它的代碼茎匠。
注意格仲,下面是解決辦法了。
解決辦法
我們只需要注釋掉兩處代碼诵冒,然后新增兩處代碼就可以了凯肋,其實(shí)就是把他的判斷改變了。
42-44行注釋掉汽馋,改成
if (!version.startsWith('com.apple.CoreSimulator.SimRuntime.iOS') && !version.startsWith('com.apple.CoreSimulator.SimRuntime.tvOS')) {
continue;
}
51-56行注釋掉侮东,改成
if (simulator.isAvailable !== true) {
continue;
}
最后:這個(gè)辦法有個(gè)弊端圈盔,那就是每次你刪掉node_modules重新安裝依賴后都要這樣改一下,因?yàn)槊看沃匦掳惭b后這些文件還會(huì)重置悄雅。但是這個(gè)方法真的管用