no matching function for call to RCTBridgemoduleNameForClass

更新到最新的Xcode13.1后,运行一个RN项目,结果报错了。 显示:no matching function for call to RCTBridgemoduleNameForClass。 我点进去一看,确实是方法不一致,方法存在,但是方法里设定的参数类型和调用方法时传的参数类型不一致,所以就出现了这个错误。

继百度谷歌之后,真的是整了一天,才把这个RN项目重新跑起来,真的是太难了!

顺便说一下这个问题解决的过程吧。

首先根据百度的文章更新了podfile,我的是在原有的post_install do|install里加的。

  post_install do |installer|
#    flipper_post_install(installer)
    
#    下面两行是添加解决一个问题
    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(strongModule))", "RCTBridgeModuleNameForClass(Class(strongModule)))")
    find_and_replace("Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h",
     "atomic_notify_one(state)", "folly::atomic_notify_one(state)")

    find_and_replace("Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h",
     "atomic_notify_one(state)", "folly::atomic_notify_one(state)")

    find_and_replace("Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h",
     "atomic_wait_until(&state, previous | data, deadline)", "folly::atomic_wait_until(&state, previous | data, deadline)")
  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
  
  
end

图片中的1是我第一次添加的,代码的意思就找到这个文件把报错的方法替换一下。

我操作完1后,pod install,(这里如果pod install时出错根据终端上的提示操作别的命令,这中间我也折腾了很久,不懂就百度)还是报错了,这个时候是另外一个错误:“atomic_notify_one<unsigned long> is unavailable”。 然后就有了上图的2操作,还是一样的,替换方法。

再次pod install,这个时候又来错误了。 Permission denied @ rb_sysopen - Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h 然后我就把那个1注释掉了,工程里appDelegate有用到Flipper的代码我也注释掉了。因为我不熟悉React Native,我都不清楚这个Flipper是干嘛的,百度告诉我这就是个移动端调试工具,于是放心的注释掉了,要这玩意儿干啥。

一番折腾,总算是跑起来了。说句实在话,我真的是不太喜欢React Native,每次要是更新啥都贼不方便,要浪费很多时间,特别是第一次从SVN上把代码拉下来时,真的是各种报错(Podfile文件一堆引入,其实我都看不太懂,只知道需要引入这么多)~算了,我就是个小白,专门写这个的应该不会觉得不好用的。

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