如何修正 PCH 错误?

当我尝试在 Xcode中构建我的应用程序时,我得到这个错误消息:

从不同的分支((clang-425.0.24))构建的 PCH 文件 编译器((clang-425.0.27))

这在以前从未发生过,但这是在更新 Xcode 之后的第一次构建。

其他应用程序也可以,但这个不行。

如果我关闭 "Precompile Prefix Header"设置,它工作。

如何修复此错误并保持该设置处于打开状态?

58414 次浏览

这通常是一个缓存问题。通常可以通过按住 选择键选择 产品 > 清洁生成文件夹..。来解决

看起来 产品 > 清洁生成文件夹..。(按选项键)对大多数人都适用。

如果您与大多数人(包括我自己)不同,这仍然会给您带来麻烦,那么 XCode 很可能将共享的预编译头留在了其他地方。对我来说,它们在一个类似的文件夹中:

/var/folders/<some random two characters>/<some random string>/C/com.apple.Xcode.502/SharedPrecompiledHeaders

我刚刚删除了整个 SharedPrepiledHeader 文件夹,这为我解决了一些问题。要是我就不会碰这里的其他东西。

您应该按住“ shift + command + C”,然后您将构建成功

如果清洁不能解决的话。这是一个构建缓存的问题-按住 Option 键并导航到 Product > Clean Build Folder。解决了我的问题。

您可以尝试清洗产品或生成文件夹:

SHIFT + COMMAND + K

OPTION + SHIFT + COMMAND + K

清理和/或删除派生数据对我来说不起作用。真正起作用的是触摸/拯救。Pch 文件(添加一个字符,然后删除它) ,以强制重新构建它。这个管用。

如果做一个干净的构建不为您工作,寻找在 /var/folders/../SharedPrecompiledHeaders的 PCH 文件,并删除 PCH 文件,这对我来说工作。

特别是如果您从命令行构建或者您有一个构建脚本,清除 xcode 目标是不够的。你必须删除这个文件夹。

预编译头位置可在

Target -> build settings => "Build locations" -> Precompiled headers cached path

删除此文件夹,

#rm -fr SharedPrecompiledHeaders

enter image description here

在升级 Xcode 之后,我通过多个项目得到了这个。CleanBuildFolder 和 Clean 没有效果——@sedes 的回答和@josema。Vitaminew 的评论让我很受用。但是,除非你使用一些狡猾的手段,否则这可能会很棘手,所以这里有一个一步一步的捷径:

  1. 转到失败的生成日志
  2. 使用 cmd-f“ SharedPrepiledHeader”来查找它(它将位于一个庞大而可怕的复杂命令行的中间)
  3. 拖动-选择文本“ SharedPrepiledHeader”和所有之前但不是之后的字符,直到你到达路径位(仍然在大块文本的中间)的开始,例如: “/var/files/03/n71d4r551jv40j5nb8r9fjy8000gn/C/com.apple。Xcode. 501/SharedPrepiledHeader
  4. 打开查找器
  5. 菜单: 进入-> 进入文件夹..。
  6. 复制/粘贴选定的路径
  7. 删除所有子文件夹(这是安全的: 它只是缓存的数据)

... 现在你所有的项目将是“固定的”,但将不得不重新构建自己第一次与零缓存(所以下一次构建只会比正常慢)。

在我的案例中,我以这种方式删除了 共享预编译头文件下的所有文件,一切都开始正常运行:

sudo find /var/folders/ -type d -name "SharedPrecompiledHeaders" | xargs -n 1 -I dir sudo find dir -name \* -type f -delete

删除该项目的 DerivedData文件夹。在 Xcode 首选项-> Location 下查看保存它的位置。

在 Finder 中从项目位置删除 BuildDerivedData文件夹对我来说很有效。

其他的选择对我来说都不管用,下面是解决办法:

我删除了 /Users/(Yourname)/Library/Developer/Xcode/DerivedData/ModuleCache/的缓存文件夹(重命名也可以)。

尝试删除错误中提到的文件夹,如果您的错误看起来像这样:

PCH was compiled with module cache path '/Users/User/Library/Developer/Xcode/DerivedData/ModuleCache/75YIWZVTEAO8', but the path is currently '/Users/Stan/Library/Developer/Xcode/DerivedData/ModuleCache/75YIWZVTEAO8

转到 Xcode Preferences-> Locations (正如 wcochran 在答案中提到的) ,然后简单地重命名您的衍生数据文件夹。我只是将我的数据库从“衍生数据”更改为“衍生数据2”,这迫使系统停止引用旧的位置。当其他答案都不起作用的时候,这个修正了我的错误。见图:

enter image description here

我试过清理项目和清理构建文件夹,但都不起作用。

之后,我完全退出了 xCode,删除了其标准位置的派生数据文件夹: ~/Library/Developer/xCode/VariedData,再次启动 xCode 并构建了该项目。

这似乎解决了我的问题。

更新

这对我来说非常有效:

  • 关闭项目或工作区。
  • 在 Finder 中: something shift + something cmd + G
  • 粘贴: ~/Library/Developer/Xcode/ 衍生数据/
  • 删除 ModuleCache 文件夹和空垃圾桶。
  • 打开你的项目。
  • Clean: something shift + something cmd + K
  • 构建: something cmd + B

XCode 7.3.1
这里的参考文献 < a href = “ https://ungacy.atlassian.net/wiki/display/IOS/PCH + was + coding + with + module + cache”rel = “ nofollow”>

在我的例子中,Xcode 在我的项目主捆绑包(/Users/Path _ to _ your _ project _ source _ code/YourProjectName/ 衍生数据)中创建了衍生数据文件夹

我刚刚从源代码包中删除了这个文件夹,现在它正在工作。

选中“转到 Xcode Preferences-> Location”,看看是否选择了“嘴对嘴” enter image description here

我在尝试用 Swift Package Manager 构建项目时遇到了这个错误。

解决方案是删除 .build目录。

对我来说,当我把项目复制到另一个位置时,这种情况总会发生。我这么做是为了回购什么的。

我必须删除旧位置和新位置中的 Build 文件夹(rm-rf Build/)才能使其正常工作。这样做是有意义的,因为 Build 文件夹将包含与新位置无关的数据。

在这种情况下,清理派生数据或者删除 sharedPrepiledHeader 文件夹实际上并没有做到这一点。

在 ios 项目目录中,转到 建造并删除 ModuleCache文件夹。再次运行 react-native run-ios,应该可以正常工作。 摘要 -rm -rf ios/build/ModuleCache

如果您正在通过 xcodebuild进行命令行构建,那么请查看是否使用了 -derivedDataPath BUILD_DIR选项。如果是这样,ModuleCache.noindex 目录将位于 BUILD _ DIR 中,而不是普通的 Xcode 位置。删除 ModuleCache.noindex 目录,就可以完全设置了。

我遇到这种情况是因为我正在构建一个 React Nativeapp,而 iOS 客户端通常是通过 React Nativetoolset 从命令行构建的。

我只是删除了 DerivedData为我工作。