提问



我试图让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为红色。根据https://github.com/RestKit/RestKit/wiki/Installation-Troubleshooting可以,只是为了它,我删除了所有链接的依赖项。删除了其他链接器标志。封闭的&重新打开Xcode。把它们全部放回去。那个错误消失了。也许我错过了导致clang错误的框架。但我检查和检查的可能性很小。双重检查。它现在有效。[16]


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


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

最佳参考


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


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


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


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

其它参考1


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


假设您已经遵循RestKit Github的安装步骤
 https://github.com/RestKit/RestKit/blob/master/README.md#quick-start-aka-tldr[17]


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


清除,构建,运行。

其它参考2


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


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

其它参考3


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


另外,为了完全回答你的问题,我将RestKit文件保存在:

(项目目录)/Frameworks/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版本:[18]



  • libRestKitNetwork.a

  • libRestKitObjectMapping.a

  • libRestKitSupport.a

  • libRestKitJSONParserJSONKit.a

  • libRestKitXMLParserLibxml.a

  • libRestKitCoreData.a



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

其它参考4


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



  • 从项目中删除RestKit

  • 关闭您的项目

  • 移动主xcodeproject旁边的RestKit文件夹

  • 打开RestKit项目并构建它

  • 关闭RestKit项目

  • 打开您的项目,并将RestKit项目重新导入您的xcodeproject

  • 修复目标设置中的依赖关系和链接

  • 将$(BUILT_PRODUCTS_DIR)/../../Headers搜索路径添加到项目设置和目标设置中。 (当它们列在两者中时,它只适用于我。)



最后一步可能就是解决这个问题所必需的一切,但由于我也把头发拉过来,我尝试了很多不同的解决方案并且不想假设这最后一步是它修复的唯一原因本身。


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

其它参考5


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


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


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


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


我跟@class一起去,因为我只需要编译......


希望这有帮助!

其它参考6


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


我这样做了:


#import "RestKit.h"


而不是正确的方式:


#import <RestKit/RestKit.h>

其它参考7


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

其它参考8


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


那么,我修复这个问题的步骤:



  • 选择RestKit运行目标

  • 构建

  • 确保在所有目标上设置了标题搜索路径(显然在项目本身上是不够的)

  • 构建主项目


其它参考9


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

其它参考10


我的解决方案


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


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


?!!!


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

其它参考11


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


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


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


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

其它参考12


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


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


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


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


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

其它参考13


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