将 Xcode 更新到 12.5 并将 iOS 更新到 14.5 后,React Native 0.64 不会构建 iOS 应用程序

时间:2021-04-27 21:08:21

标签: ios reactjs xcode react-native

将 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

8 个答案:

答案 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

对我来说,在 FlipperPodfile 中注释掉 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 的升级依赖项

React Native 62

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' ?

React Native 63

# 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,你应该很高兴

React Native 64

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)

我知道这已经得到了回答,但是对于将来发现此线程的人,有一个解决此问题的官方链接:

Xcode 12.5 troubleshooting guide (RN 0.61/0.62/0.63/0.64)