我的代碼我的坑(十四) —— Xcode 12.5中React編譯不過的問題(一)

版本記錄

版本號(hào) 時(shí)間
V1.0 2021.04.29 星期四

前言

做了好幾個(gè)APP,碰到了大大小小的很多坑,以前碰到坑,解決了就結(jié)束了,這里想把自己碰到的坑記錄下來,一來給自己備查二來希望可以幫助到大家。感興趣的可以關(guān)注下,也歡迎大家補(bǔ)充留言,感興趣的看上面幾篇文章。
1. 我的代碼我的坑(一) —— 自簽名證書導(dǎo)致請(qǐng)求取消的問題(一)
2. 我的代碼我的坑(二) —— UIImageView動(dòng)畫點(diǎn)擊后動(dòng)畫和圖片消失的問題(一)
3. 我的代碼我的坑(三) —— iOS9系統(tǒng)WKWebView加載頁面白板的問題(一)
4. 我的代碼我的坑(四) —— iOS12系統(tǒng)自定義漸變色UISwitch手機(jī)橫屏的異常問題(一)
5. 我的代碼我的坑(五) —— 不可編輯狀態(tài)的UITextView文本高度大于視圖高度默認(rèn)滾動(dòng)到底部的問題(一)
6. 我的代碼我的坑(六) —— UITextField輸入長度自動(dòng)截取時(shí)漢字和拼音帶來的末位截取不能正常輸入漢字的問題(一)
7. 我的代碼我的坑(七) —— UIImageView做序列幀動(dòng)畫結(jié)束后沒有回調(diào)并且“隱藏”(一)
8. 我的代碼我的坑(八) —— iOS 13.1.2 Debug調(diào)試模式系統(tǒng)layoutSubviews中修改frame循環(huán)調(diào)用導(dǎo)致的崩潰(一)
9. 我的代碼我的坑(九) —— 系統(tǒng)鍵盤拼音全鍵無法正常聯(lián)想以及輸入漢字高亮區(qū)識(shí)別不計(jì)入長度計(jì)數(shù)的問題(一)
10. 我的代碼我的坑(十) —— iOS9 Xib實(shí)例化的UITableViewCell中UIButton和UISwitch等控件的IBAction點(diǎn)擊無響應(yīng)的問題(一)
11. 我的代碼我的坑(十一) —— macOS Mojave 和 xcode 11.1 (11A1027)環(huán)境下運(yùn)行iphonex以上流海屏xcode install時(shí)xocde崩潰閃退的問題(一)
12. 我的代碼我的坑(十二) —— iOS10字體DIN Condense Bold字體顯示不全頂部被切割的問題(一)
13. 我的代碼我的坑(十三) —— 狀態(tài)欄高度的動(dòng)態(tài)計(jì)算(一)

問題描述

今天晚上吃完飯?jiān)诙虝盒菹?,屏幕突然蹦出來一個(gè)彈窗,就是Xcode那種install component類似彈窗,我沒多想就點(diǎn)了install,因?yàn)橐郧翱偸前惭b官方推送的插件或者命令行工具等,這一直都沒有什么問題,但是這次我踩到坑了。

當(dāng)我安裝完以后,我吃飯前一直在調(diào)試的項(xiàng)目跑不起來了,這很詭異啊,我沒做什么就是點(diǎn)了個(gè)升級(jí)Xcode組件或者命令行工具,怎么剛好好的項(xiàng)目就跑不起來了呢?也是頭大了。

一開始我以為是Xcode的緩存或者什么問題,所以經(jīng)歷過了清緩存以及重啟等各種折騰,但是還是編譯不過,所以應(yīng)該還是我剛才升級(jí)那個(gè)什么彈窗就給搞壞了。

我們還是先看下編譯不過的錯(cuò)誤提示吧。

可以看見是4處錯(cuò)誤,都是報(bào)在React框架內(nèi),再次陷入蒙蔽,怎么Xcode升級(jí)個(gè)組件或者插件會(huì)影響這里呢?

開啟暴雷模式了。


問題解決

前面說過了,各種開始以為的緩存或者重啟都沒解決問題,所以著手從編譯不過的提示入手。

其實(shí)這里有兩個(gè)方法可以解決:

  • 方法1:就是重新下載Xcode 12.4的版本,然后降低到那個(gè)版本就沒有這個(gè)問題了。具體可以從官網(wǎng)下載。

  • 方法2:就是依靠強(qiáng)大的網(wǎng)絡(luò),這里我們還是使用Google,搜索找到了一條完全相似的信息,以前有很多人遇到了這個(gè)問題。已經(jīng)有人在github的react-native發(fā)過了issue - 0.61.5 → 0.62.0 RCTBridgeModule Error #28405。其實(shí)這是rn的一個(gè)問題,在新版本的rn中已經(jīng)修復(fù)了這個(gè)問題。

翻看這條issue的記錄,可以看見不少人遇到完全相同的問題,比如下面這位:

可以看見我和他遇見的是相同的問題,下面也有人給出來了解決辦法,比如:

其實(shí)就是修改了Podfile

post_install do |installer|
    ## Fix for XCode 12.5 beta
    find_and_replace("../node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm",
    "_initializeModules:(NSArray<id<RCTBridgeModule>> *)modules", "_initializeModules:(NSArray<Class> *)modules")
end

并在Podfile末尾加上下面的函數(shù):

def find_and_replace(dir, findstr, replacestr)
  Dir[dir].each do |name|
      text = File.read(name)
      replace = text.gsub(findstr,replacestr)
      if text != replace
          puts "Fix: " + name
          File.open(name, "w") { |file| file.puts replace }
          STDOUT.flush
      end
  end
  Dir[dir + '*/'].each(&method(:find_and_replace))
end
  • 方法3:升級(jí)rn,更新到最新的版本。

這里為了一勞永逸,所以我和平臺(tái)同學(xué)溝通,升級(jí)了rn。在升級(jí)之前改了2處代碼進(jìn)行驗(yàn)證,結(jié)果編譯通過了。就是下面兩處:

//RCTCxxBridge.mm中771行
- (NSArray<RCTModuleData *> *)_initializeModules:(NSArray<Class> *)modules
                               withDispatchGroup:(dispatch_group_t)dispatchGroup
                                lazilyDiscovered:(BOOL)lazilyDiscovered
//RCTTurboModuleManager.mm中307行
RCTBridgeModuleNameForClass(Class(strongModule)));

后記

本篇主要講述了Xcode 12.5React編譯不過的問題,感興趣的給個(gè)贊或者關(guān)注~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容