React-Native: Could Not find iPhone 6 Simulator問題

最近在github上下載的RN項目出現了兩個奇怪的問題,經過網上查找和自己的實踐之後,記錄在此

Could Not Find iPhone 6 Simulator

運行項目之後,出現如下問題:
Demo
出現這個問題的原因是很明顯,是因爲找不到iPhone模擬器,最終經過自己查找資料和一步一步跟蹤調試,解決方法如下:

在執行npm install之後,我們打開node_modules/react-native/local-cli/runiOS/findMatchingSimulator.js文件,定位到第30行,代碼如下所示:
Demo
可以看到,代碼寫的是如果模擬器的版本號不是以iOS開頭的,則中斷執行,但是在這裏我們可以使用console.log(version),將version輸出來看看,如下所示:
Demo
可以看到升級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,得到以下結果:
Demo
可以看到,現在已經沒有availability了,所以這裏我們改用isAvailable方法,將以上代碼替換爲如下代碼:

if (simulator.isAvailable !== true) {
        continue;
      }

至此,該問題即可解決,但是我並沒有指定任何模擬器,那模擬器是在哪裏指定的呢?經過一步一步的跟蹤,原來如果沒有使用–simulator指定模擬器,默認的模擬器在 node_modules/react-native/local-cli/runiOS/runiOS.js 裏面,滾動到最後的module.exports,裏面有一個options,可以看到默認的模擬器即在這裏指定:
Demo
修改default字段,以指定自己的模擬器即可。

CFBundleIdentifier", Does Not Exist

以上問題修改之後,又出現了另外一個問題,CFBundleIdentifier", Does Not Exist,使用Xcode打開項目,編譯,發現找不到config.h文件,根據查找的資料,最終該問題的解決辦法如下:

  1. 切換到 *node_modules/react-native/third-party/glog-{X}.{X}.{X}/*目錄下,X爲本機glog版本號
  2. 運行./configure腳本
  3. 打開Xcode重新編譯項目
  4. react-native run-ios
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章