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

时间:2012-04-16 04:07:18

标签: iphone ios header clang restkit

我试图让RestKit建造和工作,我正在失去我的头发。我得到了可怕的“词法或预处理器问题:未找到RestKit / RestKit.h文件”消息。我使用Xcode 4.2&我的项目适用于iOS。

早些时候,我的调试模式与RestKit 0.9.0完美配合。然后我在尝试存档时遇到了问题。在阅读了这个论坛并尝试了一些解决方案之后,我决定升级到0.10.0,希望能够解决这个问题。

现在,我的项目甚至没有在调试模式下构建,我得到了相同的RestKit / RestKit.h文件找不到错误。

我在Header搜索路径下有这个:“$(BUILT_PRODUCTS_DIR)/../../ Headers”。你能否建议(适用于0.10.0版本): 1)RestKit的物理位置应该在哪里? (这可能没关系,但哪一个对你有用 - 希望我可以反映你的设置) 2)我试图将我的标题搜索路径指向“/ Developer / Library / RestKit-RestKit-69adee9 /”,然后指向“/ Developer / Library / RestKit-RestKit-69adee9 / Build”

彻底困惑和沮丧..

EDIT1:几个小时后,我放弃了。 Nuked我的项目。创建了一个新项目。重新创建文件(从prev项目复制粘贴)。现在“RestKit not found”错误消失了!但现在,我收到了另一个错误:

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错误

EDIT2: libRestKit.a为红色。根据{{​​3}}没关系。只是为了它,我删除了所有链接的依赖项。删除了“其他链接器标志”。封闭的&重新打开Xcode。把它们全部放回去。那个错误消失了。也许我错过了导致clang错误的框架。但是我检查&双重检查。它现在有效。

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

EDIT3: Apple第一次批准我的应用程序&它是现场直播!我仍然不知道是什么原因引起了这个问题。 Nuking现有项目&创造一个新的&复制旧文件(并定期检查构建是否通过)不能成为解决方案。所以我打开这个问题。

14 个答案:

答案 0 :(得分:10)

我想我可以对此有所了解。

升级到0.10.0后,您将标题搜索路径更改为"$(BUILT_PRODUCTS_DIR)/../../Headers",对吧?

安装指南仅针对项目设置执行此操作。但是,在很多情况下 (包括我的),您还需要为目标设置更新它们。

目标设置仍然具有旧的标题搜索路径,并且无论出于何种原因决定不继承项目设置。

答案 1 :(得分:3)

请注意 - 它完全是黑客攻击 - 但是我的项目正在运行。

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

在RestKit目标中,转到构建阶段。在复制标题下拉列表下,将所有标题文件从“项目”移至“公共”。

清洁,构建,运行。

答案 2 :(得分:3)

我找到的解决方案是不要将“$(BUILT_PRODUCTS_DIR)/../../ Headers”复制并传递到目标的标题搜索路径。

五个小时后,我删除了副本并粘贴了“并手动键入它们并且工作正常。

答案 3 :(得分:2)

我最近玩过从RestKit 0.9.3升级到0.10.0并且做了同样的事情。你删除了RestKit / build目录吗?它包含.h文件的副本,并在构建0.9.x时作为构建过程的一部分创建。做产品 - > Clean似乎不会删除这些文件。 0.10.0似乎没有创建此构建目录。我怀疑你的构建错误是由于那些文件仍在被提取。

另外,为了完全回答你的问题,我将RestKit文件保存在:
(项目目录)/框架/ RestKit
这是一个git子模块,因此它包含特定版本的RestKit git repo的克隆。

标题搜索路径为:
$(BUILT_PRODUCTS_DIR)/../../接头

0.9.3的标题搜索路径是:
$(SOURCE_ROOT)/ RestKit /构建

我发现本指南很有帮助(也许这就是您已经关注的内容):https://github.com/RestKit/RestKit/wiki/Installing-RestKit-in-Xcode-4.x 并注意项目中仅包含 libRestKit.a 的部分,其中包含早期版本具有以下所有内容的最新RestKit版本:

  • libRestKitNetwork.a
  • libRestKitObjectMapping.a
  • libRestKitSupport.a
  • libRestKitJSONParserJSONKit.a
  • libRestKitXMLParserLibxml.a
  • libRestKitCoreData.a

如果您拥有所有这些内容,请从项目中删除它们。

答案 4 :(得分:2)

过去几个小时一直在争论同样的问题。什么最终对我有用(我不是说这是一个明确的解决方案,但至少它是尝试的东西)。

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

这最后一步可能是修复它的必要条件,但由于我也把头发拉过来,我尝试了很多不同的解决方案,并且不想假设这最后一步是唯一的原因。修好了。

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

答案 5 :(得分:1)

在这个相同的错误上花了2天并导航到每个可能的谷歌搜索结果后我终于明白了!

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

问题是您正在进行#import "RKObjectMapping.h"或其他一些包含。

而是使用@class RKObjectMapping或者如果你真的知道.h使用<RestKit/RKObjectMapping.h>

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

希望这有帮助!

答案 6 :(得分:1)

也有这个问题。它可以在模拟器上构建和运行,但不会存档。这是我出错的地方......

我这样做了:

#import "RestKit.h"

而不是正确的方式:

#import <RestKit/RestKit.h>

答案 7 :(得分:0)

我今天遇到了完全相同的错误。我们所有的代码都在一个github repo中,而restkit文件夹被忽略,因此没有任何restkit文件存在。现在,当xcode打开项目并发现缺少的东西时,它会假设一切都崩溃了。所以,删除了文件夹,重新克隆它,然后抓住了一个新的restkit副本并把它扔进那里,瞧,一切正常。

答案 8 :(得分:0)

我发现我需要手动构建RestKit目标,以便将头文件复制到构建目录中。显然,主项目构建不能可靠地运行子项目构建吗?

所以,我修复此问题的步骤:

  • 选择RestKit运行目标
  • 构建
  • 确保在所有目标上设置了标题搜索路径(显然项目本身是不够的)
  • 构建主项目

答案 9 :(得分:0)

有一个非常相似的问题。结果是我不小心将构建设置添加到“用户标题搜索路径”而不是“标题搜索路径”。

答案 10 :(得分:0)

我的解决方案:

"$(BUILT_PRODUCTS_DIR)/../../Headers"添加到 目标 - &gt;构建设置 - &gt;搜索路径 - &gt;标题搜索路径, 该值未设置。

而是已将值设置为用户标题搜索路径。 因此,您双击“页眉搜索路径”,出现一些带有线条的窗格,单击“向左+向下”,将该字符串粘贴到那里,单击其他位置以关闭窗口并且......没有。 标题搜索路径没有更新,但用户标题搜索路径确实如此。

?!!!

所以你点击标题搜索路径上的公开按钮。 单击属性右侧的+符号并添加值...

答案 11 :(得分:0)

这是一个常见的错误,它会让你在修复它之后想要自己拍打。

是的,您肯定希望将"$(BUILT_PRODUCTS_DIR)/../../Headers"添加到目标Header Search Paths,但不要忘记包含引号!

我在谈论$(BUILT之前和_DIR)/../../Headers之后的引用

如果您的构建配置名称中有空格(例如我的是'Ad Hoc')并且您刚刚添加了$(BUILT_PRODUCTS_DIR)/../../Headers 而没有引号和尾随引号,那么您可能会结束得到“词法或预处理器问题:找不到RestKit / RestKit.h文件”问题。

答案 12 :(得分:0)

这是一个我认为没有足够答案解决这个问题的问题,因为如果你有这个问题,感觉就像没有什么可做的!在尝试了所有提出的解决方案之后(它们都没有工作)。我终于找到了问题

问题是我的一个文件夹中有一个空格。不要在源文件夹名称中使用空格!

Used to be : (/Xcode projects/basicRestkit etc...)  -- lots of pain and suffering  
changed to : (/projects/basicRestkit) -- lots of rejoicing

这导致标题搜索路径无效,因此无法找到文件。可能有一种方法可以使用改变标题搜索路径来查找文件,即使是空格。

这可能对你没有帮助,但很有可能。祝你好运。

答案 13 :(得分:0)

对我来说,只有这些步骤有效。检查here希望这会有所帮助。