作者:只为-娱乐 | 来源:互联网 | 2023-09-16 18:02
我在 Mac 上安装了 Xcode 12,尝试构建在 android 上完美运行的 React Native 应用程序,并获得'atomic_notify_one' is unavailable
. 这是我从错误中获得的最多信息。
回答
这里没有注释掉鳍状肢,而是一个对我有用的解决方案。
将 Podfile 中的鳍状肢更新为如下所示
use_flipper!({ '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' })
pod repo update
在 ios 文件夹中运行
最后,使用
pod install
回答
今天iOS模拟器更新到iOS 14.5后,这个问题又出现了。“Shared S Katre”发布的答案似乎是一个很好的解决方法。
因为 React-Native 是开源代码,我认为 iOS 上的任何大更新肯定会带来突破性的变化。我想这些将在以后修复。
无论如何 - 问题似乎确实与 Flipper 有关,它用作 RN 的调试工具(https://reactnative.dev/blog/2020/03/26/version-0.62)。
如果你只需要构建你的项目,你可以简单地在你的 podfile 中注释掉flipper,然后像这样重新安装你的pod。
播客文件
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable the next line.
# use_flipper!()
接下来,重新安装您的 Pod。我进入了项目的根目录并使用了 npx。
$ npx pod-install
最后,尝试构建和运行您的项目:
$ npx react-native run-ios
更新:
根据评论,看起来现在已经修复了。如果你想要鳍状肢,你应该能够恢复你的 Podfile 并更新鳍状肢。
参见:https : //stackoverflow.com/a/67314652/9906042
感谢堆垛机!
回答
- 修复 Podfile 如下图所示
- 光盘
- 删除 Pods 文件夹和 Podfile.lock
- 吊舱安装
- 豆荚更新
- cd .. && npx react-native run-ios
I don't think this is the best solution, as other people might be using the Flipper dev tools. This solution is better as it updates the library to include the upstream fix: https://stackoverflow.com/a/66876338/4160784
回答
我必须#ifdef FB_SONARKIT_ENABLED
在 AppDelegate.m 中评论所有内容,将 hermes 设置为 false 并在 Podfile 中评论 Flipper。
毕竟删除Pods和Podfile.lock,然后pod install
Your suggestion to disable hermes `:hermes_enabled => false` was what I was missing in order to get to work. Hopefully an update will come out soon. Thanks!
回答
如果有人仍然出现此错误(我刚刚更新了 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> *)modules", "_initializeModules:(NSArray *)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
在您的 之前target
,添加
# 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
if the above throws error `Permission denied @ rb_sysopen - Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h` then removing `Pods` folder fixes it
回答
此错误是鳍状肢的错误。Flipper 抛出了更多描述性较低的错误,我不得不在我的 podfile 中对其进行评论。评论后,这个错误停止了。
Yes it is working without flipper and i am able to debug it then what is use of flipper in react native ?
回答
刚刚评论了这一行并解决了这个问题-
# use_flipper!
# post_install do |installer|
# flipper_post_install(installer)
# end
回答
在 XCode 12.5 中构建时我遇到了同样的问题。如果暂时禁用 Flipper 不适合您,您可以降级到 XCode 12.4。这为我修好了。你可以在这里下载 XCode 12.4:https : //developer.apple.com/download/more
回答
我认为@opensw 提供的答案会起作用,但我找到了一些更强大的解决方案,以便它每次都可以与 pod install 一起使用,而不会删除Pods
文件夹。首先,在您的 Podfile 中更改添加/替换这一行
现在在上面几行中提到的最新版本中修复了一个问题,Flipper-folly
但是我们还需要处理 RCT-folly,为此,我们将使用该find_and_replace
功能。这是我从这里得到的新功能
# Define find-and-replace function
def find_and_replace(dir, findstr, replacestr)
Dir[dir].each do |name|
text = File.read(name)
replace = text.gsub(findstr,replacestr)
replaced = text.index(replacestr)
if replaced == nil && 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
现在从安装后调用这个函数,所以我们需要在里面添加以下 2 个函数调用 post_install do |installer|
find_and_replace("Pods/RCT-Folly/folly/synchronization/DistributedMutex-inl.h",
"atomic_notify_one(state)", "folly::atomic_notify_one(state)")
find_and_replace("Pods/RCT-Folly/folly/synchronization/DistributedMutex-inl.h",
"atomic_wait_until(&state, previous | data, deadline)", "folly::atomic_wait_until(&state, previous | data, deadline)")
这是我在Github 上的回答