将 hermes 与 iOS 一起使用时出现 RCT-Folly 错误
RCT-Folly error when using hermes with iOS
在 Podfile 中启用 hermes 并重建构建时由于 RCT-Folly 而失败。不知道它的作用。
要重新初始化所有内容,我使用以下命令:
rm -rf node_modules && rm package-lock.json && npm install && cd ios && rm -rf Pods && rm Podfile.lock && pod deintegrate && pod setup && pod install && cd ..
我还启动了 metro bundler:
npx react-native --reset-cache
有人有解决办法吗?
该应用程序使用 react-native v0.64,我们希望使用 hermes 获得更好的性能。
全部信息:
ios/Podfile
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
platform :ios, '10.0'
target 'unblnd' do
config = use_native_modules!
use_react_native!(
:path => config[:reactNativePath],
:hermes_enabled => true
)
permissions_path = '../node_modules/react-native-permissions/ios'
pod 'Permission-BluetoothPeripheral', :path => "#{permissions_path}/BluetoothPeripheral"
pod 'Permission-Calendars', :path => "#{permissions_path}/Calendars"
pod 'Permission-Camera', :path => "#{permissions_path}/Camera"
pod 'Permission-Contacts', :path => "#{permissions_path}/Contacts"
pod 'Permission-FaceID', :path => "#{permissions_path}/FaceID"
pod 'Permission-LocationAlways', :path => "#{permissions_path}/LocationAlways"
pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse"
pod 'Permission-MediaLibrary', :path => "#{permissions_path}/MediaLibrary"
pod 'Permission-Microphone', :path => "#{permissions_path}/Microphone"
pod 'Permission-Motion', :path => "#{permissions_path}/Motion"
pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications"
pod 'Permission-PhotoLibrary', :path => "#{permissions_path}/PhotoLibrary"
pod 'Permission-Reminders', :path => "#{permissions_path}/Reminders"
pod 'Permission-Siri', :path => "#{permissions_path}/Siri"
pod 'Permission-SpeechRecognition', :path => "#{permissions_path}/SpeechRecognition"
pod 'Permission-StoreKit', :path => "#{permissions_path}/StoreKit"
pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga', :modular_headers => true
# add the Firebase pod for Google Analytics
pod 'Firebase/Analytics'
# add pods for any other desired Firebase products
# https://firebase.google.com/docs/ios/setup#available-pods
target 'unblndTests' do
inherit! :complete
# Pods for testing
end
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable these next few lines.
# flipper_pods()
# post_install do |installer|
# flipper_post_install(installer)
# end
end
终端输出
In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp:17: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex.h:352: /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h:1051:5: error: 'atomic_notify_one<unsigned long>' is unavailable
atomic_notify_one(state);
^ /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h:1573:5: note: in instantiation of function template specialization 'folly::detail::distributed_mutex::wakeTimedWaiters<std::__1::atomic<unsigned long>>' requested here
wakeTimedWaiters(&state_, proxy.timedWaiters_);
^ In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp:17: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex.h:19: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/Optional.h:58: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/functional:504: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/memory:681: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/atomic:2140:6: note: 'atomic_notify_one<unsigned long>' has been explicitly marked unavailable here void atomic_notify_one(atomic<_Tp>* __o) _NOEXCEPT
^ 1 error generated.
CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/Demangle-3c4c6b43c285d16c32230d6f0a7a76ce5af39228ed5c3beeaf7ed7d1344f76b0.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/detail/Demangle.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
...
CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/Cursor.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/io/Cursor.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
cd /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods
export LANG\=en_US.US-ASCII
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/
...
** BUILD FAILED **
The following build commands failed: CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/DistributedMutex.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (1 failure)
npx react-native info
System:
OS: macOS 11.4
CPU: (8) x64 Intel(R) Core(TM) i7-1068NG7 CPU @ 2.30GHz
Memory: 1.05 GB / 16.00 GB
Shell: 5.8 - /bin/zsh
Binaries:
Node: 14.17.0 - /usr/local/bin/node
Yarn: Not Found
npm: 6.14.13 - ~/htdocs/unblnd_app/node_modules/.bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
Managers:
CocoaPods: 1.10.1 - /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms: iOS 14.5, DriverKit 20.4, macOS 11.3, tvOS 14.5, watchOS 7.4
Android SDK:
API Levels: 28, 29
Build Tools: 28.0.3, 29.0.2, 29.0.3, 30.0.2
System Images: android-29 | Intel x86 Atom_64, android-29 | Google APIs Intel x86 Atom
Android NDK: Not Found
IDEs:
Android Studio: 4.2 AI-202.7660.26.42.7351085
Xcode: 12.5.1/12E507 - /usr/bin/xcodebuild
Languages:
Java: 1.8.0_265 - /usr/bin/javac
npmPackages:
@react-native-community/cli: Not Found
react: 17.0.1 => 17.0.1
react-native: 0.64.2 => 0.64.2
react-native-macos: Not Found
npmGlobalPackages:
*react-native*: Not Found
经过反复试验,我找到了可行的解决方案。这有点奇怪,但我必须启用 Flipper。我没有找到没有它的方法。
多亏了这个答案:https://github.com/facebook/react-native/issues/31179#issuecomment-831932941 我发现了修复 Pods。
现在这是我的 Podfile:
...
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable these next few lines.
use_flipper!({ 'Flipper' => '0.87' })
post_install do |installer|
flipper_post_install(installer)
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
...
这个版本我遇到了一些错误 { 'Flipper' => '0.87' }
所以我做了一些更改,这个 Podfile 设置对我有用
use_flipper!({ 'Flipper-Folly' => '2.5.3', 'Flipper' => '0.87.0', 'Flipper-RSocket' => '1.3.1' })
post_install do |installer|
react_native_post_install(installer)
flipper_post_install(installer)
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
end
解决方案是从项目根文件夹中删除空格。
见下文:
Project/ReactNative/MySampleProj
对我有用的:
我使用的是 React Native 版本 0.67.3
MacOS 蒙特雷(英特尔 Mac)
1.Open Xcode 中的项目使用 .xcworkspace 文件
2.Run 来自 Xcode 的应用程序。
似乎没有错误。
我使用的是 2020 M1 Apple MacBook,none 这些解决方案对我有用。我在其中创建项目的文件夹名为 'React Native',带有 space in-between。显然,这对 运行 pod 的正确安装产生了不利影响。我将文件夹重命名为 'React_Native' 和 运行 pod install
,一切都开始工作了。
我删除了Podfile.lock
,然后npx pod-install
。那解决了我的问题
我已经为 mac m1 芯片上的 React Native 项目 运行 找到了一个简单的解决方案。您正在尝试 运行 一个项目的多种解决方案,因此您当前项目的一些配置发生了变化,因此很容易解决
- 创建新项目
npx react-native init Project_name
。也不要
运行您的项目即刻
- 导航到 pod 文件注释 #
use_flipper!()
.
pod install
npx react-native run-ios
另一个解决方案是运行:
pod update && pod install
这应该可以解决问题。
在 Podfile 中启用 hermes 并重建构建时由于 RCT-Folly 而失败。不知道它的作用。
要重新初始化所有内容,我使用以下命令:
rm -rf node_modules && rm package-lock.json && npm install && cd ios && rm -rf Pods && rm Podfile.lock && pod deintegrate && pod setup && pod install && cd ..
我还启动了 metro bundler:
npx react-native --reset-cache
有人有解决办法吗?
该应用程序使用 react-native v0.64,我们希望使用 hermes 获得更好的性能。
全部信息:
ios/Podfile
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
platform :ios, '10.0'
target 'unblnd' do
config = use_native_modules!
use_react_native!(
:path => config[:reactNativePath],
:hermes_enabled => true
)
permissions_path = '../node_modules/react-native-permissions/ios'
pod 'Permission-BluetoothPeripheral', :path => "#{permissions_path}/BluetoothPeripheral"
pod 'Permission-Calendars', :path => "#{permissions_path}/Calendars"
pod 'Permission-Camera', :path => "#{permissions_path}/Camera"
pod 'Permission-Contacts', :path => "#{permissions_path}/Contacts"
pod 'Permission-FaceID', :path => "#{permissions_path}/FaceID"
pod 'Permission-LocationAlways', :path => "#{permissions_path}/LocationAlways"
pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse"
pod 'Permission-MediaLibrary', :path => "#{permissions_path}/MediaLibrary"
pod 'Permission-Microphone', :path => "#{permissions_path}/Microphone"
pod 'Permission-Motion', :path => "#{permissions_path}/Motion"
pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications"
pod 'Permission-PhotoLibrary', :path => "#{permissions_path}/PhotoLibrary"
pod 'Permission-Reminders', :path => "#{permissions_path}/Reminders"
pod 'Permission-Siri', :path => "#{permissions_path}/Siri"
pod 'Permission-SpeechRecognition', :path => "#{permissions_path}/SpeechRecognition"
pod 'Permission-StoreKit', :path => "#{permissions_path}/StoreKit"
pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga', :modular_headers => true
# add the Firebase pod for Google Analytics
pod 'Firebase/Analytics'
# add pods for any other desired Firebase products
# https://firebase.google.com/docs/ios/setup#available-pods
target 'unblndTests' do
inherit! :complete
# Pods for testing
end
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable these next few lines.
# flipper_pods()
# post_install do |installer|
# flipper_post_install(installer)
# end
end
终端输出
In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp:17: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex.h:352: /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h:1051:5: error: 'atomic_notify_one<unsigned long>' is unavailable
atomic_notify_one(state);
^ /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h:1573:5: note: in instantiation of function template specialization 'folly::detail::distributed_mutex::wakeTimedWaiters<std::__1::atomic<unsigned long>>' requested here
wakeTimedWaiters(&state_, proxy.timedWaiters_);
^ In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp:17: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex.h:19: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/Optional.h:58: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/functional:504: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/memory:681: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/atomic:2140:6: note: 'atomic_notify_one<unsigned long>' has been explicitly marked unavailable here void atomic_notify_one(atomic<_Tp>* __o) _NOEXCEPT
^ 1 error generated.
CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/Demangle-3c4c6b43c285d16c32230d6f0a7a76ce5af39228ed5c3beeaf7ed7d1344f76b0.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/detail/Demangle.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
...
CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/Cursor.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/io/Cursor.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
cd /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods
export LANG\=en_US.US-ASCII
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/
...
** BUILD FAILED **
The following build commands failed: CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/DistributedMutex.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (1 failure)
npx react-native info
System:
OS: macOS 11.4
CPU: (8) x64 Intel(R) Core(TM) i7-1068NG7 CPU @ 2.30GHz
Memory: 1.05 GB / 16.00 GB
Shell: 5.8 - /bin/zsh
Binaries:
Node: 14.17.0 - /usr/local/bin/node
Yarn: Not Found
npm: 6.14.13 - ~/htdocs/unblnd_app/node_modules/.bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
Managers:
CocoaPods: 1.10.1 - /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms: iOS 14.5, DriverKit 20.4, macOS 11.3, tvOS 14.5, watchOS 7.4
Android SDK:
API Levels: 28, 29
Build Tools: 28.0.3, 29.0.2, 29.0.3, 30.0.2
System Images: android-29 | Intel x86 Atom_64, android-29 | Google APIs Intel x86 Atom
Android NDK: Not Found
IDEs:
Android Studio: 4.2 AI-202.7660.26.42.7351085
Xcode: 12.5.1/12E507 - /usr/bin/xcodebuild
Languages:
Java: 1.8.0_265 - /usr/bin/javac
npmPackages:
@react-native-community/cli: Not Found
react: 17.0.1 => 17.0.1
react-native: 0.64.2 => 0.64.2
react-native-macos: Not Found
npmGlobalPackages:
*react-native*: Not Found
经过反复试验,我找到了可行的解决方案。这有点奇怪,但我必须启用 Flipper。我没有找到没有它的方法。
多亏了这个答案:https://github.com/facebook/react-native/issues/31179#issuecomment-831932941 我发现了修复 Pods。
现在这是我的 Podfile:
...
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable these next few lines.
use_flipper!({ 'Flipper' => '0.87' })
post_install do |installer|
flipper_post_install(installer)
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
...
这个版本我遇到了一些错误 { 'Flipper' => '0.87' }
所以我做了一些更改,这个 Podfile 设置对我有用
use_flipper!({ 'Flipper-Folly' => '2.5.3', 'Flipper' => '0.87.0', 'Flipper-RSocket' => '1.3.1' })
post_install do |installer|
react_native_post_install(installer)
flipper_post_install(installer)
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
end
解决方案是从项目根文件夹中删除空格。
见下文:
Project/ReactNative/MySampleProj
对我有用的:
我使用的是 React Native 版本 0.67.3 MacOS 蒙特雷(英特尔 Mac)
1.Open Xcode 中的项目使用 .xcworkspace 文件 2.Run 来自 Xcode 的应用程序。
似乎没有错误。
我使用的是 2020 M1 Apple MacBook,none 这些解决方案对我有用。我在其中创建项目的文件夹名为 'React Native',带有 space in-between。显然,这对 运行 pod 的正确安装产生了不利影响。我将文件夹重命名为 'React_Native' 和 运行 pod install
,一切都开始工作了。
我删除了Podfile.lock
,然后npx pod-install
。那解决了我的问题
我已经为 mac m1 芯片上的 React Native 项目 运行 找到了一个简单的解决方案。您正在尝试 运行 一个项目的多种解决方案,因此您当前项目的一些配置发生了变化,因此很容易解决
- 创建新项目
npx react-native init Project_name
。也不要 运行您的项目即刻 - 导航到 pod 文件注释 #
use_flipper!()
. pod install
npx react-native run-ios
另一个解决方案是运行:
pod update && pod install
这应该可以解决问题。