'atomic_notify_one<unsigned long>' is unavailable
。这是我从错误信息中获得的大部分信息。'atomic_notify_one<unsigned long>' is unavailable
。这是我从错误信息中获得的大部分信息。这里提供一种对flipper不进行注释的解决方案,我已经验证可行。
请将Podfile中的flipper更新为以下内容:
use_flipper!({ 'Flipper-Folly' => '2.5.3', 'Flipper' => '0.87.0', 'Flipper-RSocket' => '1.3.1' })
在ios文件夹内运行pod repo update
命令
最后,使用pod install
命令更新您的项目依赖库
今天在iOS模拟器升级到iOS 14.5后,这个问题又发生了。 "Shared S Katre" 发布的答案似乎是一个不错的解决方法。
因为React-Native是开源代码,我认为iOS上的任何大更新都可能带来破坏性变化。我想这些问题以后会被修复。
无论如何-此问题似乎与Flipper有关,Flipper是RN的调试工具 (https://reactnative.dev/blog/2020/03/26/version-0.62)。
如果您只需要让项目构建,请在您的podfile中将flipper注释掉,然后像这样重新安装您的pods。
Podfile
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable the next line.
# use_flipper!()
接下来,重新安装你的Pods。我进入项目的根目录并使用了npx。
$ npx pod-install
最后,尝试构建并运行您的项目:
$ npx react-native run-ios
更新:
根据评论,看起来现在已经修复了。如果你想要 Flipper,请能够还原你的 Podfile 并更新 Flipper。
参见:https://dev59.com/9VEG5IYBdhLWcg3wbNTX#67314652
感谢 Stackers!
如果有人仍然遇到这个错误(我刚刚更新了Mac,Xcode等等),你可以在不禁用Flipper和Hermes的情况下修复构建;在您的Pod文件中的post_install
下添加以下内容(我在网上找到它并更改以修复最新更新的新错误):
post_install do |installer|
flipper_post_install(installer)
react_native_post_install(installer)
# # to build for the simulator on Apple M1
# installer.pods_project.targets.each do |target|
# target.build_configurations.each do |config|
# # disables arm64 builds for the simulator
# config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'
# end
# end
## Fix for XCode 12.5 & RN 0.62.2 - See https://github.com/facebook/react-native/issues/28405
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)))")
## Fix for Flipper-Folly on iOS 14.5
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
目标
之前,添加。# fixes for last Mac updates
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
Permission denied @ rb_sysopen - Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h
,则删除Pods
文件夹可以解决这个问题。 - Stathis Ntonas我需要在AppDelegate.m中注释所有的#ifdef FB_SONARKIT_ENABLED
,将hermes设置为false并在Podfile中注释Flipper。
最后,删除Pods和Podfile.lock,然后运行pod install。
:hermes_enabled => false
是我所缺少的,以便让它正常工作。希望很快会有更新。谢谢! - Allen:hermes_enabled => true
,但后来需要将其改为 :hermes_enabled => false
。然后我执行了 pod install --update-repo
命令,问题得到了解决。谢谢。 - Dror Bar刚刚注释掉这一行就解决了这个问题 -
# use_flipper!
# post_install do |installer|
# flipper_post_install(installer)
# end
这个错误是来自Flipper。Flipper抛出了几个不太具描述性的错误,我不得不在我的podfile上进行注释。注释后,这个错误停止了。
在使用Xcode 12.5进行编译时,我遇到了相同的问题。如果临时禁用Flipper不是您的选择,您可以降级至XCode 12.4。这个方法对我起了作用。您可以在此处下载Xcode 12.4:https://developer.apple.com/download/more
稍微扩展一下Umang和opensw的回答。
我已经更新了find_and_replace,如下所示。请注意,我添加了system("chmod +w " + name)
,以解决Permission denied @ rb_sysopen
错误。
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
system("chmod +w " + name)
File.open(name, "w") { |file| file.puts replace }
STDOUT.flush
end
end
Dir[dir + '*/'].each(&method(:find_and_replace))
end
这是我的翻页器配置
use_flipper!({ 'Flipper' => '0.87.0', 'Flipper-Folly' => '2.5.3', 'Flipper-RSocket' => '1.3.1' })
关于修复文件,在我的情况下,对于截至4月30日最新版本,仅在一个地方更新DistributedMutex-inl.h
就足够了。
另外,请注意我在函数名之前添加了两个额外的空格符号。这是必要的,以便在后续调用中,pod install
不会破坏代码。
post_install do |installer|
flipper_post_install(installer)
react_native_post_install(installer)
find_and_replace("Pods/RCT-Folly/folly/synchronization/DistributedMutex-inl.h",
" atomic_notify_one(state);", " folly::atomic_notify_one(state);")
end
add_flipper_pods!({ 'Flipper-Folly' => '2.5.3', 'Flipper' => '0.87.0', 'Flipper-RSocket' => '1.3.1' })
use_flipper!({ 'Flipper-Folly' => '2.5.3', 'Flipper' => '0.87.0', 'Flipper-RSocket' => '1.3.1' })
然后使用以下内容更新Pods项目:
cd ios && pod install && cd ..
use_flipper!({ 'Flipper' => '0.96.0', 'Flipper-Folly' => '~> 2.6', 'Flipper-RSocket' => '~> 1.4' })
- Hossein Rashnopermissions_path
部分之后。 - ThinkAndCode