Xcode 4(和依赖项)的编译,生成或存档问题


96

在过去的几周中,这个问题有所发展,涵盖了与 (并且升级项目的时间较早 s)。

但是,通过遵循同一组说明可以解决许多问题。

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

  • Xcode 4无法存档应用
  • Xcode 4创建了不可用的存档
  • Xcode 4不会创建.ipa
  • Xcode 4由于预处理器错误而无法编译
  • Xcode 4找不到标题
  • Xcode 4的代码完成不起作用
  • 项目相关性无法编译
  • 添加依赖关系会导致上述任何问题

原始问题

标题: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 

许多谷歌搜索显示,许多人有这个问题,但没有解决方案。任何人都有解决办法或线索。

更新:user header搜索路径设置为${BUILT_PRODUCTS_DIR}所有配置。除存档外,使用任何配置都可以正常构建。

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

Answers:


119

注意:以下步骤将解决90%的Xcode存档问题,但是,从注释中建议您尝试先退出Xcode 。这样可以节省您进行调整的时间。

  1. 检查“用户头路径”是否正确(在项目和依赖项中的空格路径中都添加“”)
  2. 将“始终搜索用户路径”设置为“是”
  3. 在项目中创建一个名为“索引标头”的组,并将标头拖动到该组中,在出现提示时不要添加到任何目标。这包括.xcdatamodeld内部的所有标头,您需要右键单击并查看包内容才能找到它们。
  4. 对于所有依赖项,将“跳过安装”构建设置设置为“是”
  5. 将构建阶段中的所有“公共”标题移至“项目”
  6. 将目标上的构建设置“安装目录”设置为$(LOCAL_APPS_DIR)
  7. 将目标构建设置“扫描所有源文件包含”更改为“是”。(链接
  8. 对于较新版本的Xcode(> 4.2),您可能需要阅读与工作区相关的问题
  9. 从所有引用的项目中手动删除project.xcworkspace文件

28
最后一个建议是解决此问题所需的一切。关闭并重新打开Xcode。
克里斯·迈尔斯

1
是的,对我来说也是一样,只需要重启Xcode。我在项目中重命名和移动文件后发生了这种情况。
毛里齐奥

我也是。没有比这不应该存在的错误更令人沮丧的了。如此轻松地解决它真是太好了。
麦迪逊

3
请注意Three20用户将旧项目从xcode3迁移到xcode4:您(可能)必须更改xcode首选项/位置/高级/->目标指定的位置。见stackoverflow.com/questions/5261447/...更多
奔摹

1
1号神圣的废话。引号!当然,环境$(SRC_ROOT)使用带有空格的路径来解析。无法弄清楚为什么将我的项目压缩并提取到其他位置会导致构建失败!
Erik Kerber

13

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

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


我有类似的情况,但是由于错误地引用了同一类中的不相关属性(基本上我忘了使用self)而导致显示了不必要的错误-很奇怪。
JARC

11

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


6

通过将.h文件复制到finder中的Project目录中,我能够在不对任何构建设置进行任何更改的情况下解决此问题。我根本没有将它们添加到项目中。仅将它们放在项目的文件系统目录中,似乎足以使Xcode的隐式链接正常工作。更多细节在这里


+1我已经添加了指向他接受答案的问题的链接,感谢您提供信息!
理查德·斯特灵

4

我有这样一个奇怪的问题。将“扫描所有资源文件...”更改为“是”无济于事。我看了一下框架搜索路径,发现我有

  • $(继承)
  • “ $(SRCROOT)”
  • “ $(SRCROOT)/我/正确/路径”

看起来不错,但仍然失败。然后,我尝试重新排列2&3的顺序,突然之间一切正常。因此不知道为什么会这样,但想将其添加到事物列表中以防万一它对其他人有帮助。


4

我的解决方案是改变我的

#import "HeaderFile.h"

#import <FrameworkName/HeaderFile.h>

一切又开始工作了。不寻常的是,它经过几次构建后突然停止工作。


我在子项目中尝试了其他所有方法,这是唯一可行的方法。谢谢。
dirkoneill

您仍应对静态库使用双引号。尖括号将搜索系统标题路径,并且将不搜索用户标题路径,除非您还启用了始终搜索用户路径选项,如果不需要,则不应该这样做。
devios1

2

我设置时问题就解决了

构建设置->项目->搜索路径为是


2

我有同样的- 2个目标在我的项目(项目ProjectTestGHUnit)。当我的方案设置为Project时,的导入<GHUnitIOS/GHUnit.h>“找不到词法或预处理程序问题文件”的问题。但是当我将方案设置为ProjectTest时,一切都很好。因此,我也添加GHUnitIOS.frameworkProject


我有相反的问题。看到我的答案:stackoverflow.com/a/16783389/629014
slcott


1

我在模拟器上遇到类似的问题,但设备和我的标题搜索路径字段都不为空(似乎是默认值)。但是更改工作区似乎已经解决了这个问题。也许您可以尝试创建一个新的Workspace,将项目添加到其中,看看是否有帮助。现在,我正在调查原因。


1

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


1

加上更多的变体:foo.mCompile Source构建阶段,我有两个实例,这些实例是如何导致的“找不到标题”的foo.h


1

另一次机会:

在工作空间项目中:在“目标”中查看“构建阶段”部分。正如许多手册所述,您需要一个“复制文件”构建阶段才能将所有标头复制到另一个位置,因为iOS Framework无法包含要共享的标头文件(这是我的情况)。

为那些“将文件复制为目标”选项选择“产品目录”。或您喜欢的标题所在的另一个目录。

那对我有用。存档(或发布)目录的构建可能与Debug的构建有很大不同。

还要在工作区设置中检查构建目录。

XD


0

对我来说,这个问题是在我向项目中添加新文件后发生的。从NSObject派生的空白.m和.h。这是我的解决方法:

  1. 关闭并重新启动xCode
  2. 通过XCode删除了两个新文件
  3. 重新编译成功

然后,我在之后重新添加了它们,它也起作用了。

绝对是xCode中的错误...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.