我的代碼我的坑(十四) —— Xcode 12.5中React編譯不過的問題(一) 版本記錄 前言 問題描述 問題解決 後記

版本記錄

版本號 時間
V1.0 2021.04.29 星期四

前言

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

問題描述

今天晚上喫完飯在短暫休息,屏幕突然蹦出來一個彈窗,就是Xcode那種install component類似彈窗,我沒多想就點了install,因爲以前總是安裝官方推送的插件或者命令行工具等,這一直都沒有什麼問題,但是這次我踩到坑了。

當我安裝完以後,我喫飯前一直在調試的項目跑不起來了,這很詭異啊,我沒做什麼就是點了個升級Xcode組件或者命令行工具,怎麼剛好好的項目就跑不起來了呢?也是頭大了。

一開始我以爲是Xcode的緩存或者什麼問題,所以經歷過了清緩存以及重啓等各種折騰,但是還是編譯不過,所以應該還是我剛纔升級那個什麼彈窗就給搞壞了。

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

可以看見是4處錯誤,都是報在React框架內,再次陷入矇蔽,怎麼Xcode升級個組件或者插件會影響這裏呢?

開啓暴雷模式了。


問題解決

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

其實這裏有兩個方法可以解決:

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

  • 方法2:就是依靠強大的網絡,這裏我們還是使用Google,搜索找到了一條完全相似的信息,以前有很多人遇到了這個問題。已經有人在github的react-native發過了issue - 0.61.5 → 0.62.0 RCTBridgeModule Error #28405。其實這是rn的一個問題,在新版本的rn中已經修復了這個問題。

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

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

其實就是修改了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末尾加上下面的函數:

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:升級rn,更新到最新的版本。

這裏爲了一勞永逸,所以我和平臺同學溝通,升級了rn。在升級之前改了2處代碼進行驗證,結果編譯通過了。就是下面兩處:

//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編譯不過的問題,感興趣的給個贊或者關注~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章