最近在github上下載的RN項目出現了兩個奇怪的問題,經過網上查找和自己的實踐之後,記錄在此
Could Not Find iPhone 6 Simulator
運行項目之後,出現如下問題:
出現這個問題的原因是很明顯,是因爲找不到iPhone模擬器,最終經過自己查找資料和一步一步跟蹤調試,解決方法如下:
在執行npm install之後,我們打開node_modules/react-native/local-cli/runiOS/findMatchingSimulator.js文件,定位到第30行,代碼如下所示:
可以看到,代碼寫的是如果模擬器的版本號不是以iOS開頭的,則中斷執行,但是在這裏我們可以使用console.log(version),將version輸出來看看,如下所示:
可以看到升級Xcode之後,現有的版本號全部以com.apple.CoreSimulator開頭,這樣之前的代碼就不適用了,我在網上查到的都是說在後面加一句,即修改成下面這樣即可:
if (version.indexOf('iOS') !== 0 && !version.includes('iOS')) {
continue;
}
這樣當然是可以的,不過我是直接修改成以下代碼,因爲升級之後第一個條件已經不成立了:
if (!version.includes('iOS')) {
continue;
}
但此時依然提示這個錯誤,於是繼續走下去,發現還有一個條件,如下所示:
if (simulator.availability !== '(available)') {
continue;
}
同樣的,我們使用console.log輸出simulator,得到以下結果:
可以看到,現在已經沒有availability了,所以這裏我們改用isAvailable方法,將以上代碼替換爲如下代碼:
if (simulator.isAvailable !== true) {
continue;
}
至此,該問題即可解決,但是我並沒有指定任何模擬器,那模擬器是在哪裏指定的呢?經過一步一步的跟蹤,原來如果沒有使用–simulator指定模擬器,默認的模擬器在 node_modules/react-native/local-cli/runiOS/runiOS.js 裏面,滾動到最後的module.exports,裏面有一個options,可以看到默認的模擬器即在這裏指定:
修改default字段,以指定自己的模擬器即可。
CFBundleIdentifier", Does Not Exist
以上問題修改之後,又出現了另外一個問題,CFBundleIdentifier", Does Not Exist,使用Xcode打開項目,編譯,發現找不到config.h文件,根據查找的資料,最終該問題的解決辦法如下:
- 切換到 *node_modules/react-native/third-party/glog-{X}.{X}.{X}/*目錄下,X爲本機glog版本號
- 運行./configure腳本
- 打開Xcode重新編譯項目
- react-native run-ios