使用Xcode 4(和依赖项)编译,构建或存档问题

时间:2011-04-07 16:22:52

标签: objective-c compiler-construction xcode4 clang c-preprocessor

这个问题在过去几周内已经发展,以涵盖的更多一般性问题(以及从旧升级项目)。

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

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

  • 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 

很多 Google搜索显示许多人遇到此问题但没有解决方案。任何人都得到了修复甚至线索。

更新user header搜索路径在所有配置中都设置为${BUILT_PRODUCTS_DIR}。除了归档时,它使用任何配置构建良好。

更新2: Merchant.h是一个自动生成的Core Data类,因此位于.xcdatamodeld包内,但是当所有标头都被复制到公共标头目录时图书馆已建成。

14 个答案:

答案 0 :(得分:118)

  

注意:以下步骤将解决90%的Xcode存档问题   但是,根据评论建议您尝试quitting Xcode   第一。这可以节省您设置调整的时间。

  1. 检查“用户标题路径”是否正确(在项目和依赖项中添加“”到空格路径)
  2. 将“始终搜索用户路径”设置为“是”
  3. 在项目中创建一个组合“索引标题”并将标题拖到该组,不要在提示时添加到任何目标。这包括 .xcdatamodeld 中的所有标头,您需要右键单击并查看包内容才能找到它们。
  4. 对于所有依赖项,请将“跳过安装”构建设置设置为“是”
  5. 将Build Phases中的任何“Public”标题移动到“Project”
  6. 将目标上的构建设置“安装目录”设置为$(LOCAL_APPS_DIR)
  7. 将目标构建设置“扫描包含的所有源文件”更改为YES。 (link
  8. 使用较新版本的Xcode(> 4.2),您可能希望read this question与工作空间相关。
  9. 手动delete the project.xcworkspace files构成所有引用的项目

答案 1 :(得分:13)

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

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

答案 2 :(得分:11)

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

答案 3 :(得分:6)

通过简单地将.h文件复制到finder中的Project目录中,我能够解决此问题,而无需对任何构建设置进行任何更改。我根本没有将它们添加到项目中。将它们放在项目的文件系统目录中似乎足以让Xcode的隐式链接正常工作。更多详情here

答案 4 :(得分:4)

我有一个像这样的奇怪问题。将“扫描所有资源文件...”更改为“是”没有帮助。我看了一下框架搜索路径,注意到我有

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

似乎没错,但仍然失败了。然后我尝试重新排列2&的顺序。 3,突然间它建好了。所以不确定为什么那是hickup,但是想把它添加到事情列表中以防万一它可以帮助别人。

答案 5 :(得分:3)

我的解决方案是改变我的

#import "HeaderFile.h"

#import <FrameworkName/HeaderFile.h>

一切都开始了。 不寻常的是它在建造后突然停止工作 几次。

答案 6 :(得分:2)

设置

时问题自行解决

构建设置 - &gt;项目 - &gt;搜索路径为是

答案 7 :(得分:2)

我的项目中有2个目标( Project ProjectTest GHUnit)。当我的方案设置为 Project 时,<GHUnitIOS/GHUnit.h>的导入是“lexical或preprocessor issue file not found”的问题。但是当我设置为 ProjectTest 的方案时,一切都还可以。所以,我也在 Project 中添加了GHUnitIOS.framework

答案 8 :(得分:1)

在主动方案的构建设置中,您的标头搜索路径看起来不正确。验证它们并使用当前设置更新您的问题。

答案 9 :(得分:1)

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

答案 10 :(得分:1)

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

答案 11 :(得分:1)

添加更多变体:我在foo.m构建阶段有两个Compile Source个实例,其中一些是foo.h导致“未找到标题”的原因。

答案 12 :(得分:1)

另一个机会:

在工作区项目中:在Target中查看Build Phases部分。正如许多手册所说,你需要有一个复制文件构建阶段将所有标题复制到另一个地方,因为iOS Framework不能包含要共享的头文件(这是我的情况)。

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

这对我有用。可能Archive(或Release)目录的构建与Debug的构建中的预期非常不同。

同时检查您的工作区设置您的构建目录。

XD

答案 13 :(得分:0)

对我来说,这个问题发生在我向项目添加新文件之后;从NSObject派生的空白.m和.h。以下是我如何解决它:

  1. 关闭并重新启动xCode
  2. 通过XCode删除了两个新文件
  3. 成功重新编译
  4. 然后我重新添加它们,它也起作用。

    绝对是xCode中的错误...