Xcode 4(和依赖项)的编译、构建或存档问题

Posted

技术标签:

【中文标题】Xcode 4(和依赖项)的编译、构建或存档问题【英文标题】:Compile, Build or Archive problems with Xcode 4 (and dependencies) 【发布时间】:2011-07-31 20:33:45 【问题描述】:

这个问题在过去几周内已经演变为涵盖xcode4 的更一般性问题(以及从旧的xcodes 升级项目)。

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

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

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 

Much 谷歌搜索显示很多人都遇到了这个问题,但没有解决方案。任何人都得到了修复甚至线索。

更新:user header 搜索路径在所有配置中都设置为 $BUILT_PRODUCTS_DIR。除了存档时,它使用任何配置都可以很好地构建。

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

最后一个建议就是解决这个问题所需要的。关闭并重新打开 Xcode。 是的,对我来说也是一样,只需要重新启动 Xcode。它发生在我在项目中重命名和移动文件之后。 我也是。没有什么比不应该存在的错误更令人沮丧的了。很高兴能如此轻松地解决它。 对于将旧项目从 xcode3 迁移到 xcode4 的 Three20 用户的注意事项:您(可能)必须更改 xcode 首选项/位置/高级/->目标指定的位置。更多信息请参见***.com/questions/5261447/… 1号的废话。引号!环境 $(SRC_ROOT) 当然,“可能”用带空格的路径解析。无法弄清楚为什么压缩我的项目并在其他地方提取会导致构建失败!【参考方案4】:

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

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

【讨论】:

我遇到了类似的情况,但是由于错误地引用了同一类中的不相关属性而显示了不需要的错误(基本上我忘了使用 self。) - 奇怪的一个。【参考方案5】:

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

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

$(继承) “$(SRCROOT)” "$(SRCROOT)/my/correct/path"

这似乎是正确的,但仍然失败。然后我尝试重新排列 2 和 3 的顺序,突然之间它构建得很好。所以不知道为什么会这样,但想把它添加到要尝试的事情列表中,以防它帮助别人。

【讨论】:

【参考方案8】:

设置后问题自行解决

Build Settings->Project->Search Paths to Yes

【讨论】:

【参考方案9】:

只需将 .h 文件复制到 finder 中的项目目录中,我就能在不更改任何构建设置的情况下解决此问题。我根本没有将它们添加到项目中。只需将它们放在项目的文件系统目录中似乎就足以让 Xcode 的隐式链接正常工作。更多详情here.

【讨论】:

+1 我已经添加了一个指向他接受答案的问题的链接,感谢您的信息!【参考方案10】:

添加更多变体:我在Compile Source 构建阶段有两个foo.m 实例,这在某种程度上导致foo.h 出现“找不到标题”。

【讨论】:

【参考方案11】:

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

【讨论】:

我遇到了相反的问题。看我的回答:***.com/a/16783389/629014【参考方案12】:

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

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

我后来重新添加了它们,它也起作用了。

绝对是 xCode 中的一个错误...

【讨论】:

【参考方案13】:

另一个机会:

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

选择那些复制文件作为目标选项“产品目录”。或者你喜欢的另一个目录,标题所在的位置。

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

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

XD

【讨论】:

【参考方案14】:

我的解决方案是改变我的

#import "HeaderFile.h"

#import <FrameworkName/HeaderFile.h>

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

【讨论】:

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

以上是关于Xcode 4(和依赖项)的编译、构建或存档问题的主要内容,如果未能解决你的问题,请参考以下文章

Xcode Cloud 无法上传已嵌入包依赖项的存档

由于文件间依赖关系,在 Xcode 中创建存档不起作用

当我在 Xcode 4 中“构建存档”时,文件在哪里?

管理器中的 Xcode 4.1 存档构建不显示图标

无法构建或存档运行良好的 Xcode 项目

RestKit 在存档模式下中断构建 - Xcode 8