将 Xcode 升级到 12.5 并将 iOS 升级到 14.5 后,我无法在真机和模拟器上运行 iOS 应用。
运行 npm run ios
后,我收到此消息:
The following build commands failed:
CompileC .../Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Flipper-Folly.build/Objects-normal/x86_64/DistributedMutex.o /Users/guilherme/Documents/Dood/ios/Pods/Flipper-Folly/folly/synchronization/DistributedMutex.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler
如果我尝试使用 Xcode 在真实设备上运行该应用程序,则会出现以下错误(与 Flipper-Folly 相关):
.../ios/Pods/Headers/Private/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h:1051:5: 'atomic_notify_one<unsigned long>' is unavailable
想法?谢谢!
更新:
React Native 已更新至 0.64.1。您现在可以在 package.json 文件中将您的 react-native 依赖更改为此版本,然后运行 npm install
答案 0 :(得分:24)
我找到了一个解决方案 here。
将此添加到您的 Podfile 中的 post_install
:
post_install do |installer|
flipper_post_install(installer)
## 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/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h",
"atomic_wait_until(&state, previous | data, deadline)", "folly::atomic_wait_until(&state, previous | data, deadline)")
end
您还需要为此 find_and_replace
函数添加函数 def(您可以将此函数放在 podfile 中的任何位置):
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
再次运行 pod install
,它应该可以工作了。如果您在访问 DistributedMutex-inl.h 文件时遇到与权限相关的错误,请删除您的 /pods 文件夹并再次运行 pod install
您应该会看到打印出的文本,上面写着 Fix: Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h 等。如果没有,请仔细检查 find_and_replace 调用中的路径。
答案 1 :(得分:6)
此处有一个未解决的 RN 问题:https://github.com/facebook/react-native/issues/31179
对我来说,在 Flipper
、Podfile
中注释掉 pod install
并重建是一种临时解决方案。
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable these next few lines.
# use_flipper!
# post_install do |installer|
# flipper_post_install(installer)
# end
答案 2 :(得分:4)
解决方案不会丢失 Flipper 功能:
在 Podfile
中定义 Flipper 的升级依赖项def add_flipper_pods!(versions = {})
versions['Flipper'] ||= '~> 0.87.0' ?
versions['DoubleConversion'] ||= '1.1.7'
versions['Flipper-Folly'] ||= '~> 2.5.3' ?
versions['Flipper-Glog'] ||= '0.3.6'
versions['Flipper-PeerTalk'] ||= '~> 0.0.4'
versions['Flipper-RSocket'] ||= '~> 1.3.1' ?
# 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.0' ?, 'Flipper-Folly' => '2.5.3' ?, 'Flipper-RSocket' => '1.3.1' ?})
post_install do |installer|
flipper_post_install(installer)
end
cd ios && pod install
,你应该很高兴
在 package.json
中将版本提升到 0.64.1
yarn install && pod install --repo-update && react-native run-ios
https://github.com/facebook/react-native/releases/tag/v0.64.1
答案 3 :(得分:3)
React native 0.64.1 已经发布,将会解决这个问题。只需更新 package.json 中的版本号即可。
"react-native": "0.64.1",
这样做就不需要修改Podfile了
答案 4 :(得分:1)
use_flipper!({ 'Flipper-Folly' => '2.5.3', 'Flipper' => '0.87.0', 'Flipper-RSocket' => '1.3.1' })
那行得通,;)
答案 5 :(得分:0)
如果您不使用它,只需注释掉 pod 和 Xcode 中的鳍状肢线,希望这会在未来的更新中修复。
JobLauncher
在 Xcode 中注释所有导入和翻转变量
答案 6 :(得分:0)
升级到本机 0.64.1(或更高版本)
如果您从 0.63.x 移动到 0.64.x,请确保在您的 Podfile 中您已更新 use_flipper!安装后部分:
之前:
post_install do |installer|
flipper_post_install(installer)
end
之后:
post_install do |installer|
react_native_post_install(installer)
end
从项目根目录运行“npx react-native-clean-project” 然后从 './ios' 文件夹内运行 'pod install --repo-update' 然后可能运行 'pod update'
答案 7 :(得分:0)
我知道这已经得到了回答,但是对于将来发现此线程的人,有一个解决此问题的官方链接: