TARGET_OS_IPHONE和ApplicationTests

为什么在编译ApplicationTestsunit testing包时这个代码不工作?

#if TARGET_OS_IPHONE #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> #else #import <Cocoa/Cocoa.h> #endif 

我的一个依赖项有这个检查,并且在我的主应用程序包中编译得很好,但是它在编译我的ApplicationTests包时试图加载<Cocoa/Cocoa.h> 。 这可能只是我对XCode的理解不足,但是当我的testing包不能构build时,我会感到紧张。 有什么build议么?

我有一个类似的问题:build立一个静态库时,没有定义TARGET_OS_IPHONE 。 我的解决scheme是将“ -DTARGET_OS_IPHONE ”添加到目标构build选项的“ Other C Flags ”部分。

你需要添加

 #import "TargetConditionals.h" 

来源: http : //opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/TargetConditionals.h

最简单的解决scheme是将#import <Foundation/Foundation.h>语句移出来,如果#if条件,并用这样的AppKitreplacecocoa:

 #import <Foundation/Foundation.h> #if TARGET_OS_IPHONE #import <UIKit/UIKit.h> #else #import <AppKit/AppKit.h> #endif 

Foundation伞标题导入NSObjCRuntime标题,该标题又导入TargetConditionals标题。

它没有施加任何惩罚,虽然它可能会影响编译时间。 也就是说,这对于Objective C来说并不是真正的问题。然而,在处理C ++类时它确实会受到伤害。