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 ++类时它确实会受到伤害。