使用Xcode 4(及其依赖项)编译、构建或归档问题

96

这个问题在过去几周逐渐演变成更一般的与相关的问题(以及从旧版升级项目)。

然而,许多问题可以通过遵循相同的指令来解决。

如果你有以下任何问题,请尝试接受答案中的方法:

  • Xcode 4无法归档应用程序
  • Xcode 4创建了一个无法使用的存档
  • Xcode 4未创建.ipa文件
  • Xcode 4由于预处理器错误而无法编译
  • Xcode 4找不到头文件
  • Xcode 4的代码完成功能不起作用
  • 项目依赖项无法编译
  • 添加依赖项会导致上述任何问题

原始问题

标题:"lexical or preprocessor issue file not found" in Xcode 4

我在Xcode 4中有一个项目,在设备和模拟器上构建和运行都没问题,但当尝试进行归档时,在查找与静态库相关的头文件时发生错误:

In file included from /Volumes/Development/Path/LBProject/LBProject/LBProject-Prefix.pch:15:
In file included from /Volumes/Development/Path/LBProject/LBFDefines.h:23:
In file included from /Volumes/Development/Path/LBProject/Classes/LBProjectAppDelegate.h:11:
In file included from /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDirectoryManager.h:10:
/Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDataModel.h:11:9: fatal error: 'Merchant.h' file not found [1]
 #import "Merchant.h"
         ^
1 error generated. 

Xcode报错

lexical or preprocessor issue file not found 

许多人在Google中搜索后发现这个问题,但没有解决方案。有人有修复或线索吗?

更新:在所有配置中,用户头文件搜索路径设置为${BUILT_PRODUCTS_DIR}。使用任何配置都可以正常构建,除了存档。

更新2:Merchant.h是一个自动生成的Core Data类,因此在.xcdatamodeld包内,但是当库被构建时,所有头文件都会被复制到公共头文件目录中。

14个回答

119

NB: 以下步骤可解决90%的Xcode打包问题,但评论中建议先尝试退出Xcode。这可以节省你数小时的设置调整时间。

  1. 检查 "用户头文件路径" 是否正确(对于带有空格的路径,在项目和依赖项中都需加上 "")
  2. 将 "始终搜索用户路径" 设为 YES
  3. 在您的项目中创建名为 "索引头文件" 的组,并将头文件拖到该组中,提示时,请勿添加到任何目标。这包括您 .xcdatamodeld 内的任何头文件,您需要右键单击并查看包内容才能找到它们。
  4. 对于所有依赖项,将"跳过安装"的构建设置设为"Yes"
  5. 将 Build Phases 中任何 "Public" 头文件移至 "项目" 中
  6. 将目标的 Build Setting "安装目录" 设为 $(LOCAL_APPS_DIR)
  7. 将目标的构建设置 "scan all source files for includes" 设为 YES。(链接
  8. 对于 Xcode (> 4.2) 的新版本,您可能需要阅读有关工作区的这个问题。
  9. 手动从所有引用的项目中删除 project.xcworkspace 文件。

28
最后一个建议就是我需要解决这个问题的全部。关闭并重新打开Xcode。 - Chris Miles
1
是的,我也遇到了同样的问题,只需要重新启动Xcode即可。这是在我重命名并移动项目中的文件后发生的。 - Maurizio
3
注意:如果您正在将旧项目从Xcode3迁移到Xcode4,您可能需要更改Xcode首选项/位置/高级设置中指定的目标位置。请参考https://dev59.com/Z2435IYBdhLWcg3wtSYV#5262065了解更多信息。 - Ben G
1
第一项真是太棒了。引号!当然,环境变量$(SRC_ROOT)可能会被解析为带有空格的路径。我一直不明白为什么在将项目压缩并在其他地方提取后会导致构建失败! - Erik Kerber
对我来说,第一位是数字1。非常感谢。 - Glenn S
显示剩余4条评论

13

我在XCode 4中也遇到了同样的问题:“词法或预处理器问题,无法找到MyFile.h”。然而,MyFile.m并不是静态库,只是一个标准类。而且MyFile.m和MyFile.h已经被正确地包含并索引在项目中。

所以......我退出了XCode和模拟器,然后重新启动它们,问题就消失了。


我曾经遇到过类似的情况,但是由于错误地引用了同一类中的一个不相关的属性(基本上是我忘记使用self),导致显示了不需要的错误信息 - 真是奇怪。 - JARC

11

我发现当我将目标构建设置中的“扫描所有源文件的包含文件”从否改为是时,问题就消失了。


6

我能够在不更改任何构建设置的情况下解决此问题,只需将.h文件复制到Finder中的项目目录中即可。我没有将它们添加到项目中。只是将它们放在项目的文件系统目录中似乎足以使Xcode的隐式链接正常工作。更多详细信息在这里


+1 我已经在被接受的答案中添加了问题链接,感谢提供信息! - Richard Stelling

4
我的解决方案是改变我的
#import "HeaderFile.h"

为了

#import <FrameworkName/HeaderFile.h>

一切重新开始工作了。

不寻常的是,在构建几次之后,它突然停止工作了。


我尝试了我的子项目的所有其他方法,但这是唯一可行的。谢谢。 - YoungDinosaur
对于静态库,您仍应使用双引号。尖括号搜索系统头文件路径,不会搜索用户头文件路径,除非您还启用了始终搜索用户路径选项,如果不需要,则不应该这样做。 - devios1

4
我曾经遇到了这样奇怪的问题。将“扫描所有资源文件…”更改为“是”没有帮助。我查看了框架搜索路径,并注意到我有以下内容:
  • $(inherited)
  • "$(SRCROOT)"
  • "$(SRCROOT)/my/correct/path"
这似乎是正确的,但仍然失败。然后,我尝试重新排列第二个和第三个选项,结果它成功地构建了。所以不知道为什么会出现这种情况,但想把它添加到要尝试的列表中,以防它能够帮助其他人解决问题。

2

我在我的项目中有相同的问题 - 2个目标(ProjectProjectTest使用GHUnit)。当我的方案设置为Project时,导入<GHUnitIOS/GHUnit.h>出现了“词法或预处理器问题文件未找到”的问题。但是当我将其设置为ProjectTest方案时,一切都正常。因此,我也在Project中添加了GHUnitIOS.framework


我有相反的问题。请看我的答案:https://dev59.com/_W035IYBdhLWcg3wK8sm#16783389 - slcott

2
当我将Build Settings->Project->Search Paths设置为Yes时,问题得到了解决。

1
我在项目中遇到了一个特定的.h文件找不到的错误。通过将该.h文件从项目中删除(选择“删除引用”)并重新添加,我解决了这个问题。

1

看起来你的头文件搜索路径在当前方案的构建设置中没有正确配置。请验证并更新你的问题,附上当前的设置。


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