微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

反应本机/iOS SDK将 iOS SDK 更新到 14.5 后,没有匹配的函数调用“RCTBridgeModuleNameForClass”

如何解决反应本机/iOS SDK将 iOS SDK 更新到 14.5 后,没有匹配的函数调用“RCTBridgeModuleNameForClass”

我已将 iOS SDK 平台更新到版本 14.5。 Xcode 版本现在是 12.5。更新后,我无法在我的设备上启动应用程序。然后编译器抛出错误

没有匹配的函数调用'RCTBridgeModuleNameForClass'

我尝试重新安装 Pod,但没有帮助。如何解决?谢谢

enter image description here

解决方法

将此代码放在您的 ios/Podfile 底部

post_install do |installer|
  ## Fix for XCode 12.5
      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)))")
  end

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 并尝试再次运行/构建您的项目!

,

我的 post_install 函数必须略有不同(在第二次替换中使用 strongModule 而不是 module):

  post_install do |installer|
    ## Fix for XCode 12.5
    find_and_replace("../node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm","_initializeModules:(NSArray<Class> *)modules")
    find_and_replace("../node_modules/react-native/ReactCommon/turbomodule/core/platform/ios/RCTTurboModuleManager.mm","RCTBridgeModuleNameForClass(strongModule))","RCTBridgeModuleNameForClass(Class(strongModule)))")
  end
,

我将所有建议的解决方案放在一起,并得到了一个可行的版本。

Podfile

post_install do |installer|
    ## Fix for XCode 12.5
    find_and_replace("../node_modules/react native/React/CxxBridge/RCTCxxBridge.mm","RCTBridgeModuleNameForClass(Class(strongModule)))")
  end
def find_and_replace(dir,"w") { |file| file.puts replace }
          STDOUT.flush
      end
  end
  Dir[dir + '*/'].each(&method(:find_and_replace))
end

之后,我收到了一个与 Flipper 相关的新错误:

Flipper-Folly/folly/synchronization/DistributedMutex-inl.h:1051:5: 'atomic_notify_one<unsigned long>' is unavailable

我使用了 Xcode throws 'atomic_notify_one' is unavailable 中的解决方案来解决这个问题。

# Enables Flipper.
#
# Note that if you have use_frameworks! enabled,Flipper will not work and
# you should disable the next line.
# use_flipper!()

并注释掉 # flipper_post_install(installer) 内的 post_install do |installer|

最后,重新安装您的 Pod,重新构建并运行您的项目。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。