RestKit/RestKit.h文件未找到错误 - 版本0.10.0

24
我正在尝试构建和使用RestKit,但是遇到了“词法或预处理器问题:找不到RestKit / RestKit.h文件”的错误信息。我使用的是Xcode 4.2,我的项目是面向iOS的。早先,我在使用RestKit 0.9.0时调试模式完美地工作。然后我在尝试归档时遇到了问题。在阅读了这个论坛并尝试了一些解决方案之后,我决定升级到0.10.0版本希望能够解决这个问题。
现在,即使在调试模式下,我的项目也无法构建,我仍然收到同样的RestKit / RestKit.h文件未找到的错误。在头搜索路径下,我有这个设置: "$(BUILT_PRODUCTS_DIR)/../../Headers"。您能否建议以下内容(针对0.10.0版本): 1)RestKit应该物理位于哪里?(可能没有关系,但是哪一个适合您 - 希望我可以与您匹配) 2)我尝试将我的头搜索路径指向“/Developer/Library/RestKit-RestKit-69adee9/” ,之后又指向“/Developer/Library/RestKit-RestKit-69adee9/Build”
非常困惑和沮丧...
编辑1:几个小时后,我放弃了。删除了我的项目。创建了一个新项目。重新创建文件(从上一个项目中复制粘贴)。现在,“找不到RestKit”错误已经消失!但现在,我遇到了另一个错误:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_RKObjectMapping", referenced from:
objc-class-ref in myclassname1.o
"_OBJC_CLASS_$_RKObjectManager", referenced from:
objc-class-ref in myclassname2.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我检查过并确保我没有添加RestKit.framework... 我不知道为什么现在会出现clang错误。

编辑2: libRestKit.a 一开始是红色的。根据https://github.com/RestKit/RestKit/wiki/Installation-Troubleshooting 是正常的。为了好玩,我删除了所有链接的依赖项,删除了“其他链接器标志”,关闭并重新打开了Xcode。然后把它们都放回去了。那个错误消失了。也许我错过了一个框架导致clang出错。但这是非常不可能的,因为我进行了反复检查。现在它可以运行了。

它可以在调试模式下构建和存档。我还没有尝试过分发模式。

编辑3: 苹果公司第一次批准了我的应用程序,并且已经上线了!我仍然不知道在这里引起问题的原因。摧毁现有项目,创建一个新项目,复制旧文件(并定期检查是否通过构建)并不是解决方案。所以我将保持这个问题开放。


1
一直在尝试着构建RestKit已经好几个小时了。使用Xcode 4.3.2,在多个新项目中按照可视化指南运行RestKit 0.10,但是没有任何进展...真是让人沮丧。 - user328146
如果你也遇到了同样的问题,我建议你给这个问题点赞——这样它就有更好的机会吸引那些解决过它的人的注意。 - Ravi
在阅读了所有相关内容之后,我发现从头开始仔细阅读文档解决了我的所有问题:https://github.com/RestKit/RestKit/wiki/Installing-RestKit-in-Xcode-4.x - Marc Cenedella
14个回答

10

我认为我可以给你一些启示。

当您升级到0.10.0时,将头文件搜索路径更改为"$(BUILT_PRODUCTS_DIR)/../../Headers",是吗?

安装指南只建议在项目设置中执行此操作。然而,在许多情况下,包括我的情况,在目标设置中也需要更新它们。

目标设置仍将具有旧的头文件搜索路径,并且由于某种原因,它们决定不从项目设置继承。


2
谢谢。Will Turnage回答中提到了这一点。我尝试过,但没有成功。 - Ravi
把这些信息添加到项目和目标中,你就完成了。 - Atma
我顶了这个评论。我删除了我的头文件搜索值,构建项目失败,然后重新添加相同的内容,一切都好了。 - Nungster

3
我找到的解决方案是不要将"$(BUILT_PRODUCTS_DIR)/../../Headers"复制并粘贴到您的目标的头文件搜索路径中。经过五个小时后,我删除了复制和粘贴的引号,并手动输入它们,这样就可以了。

说实话,这对我来说听起来相当微不足道。我想,“嗯,这个解决方案太简单了,我太聪明了。”但是后来我非常绝望,不得不尝试它,结果它居然奏效了。黑魔法? - Git.Coach

3

请注意 - 这是一种非常规的方法,但它可以使我的项目运行起来。

假设您已经按照RestKit Github上的安装步骤进行了操作https://github.com/RestKit/RestKit/blob/master/README.md#quick-start-aka-tldr

在RestKit目标中,转到Build Phases。在Copy Headers下拉菜单中,将所有头文件从“Project”移动到“Public”。

清理、构建、运行。


2

在过去的几个小时里一直在处理同一个问题。最终对我有用的(我不是说这是一个确定的解决方法,但至少值得一试)。

  • 从项目中删除RestKit
  • 关闭您的项目
  • 将RestKit文件夹移到主xcodeproject旁边
  • 打开RestKit项目并构建它
  • 关闭RestKit项目
  • 打开您的项目,并重新导入RestKit项目到您的xcodeproject中
  • 在目标设置中修复依赖项和链接
  • 将“$(BUILT_PRODUCTS_DIR)/../../ Headers”搜索路径添加到项目设置和目标设置中。 (只有在两者都列出时才会对我起作用。)

可能仅需执行此最后一步即可修复它,但由于我也因此而感到抓狂,我尝试了很多不同的解决方案,并不想假设这最后一步就是它自己修复的唯一原因。

(我的设置是XCode 4.3.2和OS X 10.7.3)


2
我最近尝试从RestKit 0.9.3升级到0.10.0,并遇到了同样的问题。你删除了RestKit/build目录吗?这个目录包含.h文件的副本,并在构建0.9.x时作为构建过程的一部分创建。执行Product->Clean似乎不会删除这些文件。0.10.0似乎不会创建此构建目录。我怀疑您的构建错误是由于仍然拾取这些文件引起的。
此外,为了完全回答您的问题,我将RestKit文件保留在:
(project dir)/Frameworks/RestKit
这是一个git子模块,因此它包含特定修订版本的RestKit git repo的克隆。
头搜索路径为:
$(BUILT_PRODUCTS_DIR)/../../Headers 0.9.3的头搜索路径为:
$(SOURCE_ROOT)/RestKit/Build 我发现这个指南很有帮助(也许这就是你已经在遵循的内容):https://github.com/RestKit/RestKit/wiki/Installing-RestKit-in-Xcode-4.x 请注意其中关于只在最新的RestKit版本中项目中只有libRestKit.a的部分,而早期版本则有以下所有内容: libRestKitNetwork.a libRestKitObjectMapping.a libRestKitSupport.a libRestKitJSONParserJSONKit.a libRestKitXMLParserLibxml.a libRestKitCoreData.a
如果您拥有所有这些内容,请将它们从项目中删除。

我尝试删除RestKit/build文件夹,并验证了剩余的内容,但仍然卡在同样的问题上。 - Ravi
你在删除 RestKit/build 后是否也执行了 Product -> Clean 操作? - Rob B
是的,我做了。我“下载”了restkit并将该项目拖到我的项目中。我想尝试将RestKit作为子模块添加。当我使用“git submodule add -b master git://github.com/RestKit/RestKit.git”时,所有内容都被检出,但最后我看到“致命错误:无法强制更新当前分支。无法检出子模块'RestKit'”。这正常吗? - Ravi

1

在花费了两天的时间并浏览了每一个可能的谷歌结果后,我终于解决了这个问题!

这不是由于派生数据设置引起的,因为在XCode 4.3.2中已经很好了。

问题在于你正在做一个#import "RKObjectMapping.h"或其他一些包含。

相反,使用@class RKObjectMapping或者如果你真的需要.h文件,使用<RestKit/RKObjectMapping.h>

我选择了@class,因为我只需要编译...

希望这可以帮助到你!


1
我也遇到了这个问题。在模拟器上构建和运行都很好,但无法归档。以下是我的错误之处...
我做了这个:
#import "RestKit.h"

与其使用正确的方式:

#import <RestKit/RestKit.h>

0

对我来说,只有这些步骤有效。请检查此处。希望这能帮到你。


0

我的解决方案:

"$(BUILT_PRODUCTS_DIR)/../../Headers" 添加到目标 -> 构建设置 -> 搜索路径 -> 头文件搜索路径中时,该值未被设置。

相反,该值已经被设置到用户头文件搜索路径中。因此,您需要双击“头文件搜索路径”,一些带有行的窗格出现,您可以单击左下角的“+”号进行粘贴,然后单击其他位置以关闭窗口,但是...什么都没有发生。

头文件搜索路径没有得到更新,但用户头文件搜索路径已经更新了。

?!!!

所以您需要单击“头文件搜索路径”旁边的披露按钮。单击属性右侧的“+”号并添加该值...


0

遇到了非常类似的问题。结果发现我不小心把构建设置添加到了“User Header Search Paths”而不是“Header Search Paths”。


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