Xcode 13.0编译RN应用报错No matching function for call to 'RCTBridgeModuleNameForClass'
修复方案
Xcode 13 强化了 Objective-C 与 C++ 混编场景下的类型校验规则,原有 Xcode 12.5 的补丁仅覆盖了两处源码修改,缺少对 RCTTurboModuleManager.mm 另一处调用点的适配,因此会继续抛出函数匹配失败的错误。
你只需要修改 Podfile 中的 post_install 段,新增一处替换规则即可,完整的修复代码如下:
post_install do |installer| flipper_post_install(installer) # Xcode 12.5 + 13 通用修复 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 find_and_replace("../node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm", "_initializeModules:(NSArray<id<RCTBridgeModule>> *)modules", "_initializeModules:(NSArray<Class> *)modules") find_and_replace("../node_modules/react-native/ReactCommon/turbomodule/core/platform/ios/RCTTurboModuleManager.mm", "RCTBridgeModuleNameForClass(module))", "RCTBridgeModuleNameForClass(Class(module)))") # 新增Xcode 13专属适配规则 find_and_replace("../node_modules/react-native/ReactCommon/turbomodule/core/platform/ios/RCTTurboModuleManager.mm", "RCTBridgeModuleNameForClass(strongModule))", "RCTBridgeModuleNameForClass(Class(strongModule)))") end
修改完成后按以下步骤操作即可正常构建:
- 保存 Podfile 文件,删除项目 iOS 目录下的
Podfile.lock和Pods文件夹 - 清空 Xcode 缓存:打开 Xcode 偏好设置 → Locations → 点击 DerivedData 右侧的小箭头进入文件夹,删除整个 DerivedData 目录
- 在 iOS 目录下执行
pod install,完成后重新打开.xcworkspace文件构建项目即可
如果你的 React Native 版本在 0.64.2 及以上,官方已经内置了该问题的修复,可直接升级对应版本避免手动打补丁的后续兼容问题。
内容的提问来源于stack exchange,提问作者Fábio Lourenço
相关产品推荐
相关产品推荐

