【问题标题】:React Native 0.64 won't build iOS app after updating Xcode to 12.5 and iOS to 14.5将 Xcode 更新到 12.5 和 iOS 更新到 14.5 后,React Native 0.64 不会构建 iOS 应用程序
【发布时间】:2021-07-21 05:56:03
【问题描述】:

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

【问题讨论】:

  • 我在不同的 React Native 应用程序中也遇到了同样的问题。
  • 在 React Native 的 github github.com/facebook/react-native/issues/31179 中,很少有关于 macOs 11.3 更新的临时解决方法
  • 任何人的问题,怎么可能突然发生这种故障而我的工作站没有任何变化?周一yarn run ios 建设良好。星期二,我运行了相同的命令并得到了这个错误。
  • 删除 Podfile 中的 "use_flipper!()" 或发表评论。 > 吊舱安装 > 运行。
  • 更新:官方故障排除指南在这里: github.com/facebook/react-native/issues/31480

标签: ios reactjs xcode react-native


【解决方案1】:

我找到了一个解决方案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 调用中的路径。

【讨论】:

  • 你能指出我们应该在 podfile 中添加这个函数的位置吗?
  • 您可以将 find_and_replace 代码放在 Podfile 中的任何位置。
  • 真的只需要删除 Pods/Flipper-Folly 文件夹并运行 pod install 来修复权限问题。无需删除整个 Pods 文件夹。
  • 当我尝试这个时,我收到一条错误消息,上面写着“Pods/Headers/Private/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h:1043:5: No member named 'folly' in命名空间“愚蠢”;您的意思是简单的“愚蠢”吗?”
  • 如果你之前做过npx pod-install,记得删除Pods和Podfile.lock
【解决方案2】:

解决方案不会失去 Flipper 功能:

Podfile

中定义Flipper的升级依赖

反应原生 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' ?

反应原生 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 &amp;&amp; pod install,你应该很高兴

反应原生 64

package.json 中将版本升级到 0.64.1

yarn install &amp;&amp; pod install --repo-update &amp;&amp; react-native run-ios

https://github.com/facebook/react-native/releases/tag/v0.64.1

【讨论】:

  • 对于 React Native 63 遗憾的是不起作用,仍然出现一堆错误:(
  • 这对我有用 (0.63.4) use_flipper!({'Flipper' =&gt; '0.54.0', 'Flipper-Folly' =&gt; '2.3.0', 'Flipper-RSocket' =&gt; '1.1.0'}) :)
【解决方案3】:

这里有一个开放的 RN 问题:https://github.com/facebook/react-native/issues/31179

对我来说,在 Podfilepod install 中注释掉 Flipper,并且重建是一种临时解决方案。

  # 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

【讨论】:

  • 唯一的问题是我使用 Firebase 并且没有 Flipper 就找不到 Firebase。
【解决方案4】:

React native 0.64.1 已经发布,将会解决这个问题。只需更新 package.json 中的版本号即可。

"react-native": "0.64.1",

如果这样做,则无需修改 Podfile

【讨论】:

    【解决方案5】:

    升级到 react native 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'

    【讨论】:

      【解决方案6】:
      use_flipper!({ 'Flipper-Folly' => '2.5.3', 'Flipper' => '0.87.0', 'Flipper-RSocket' => '1.3.1' })
      

      行得通,;)

      【讨论】:

      • 因为 React Native 已经更新到 0.64.1,这个 bug 已经修复了。无需删除或降级 Flipper-Folly。
      • 谢谢Yesuu Bonpari 是的,它适用于 RN: 0.63.4 & xcode 13.0
      【解决方案7】:

      我知道这个问题已经回答了,但是对于那些以后发现这个帖子的人来说,有一个官方链接可以解决这个问题:

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

      【讨论】:

        【解决方案8】:

        如果你不使用它,只需在 pod 和 Xcode 中注释掉 Flipper 行,希望这将在未来的更新中修复。

        # Note that if you have use_frameworks! enabled, Flipper will not work and
        # you should disable the next line.
        # use_flipper!({ 'Flipper' => '0.79.1'})
        #   post_install do |installer|
        #     react_native_post_install(installer)
        #   end
        

        IN Xcode 注释所有导入和翻转变量

        【讨论】:

          猜你喜欢
          • 2021-07-30
          • 2021-07-26
          • 2020-01-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多