原因:Xcode升级之后,.mm 文件中某些 C++ 方法的参数类型发生了变化,原来的 RN 代码编译报错。
解决办法
- 手动改:
在 RCTCxxBridge.mm 文件中搜索 Code Block Objective-C NSArray<id<RCTBridgeModule>> *)modules,将其替换成 NSArray<Class> *)modules。
-
脚本改(修改 Podfile):
- 将下面的代码加到 post_install 中:
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- 在命令行执行
pod install即可。
两种办法本质上都是一样的,都是去 RCTCxxBridge.mm 文件修改代码。推荐第二种方案,不容易出错。