将OAuth添加到Xcode项目会导致Xcode找不到Foundation头文件(随后出现大量错误)

Cor*_*oyd 3 iphone xcode build oauth

我正在使用这个OAuth lib:http://github.com/jdg/oauthconsumer

将它添加到我的项目时,会导致超过2000个构建错误.这些错误都在"构建结果"窗口中的App_Preficx.pch文件下.

如果您实际上单击了错误,它们实际上包含在每个Foundation Header中.我不会列出所有这些,但这里有几个例子:

/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:236:0 /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:236: error: expected identifier or '(' before '@' token

/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:238:0 /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:238: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token

/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObject.h:8:0 /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObject.h:8: error: expected identifier or '(' before '@' token
Run Code Online (Sandbox Code Playgroud)

您可以看到Xcode似乎无法链接到Foundation或至少无法导入标头.

如果我从Xcode中删除OAuth,一切都很好并编译.

我可以在我心中添加搜索路径,但无济于事.

我添加了文档中所需的所有框架,库和搜索路径.

在所有2641个错误中,没有一个能给我带来任何真正的问题.似乎也没有任何后果的警告.

有没有人知道如何找出问题的原因?

Cor*_*oyd 5

好的找到了愚蠢的答案.

在前缀头中你可能会看到:

#ifdef __OBJC__
    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>

#endif
Run Code Online (Sandbox Code Playgroud)

如果你添加一些全局变量或类别或宏,你可能会想要这样做:

    #ifdef __OBJC__
        #import <Foundation/Foundation.h>
        #import <UIKit/UIKit.h>

    #endif

    #import "MacroUtilities.h"
    #import "Global.h"
Run Code Online (Sandbox Code Playgroud)

但这是个坏主意.原因是,如果您在任何"全局"文件中引用Obj-c对象,则可能会将objective-c代码添加到任何包含的c源文件中.从而导致疯狂的错误.

相反,保持真实:

    #ifdef __OBJC__
        #import <Foundation/Foundation.h>
        #import <UIKit/UIKit.h>
        #import "MacroUtilities.h"
        #import "Global.h"
    #endif
Run Code Online (Sandbox Code Playgroud)