如何修复PCH错误?

135

当我尝试在 Xcode 中构建我的应用程序时,我会收到以下错误信息:

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

这之前并没有发生过,但这是在更新 Xcode 后的第一次构建。

其他应用程序可以工作,但这个特定的应用程序不行。

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

我该如何修复这个错误并仍保留该设置?

22个回答

249

这通常是一个缓存问题。通常可以通过按住Option键并选择Product > Clean Build Folder...来解决。


4
这对我没有解决错误。我还尝试了完全清理并删除派生数据。 - Ben S
6
对我来说起作用了,只不过是在“产品”>“清理”下,不需要按命令键。(Xcode 4.6.1) - Steve Haley
1
@SteveHaley,有一个Product > Clean,但它的清理工作不够彻底。一些人可以使用Product > Clean,对于大多数人来说,Product > Clean Build Folder...已经足够了,而其他人则需要根据@Sedes下面的回答手动删除。 - gaige
7
我知道这是一个老问题,但上述的解决方法对我没有帮助。只需删除“Derived Data”并重新构建项目即可解决问题。 - Ankit Jain
2
你能否执行 rm -rf /ios/build 命令? - SuperUberDuper
显示剩余5条评论

48

删除项目中的DerivedData文件夹。查看Xcode首选项->位置以查看您保存它的位置。


需要注意的是,DerivedData 不一定就是你的 Build 文件夹所在的位置,这个提示对我帮助很大,谢谢! - Etheryte
1
也要删除DerivedData中的moduleCache。 - whtlnv
你应该像其他答案所说的那样首先尝试“清理”一下。当这种方法不起作用时,我会简单地递归删除整个"DerivedData"文件夹……"从轨道上抹掉……这是唯一确定的方法。" @whitelionV 这也将删除'moduleCache'以及其中的所有其他内容。 - wcochran

39

似乎对于大多数人来说,使用带有 Option 键的 Product > Clean Build Folder... 命令即可解决问题。可以查看 @gaige 给出的答案。

如果您和我一样不属于“大多数人”,并且上述方法仍然无法解决问题,那么 XCode 可能会将您的共享预编译头文件留在其他地方。对我而言,它们在类似这样的文件夹中:

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

我只是删除了整个SharedPrecompiledHeaders文件夹,这解决了我的问题。但我不会去碰其他东西……


2
这对我解决了这个问题。对我来说是因为我有一个命令行驱动的构建。 - ThomasW
2
如果您遇到这种情况,您可以在Xcode构建传输中找到该文件夹。我正在查找字符串"SharedPrecompiledHeaders"。 - José Manuel Sánchez
6
是的,这是正确的解决方案。特别是如果你是从命令行构建或者有一个构建脚本。预编译头文件的位置可以在构建设置中找到,“构建位置”->“预编译头文件缓存路径”。 - karim
你如何找到var目录? - GoldenJoe
1
@GoldenJoe 打开Finder,按下 Shift-Cmd-G 并输入 /var - Sedes
对我没用。使用Shift-Cmd-G Finder找到了/var文件夹,但搜索SharedPrecompiledHeaders什么也没找到。是的,我输入得正确。 - Alyoshak

25

前往Xcode首选项->位置(如wcochran的回答中所述),并简单地重命名您的DerivedData文件夹。 我只是将我的更改为“DerivedData2”,这迫使系统停止引用旧位置。 当其他答案均无效时,此方法对我起作用了。 参见图片:

输入图像描述


18

其他选项都不能解决我的问题,这是我所采取的措施:

我删除了/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'


是的,你说得对。以上的方法都不适用于我。只需删除它提到的文件夹,然后重新构建即可。 - Zhang Buzz
这是正确的答案。在将项目移动到其他路径后,清除/删除DerivedData对我无效。 - Bill Chan
1
这对我在命令行构建中有效。对于任何遇到此问题的人,删除第二个路径是您需要做的(错误提示当前路径为第二个路径)。 - Dominic Williams

14

在您的iOS项目目录中,进入build文件夹并删除ModuleCache文件夹。再次运行react-native run-ios,它应该按预期工作。 总结 - rm -rf ios/build/ModuleCache


是的,这也适用于React Native,并且可以从Xcode构建,但无法使用npm run ios命令行界面构建。按照建议删除缓存解决了问题。 - dakt

13

在Finder中删除项目位置下的BuildDerivedData文件夹对我起了作用。


1
对于一些人(包括我),可能是.build文件夹。 - Florian Pfisterer
运行良好。请参见https://dev59.com/ppDea4cB1Zd3GeqPjPzJ - Mr-IDE

7

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

解决方法就是删除.build目录。


6
在升级 Xcode 后,我在多个项目中都遇到了这个问题。使用 Clean Build Folder 和 Clean 命令并没有产生影响-@sedes 的答案和 @josema.vitaminew 的评论解决了我的问题。但这可能有点棘手,除非你使用一些诡计,因此以下是一个逐步的快捷方式:
  1. 进入编译失败的构建日志
  2. 使用 cmd-f "SharedPrecompiledHeaders" 进行搜索(它将位于一个大而可怕的复杂命令行的中间)
  3. 选择文本“SharedPrecompiledHeaders”以及之前但不包括路径位开始的所有字符(仍在大块文本中间),例如:对我来说就是: “/var/folders/03/n71d4r551jv40j5nb8r9fjy80000gn/C/com.apple.Xcode.501/SharedPrecompiledHeaders”
  4. 打开 Finder
  5. 菜单:前往 -> 转到文件夹...
  6. 复制/粘贴选定的路径
  7. 在“SharedPrecompiledHeaders”中删除所有子文件夹(这是安全的:这只是缓存数据)
现在,所有项目都将被“修复”,但是第一次必须使用零缓存重新构建自己(因此下一次构建仅比正常构建慢)。

5

如果您是通过命令行构建或者使用构建脚本的话,仅清理Xcode目标是不够的。您需要删除此文件夹。

预编译头文件位置可以在以下位置找到:

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

删除此文件夹,

#rm -fr SharedPrecompiledHeaders

enter image description here


我的缓存路径在构建文件夹/build/ModuleCache/中。从旧位置删除它并没有起作用。 - TheJeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接