24

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

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

现在,我的项目甚至没有在调试模式下构建,并且我得到了相同的 RestKit/RestKit.h file not found 错误。

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

彻底的迷茫和沮丧。。

EDIT1:几个小时后,我放弃了。核爆了我的项目。创建了一个新项目。重新创建文件(从上一个项目复制粘贴)。现在“未找到 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 错误

EDIT2: libRestKit.a 是红色的。根据https://github.com/RestKit/RestKit/wiki/Installation-Troubleshooting没问题 只是为了它,我删除了所有链接的依赖项。删除了“其他链接器标志”。关闭并重新打开 Xcode。把它们都放回去。那个错误消失了。也许我错过了一个导致 clang 错误的框架。但我检查并仔细检查的可能性很小。现在可以了。

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

EDIT3: Apple 在第一时间批准了我的应用程序并且它已经上线了!我仍然不知道是什么导致了这里的问题。核对现有项目并创建新项目并复制旧文件(并定期检查构建是否通过)不是解决方案。所以我把这个问题悬而未决。

4

14 回答 14

10

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

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

安装指南只说为项目设置执行此操作。但是,在许多情况下,包括我的在内,您还需要为目标设置更新它们。

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

于 2012-04-28T00:28:35.067 回答
3

请注意 - 它完全是 hack - 但它让我的项目运行起来。

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

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

清洁、构建、运行。

于 2012-08-22T18:44:59.410 回答
3

我发现的解决方案不是将“$(BUILT_PRODUCTS_DIR)/../../Headers”复制并粘贴到目标的标题搜索路径中。

五小时后,我删除了副本并粘贴了“并手动输入它们并且它起作用了。

于 2012-12-05T03:44:42.273 回答
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 并注意有关仅使用libRestKit 的部分。 a在项目中用于最新的 RestKit 版本,其中早期版本具有:

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

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

于 2012-04-16T11:11:56.963 回答
2

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

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

最后一步可能是修复它所必需的,但由于我也为此烦恼,我尝试了很多不同的解决方案,并且不想假设这最后一步是它自行修复的唯一原因。

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

于 2012-04-17T12:49:21.390 回答
1

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

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

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

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

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

希望这有帮助!

于 2012-06-13T19:55:15.750 回答
1

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

我这样做了:

#import "RestKit.h"

而不是正确的方法:

#import <RestKit/RestKit.h>
于 2012-08-27T04:23:09.247 回答
0

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

于 2012-10-10T04:11:38.530 回答
0

我今天有完全相同的错误。我们所有的代码都在一个 github repo 中,restkit 文件夹被忽略了,所以没有 restkit 文件在里面。现在,当 xcode 打开项目并发现缺少的东西时,它假定一切都乱套了。所以,删除文件夹,重新克隆它,然后抓起一个新的 restkit 副本并将它扔在那里,瞧,一切正常。

于 2012-04-16T05:16:59.307 回答
0

我的解决方案:

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

相反,该值已设置为用户标题搜索路径。因此,您双击标题搜索路径,出现一些带有线条的窗格,您单击左下角,将该字符串粘贴到那里,单击其他地方以关闭窗口,然后......什么也没有。标头搜索路径没有更新,但用户标头搜索路径更新了。

?!!!

因此,您单击标题搜索路径上的披露按钮。单击属性右侧的 + 号并添加值...

于 2012-10-31T09:51:55.597 回答
0

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

所以,我解决这个问题的步骤:

  • 选择 RestKit 运行目标
  • 建造
  • 确保在所有目标上设置了标题搜索路径(显然在项目本身上是不够的)
  • 构建主项目
于 2012-06-02T21:21:07.457 回答
0

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

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

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

这导致标题搜索路径不起作用,因此找不到文件。很可能有一种方法可以使用更改标题搜索路径来查找您的文件,即使有空格也是如此。

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

于 2012-11-09T01:55:38.553 回答
0

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

于 2014-02-26T05:55:31.487 回答
0

这是一个常见的错误,会让你在修复它后想扇自己一巴掌。

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

我说的是之前$(BUILT和之后的报价_DIR)/../../Headers

如果您的构建配置名称中有空格(例如我的是“Ad Hoc”)并且您刚刚添加$(BUILT_PRODUCTS_DIR)/../../Headers 时没有前导和尾随引号,您最终可能会收到“词汇或预处理器问题:RestKit/RestKit.h 文件未找到”的问题。

于 2012-11-07T22:49:55.650 回答