我的代码我的坑(十四) —— 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> *)modules", "_initializeModules:(NSArray *)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 *)_initializeModules:(NSArray *)modules
                               withDispatchGroup:(dispatch_group_t)dispatchGroup
                                lazilyDiscovered:(BOOL)lazilyDiscovered
//RCTTurboModuleManager.mm中307行
RCTBridgeModuleNameForClass(Class(strongModule)));

后记

本篇主要讲述了Xcode 12.5React编译不过的问题,感兴趣的给个赞或者关注~~~

你可能感兴趣的:(我的代码我的坑(十四) —— Xcode 12.5中React编译不过的问题(一))