目标iPhone模拟器宏不起作用

时间:2010-08-06 21:20:42

标签: iphone cocoa-touch

使用TARGET_IPHONE_SIMULATOR宏会导致在am应用程序中定义相同的常量值。例如:

#ifdef TARGET_IPHONE_SIMULATOR
NSString * const Mode = @"Simulator";
#else
NSString * const Mode = @"Device";
#endif

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
   ...
   NSLog(@"Mode: %@", Mode);
   ...
}

始终导致记录“模式:模拟器”。我正在运行XCode 3.2.4,如果这有帮助的话。谢谢。

5 个答案:

答案 0 :(得分:104)

TARGET_OS_SIMULATOR在设备上定义(但定义为false)。修复是:

#include <TargetConditionals.h> // required in Xcode 8+

#if TARGET_OS_SIMULATOR
NSString * const Mode = @"Simulator";
#else
NSString * const Mode = @"Device";
#endif

不确定何时更改。我很确定过去可以使用'ifdef'。

答案 1 :(得分:13)

对我来说明确包括TargetConditionals.h帮助

#include <TargetConditionals.h>

答案 2 :(得分:5)

尝试使用TARGET_OS_SIMULATOR,因为不推荐使用TARGET_IPHONE_SIMULATOR。

答案 3 :(得分:3)

我会尝试实现宏,如果它将通过应用程序在不同的类上使用。

在pch文件中,

#if TARGET_IPHONE_SIMULATOR
#define isSimulator() YES
#else
#define isSimulator() NO
#endif

在任何类中我都可以通过调用isSimulator()来检查。

答案 4 :(得分:1)

出于某种原因,TARGET_IPHONE_SIMULATOR在xcode v6.4中对我不起作用。下面的代码段完美无缺:

#if (!arch(i386) && !arch(x86_64))
  camera           = Camera()
#else
  camera           = MockCamera()
#endif