React Native Pods/RCT-Folly/folly/portability/Time.h和类型定义使用不同类型重定义时出错(“uint8_t”(又称“无符号字符”)与“枚举clockid_t”)

djmepvbi  于 2023-02-25  发布在  React
关注(0)|答案(4)|浏览(424)

我正在审阅一个react native项目的源代码,但是我在构建它时遇到了一些问题。
运行以下命令后

  1. npm install位于项目的根目录
  2. pod install位于ios文件夹
    我在候机厅收到了以下信息:
sh: -c: line 0: syntax error near unexpected token `('

sh: -c: line 0: `sed -i -e  $'s/__IPHONE_10_0/__IPHONE_12_0/' /Users/myUser/dev/ReactExplorerApp(Android)/ios/Pods/RCT-Folly/folly/portability/Time.h'

当我用XCode构建应用程序时,我在Time. h(... Pods/RCT-Folly/folly/portability/Time.h)得到了以下错误消息:
Typedef redefinition with different types ('uint8_t' (aka 'unsigned char') vs 'enum clockid_t')
该应用使用“react-native”:“0.66.1”。我使用的是cocopods版本1.11.2、节点版本14.17.2和XCode版本13.1
播客文件内容:

require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'

platform :ios, '11.0'

target 'ExplorerApp' do
  config = use_native_modules!
  pod 'GoogleSignIn'
  pod 'RNI18n', :path => '../node_modules/react-native-i18n'
  pod 'react-native-version-check', :path => '../node_modules/react-native-version-check'
  pod 'react-native-camera', path: '../node_modules/react-native-camera', subspecs: [
    'FaceDetectorMLKit',
    'BarcodeDetectorMLKit'
  ]

  use_react_native!(
    :path => config[:reactNativePath],
    # to enable hermes on iOS, change `false` to `true` and then install pods
    :hermes_enabled => false
  )

  target 'ExplorerAppTests' 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 the next line.
  use_native_modules!
  use_flipper!()

  post_install do |installer|
    react_native_post_install(installer)
    __apply_Xcode_12_5_M1_post_install_workaround(installer)
  end
end

我尝试了很多类似问题的解决方案,但都不起作用。我尝试通过在podfile中注解Flipper来禁用它,我还尝试将目标更改为iOS 12。我还尝试在删除podfile.lock并运行pod install --repo-update后安装Pod,我还运行了pod cache clean --all
我也尝试了https://github.com/facebook/react-native/issues/31480"react-native": "0.64.1" // or higher的解决方案,但它对我不起作用,我不清楚他们所指的“删除相关行从podfile.lock”,如果仍然有错误。
编辑:[解决方案]我通过在我的终端中实际运行git clone [repo url]而不是使用Azure DevOps的克隆按钮(与VSCode接口)来消除这个错误。

qhhrdooz

qhhrdooz1#

导航到此文件=〉ios/Pods/RCT-Folly/folly/portability/Time.h
注解此行=〉typedef uint8_t clockid_t;
将=〉_IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_10_0更改为_IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_12_0

2022年6月更新答复

这可以通过在post_install下的pod文件中添加以下行自动实现

`sed -i -e  $'s/__IPHONE_10_0/__IPHONE_12_0/' Pods/RCT-Folly/folly/portability/Time.h`
b1payxdu

b1payxdu2#

我在使用React native 0.70时遇到了同样的问题
系统MacBook Pro(13英寸,M1,2020年)苹果M1
我遵循设置https://reactnative.dev/docs/environment-setup

brew install node
-brew install watchman
sudo arch -x86_64 gem install ffi

已解决--导致问题的原因是我的项目父目录中有一个“空格”,在根目录中创建一个新目录(没有空格)和“npx react-native init app”后,应用程序最终构建

bqf10yzr

bqf10yzr3#

我遇到了同样的问题,有同样的错误。操作系统目标版本修复已经通过将RN提供的脚本添加到Podfile中来应用,如下所示:

post_install do |installer|
    react_native_post_install(installer)
    __apply_Xcode_12_5_M1_post_install_workaround(installer)
  end

也许这是自动在您的RN版本或模板。
我发现这个错误
sh: -c: line 0: syntax error near unexpected token('实际上来自于该变通方案脚本(在node_modules/react-native/scripts/react_native_pods.rb中),即它的sed -i -e …`行,我最终发现,如果绝对路径包含Shell解释的字符(由于脚本中没有正确引用路径),则脚本不工作并抛出此错误。

    • 在我的例子中,绝对路径包含括号**,看起来你的也是这样:…/ReactExplorerApp(Android)/….

我能想到的解决方案:
1.调整你的路径不包含parantheses(最简单的解决方案)
1.手动运行sedlike suggested by @avinash-kannan
1.通过在#{time_header}周围添加单引号来修复node_modules/react-native/scripts/react_native_pods.rb中的shell行(不推荐,因为它可能会被yarn或npm覆盖)

k4ymrczo

k4ymrczo4#

MBP M1 2020和react-native也有同样的问题。解决方案是删除父目录名中的空格。我不需要做任何其他事情。

相关问题