编译,构build或存档问题与Xcode 4(和依赖项)

这个问题在过去的几个星期里已经有所发展,以涵盖xcode4的更多一般性问题(以及旧版xcode的升级项目)。

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

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

  • Xcode 4无法存档应用程序
  • Xcode 4创build一个不可用的存档
  • Xcode 4不会创build一个.ipa
  • 由于预处理器错误,Xcode 4无法编译
  • Xcode 4无法find标题
  • Xcode 4的代码完成不起作用
  • 项目依赖不会编译
  • 添加依赖会导致上述任何问题

原来的问题

标题: Xcode 4中的“词法或预处理器问题文件未find”

我有一个在Xcode 4中的项目,将build立罚款,并在设备和模拟器上运行,但是当试图存档错误时,查找与静态库相关的头文件:

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 

很多谷歌search显示,很多人都有这个问题,但没有解决scheme。 任何人都有一个解决办法,甚至是一个线索。

更新:在所有configuration中, user headersearchpath都设置为${BUILT_PRODUCTS_DIR} 。 除了归档时,它可以使用任何configuration进行构build。

更新2: Merchant.h是一个自动生成的核心数据类,因此在.xcdatamodeld包内,但是在构build库时,头文件都被复制到公共头文件.xcdatamodeld

注意:下面的步骤将解决90%的Xcode存档问题,但是从build议您先尝试退出Xcode 。 这可以节省您调整设置的时间。

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

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

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

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

我能够通过简单地将.h文件复制到查找程序的Project目录中,而无需对任何构build设置进行任何更改来解决此问题。 我没有把它们添加到项目中。 只要将它们放在项目的文件系统目录中就足以让Xcode的隐式链接正常工作。 更多细节在这里 。

我有这样一个奇怪的问题。 将“扫描所有资源文件…”更改为“是”没有帮助。 我看了一下框架searchpath,发现我有

  • $(inheritance)
  • “$(SRCROOT)”
  • “$(SRCROOT)/我的/正确的/path”

这似乎是正确的,但仍然失败。 然后,我尝试重新排列2&3的顺序,突然间它build好了。 所以不知道为什么这是垃圾邮件,但想把它添加到事情的名单,以防万一它帮助别人。

我的解决办法是改变我的

 #import "HeaderFile.h" 

 #import <FrameworkName/HeaderFile.h> 

一切又开始了。 不寻常的是,build筑几次之后,它突然停止了工作。

问题解决时,我自己设置

生成设置 – >项目 – >searchpath为是

我的项目( GHUnit ProjectProjectTest )有两个相同的目标。 当我的scheme设置为Project时<GHUnitIOS/GHUnit.h>的导入是<GHUnitIOS/GHUnit.h> 词法或预处理器问题文件”的问题 。 但是当我将ProjectTest设置为一个scheme时,一切正常。 所以,我也在Project中添加了GHUnitIOS.framework

看起来您的标题searchpath不正确,在您的活动scheme的构build设置中没有正确configuration。 validation它们并用当前设置更新你的问题。

我在模拟器上有类似的问题,但不是设备和我的标题searchpath字段是空的(似乎是默认)。 但改变工作空间似乎已经解决了这个问题。 也许你可以尝试创build一个新的工作区,添加你的项目,看看是否有帮助。 现在我正在调查为什么。

我得到这个“文件未find”错误的一个特定的.h文件在我的项目。 我通过从项目中删除.h文件(select“删除引用”)并重新添加它来解决问题。

添加更多的变体:在Compile Source阶段,我有两个foo.m实例,其中一些如何导致foo.h “Header not found”。

另一个机会:

在工作区项目中:观察目标中的部分构build阶段。 由于许多手册说,你需要有一个复制文件构build阶段复制所有的标题到另一个地方,因为iOS框架不能包含头文件共享(这是我的情况)。

select这些复制文件作为目的地选项“产品目录”。 或者像你的头文件将驻留在其他目录。

这对我有效。 存档(或发布)目录的构build可能与构builddebugging时的预期非常不同。

另外检查您的工作区设置您的build立目录。

XD

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

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

然后,我再加上他们,它也工作。

肯定是xCode中的一个错误…