更新到最新的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文件一堆引入,其实我都看不太懂,只知道需要引入这么多)~算了,我就是个小白,专门写这个的应该不会觉得不好用的。