【问题标题】:Xcode stdint.h #error This file should only be included when compiling with MSVCXcode stdint.h #error 这个文件应该只在使用 MSVC 编译时包含
【发布时间】:2018-02-22 19:13:45
【问题描述】:

我在 Xcode 中有一个 CocoaPods React Native 项目,在过去几个月中,该项目 99% 的时间都在工作。 (这 1% 是随机的东西,比如链接器错误,等等……似乎是随机出现和消失的)。

我今天安装了一个新的 Pod 及其对应的 npm 依赖项,过去当我添加 pod 时有时会遇到问题,直到我尝试像 pod deintegratepod installreact-native link 之类的东西并清理 Xcode 项目,因为例子。但这一次似乎没有任何解决办法。

每次构建时,无论是模拟器还是物理设备,我都会收到来自stdint.h 的以下错误

This file should only be included when compiling with MSVC.

找到错误的根源也很容易,它是在stdint.h中明确用户定义的:

但我终其一生都无法弄清楚它为什么会被触发。它在 cmets 中说包含 MSVC。据我所知,基于 C 的 Xcode 编译器应该提供 MSVC 版本来满足条件。此外,在过去几个小时的故障排除/实验过程中,调用错误的罪魁祸首发生了多次变化。现在它来自RCTFBSDK,但之前它来自RNFirebase

检查完整的错误树,我可以找到请求 `stdint.h 的文件,但鉴于它是一个如此基本的文件,我怀疑它是否相关——但在这里:

根据我目前的调查,我倾向于认为是 Xcode 中的配置错误导致了问题,特别是与 CocoaPods 有关(但坦率地说,我不确定)

我所知道的是,它在没有 Pod/npm 依赖项的情况下工作(顺便说一下,它与当前抛出错误的 Facebook SDK 完全无关),当我将它添加到 package.jsonPodfile 时,执行标准npm installpod installreact-native link会发生这种情况。

这是我尝试过的:

  • npm installnpm updatenpm linkreact-native linkpod deintegratepod install的每一个组合
  • 已删除 xcworkspace 并使用 pod install 重新生成它
  • 删除了用户定义的错误条件(构建成功但在启动后不久崩溃并出现此错误:[fatal][tid:com.facebook.react.ShadowQueue] Exception '*** -[__NSArrayM insertObject:atIndex:]: index 1 beyond bounds for empty array' was thrown while invoking manageChildren on target UIManager with params (...
  • 完全重新安装 Xcode
  • 恢复到以前的 git 提交(从我添加新 pod 之前开始),它工作正常
  • 朝它握拳大喊(不得已)

另外,我对我的 Podfilepackage.json 的完整性有 100% 的信心。我从一个完善的存储库中复制了安装过程。

我很惊讶地发现这方面的信息绝对为零。我发现的最接近的东西与 C++ 相关(可以理解)。

有人对此有任何理论吗?谢谢。请让我知道我没有提供的任何其他具体信息。

【问题讨论】:

  • 可能是损坏的 Xcode ModuleCache。尝试删除 DerivedData
  • @PaulBeusterien 我刚刚删除了 ~/Library/Developer/Xcode/DerivedData 中的派生数据文件夹并重新启动了 Xcode,但错误仍然无法构建。还是)感谢你的建议!我什至没有想过要尝试。
  • 其实,我只是注意到现在问题不是来自 Facebook,而是来自 RNFirebase。
  • 可能是 leveldb 与您的其他 Pod 之一不兼容?你能分享你的 Podfile 吗?
  • 我也刚刚注意到,与以前成功的构建不同,pod install 似乎已经安装了nanopb,我认为它不应该在那里,但我不知道它是怎么做到的到了那里。这是 podfile:pastebin.com/TwynQfaL

标签: ios xcode react-native cocoapods


【解决方案1】:

引用 RNFirebase 合著者的话:

是的,目前在可可豆荚上使用 leveldb 是一件烦人的事情

这是一个临时解决方法:

cd ios && rm -rf Pods/leveldb-library/port/win

您可能还需要按如下方式更新您的 Podfile:

pod 'React', :path => '../node_modules/react-native', :subspecs => [
    'Core',
    'DevSupport', # Include this to enable In-App Devmenu if RN >= 0.43
    'RCTWebSocket', # needed for debugging
    # Add any other subspecs you want to use in your project
]

这是为了避免在您运行 0.48.x 时出现更多错误。

您可能希望在 Podfile 末尾添加临时解决方法,这样您就不必担心:

# Temporary workaround for https://github.com/invertase/react-native-firebase/issues/395
post_install do
  `rm -rf Pods/leveldb-library/port/win`
end

来源:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 2012-01-07
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多