使用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,如果这有帮助的话。谢谢。
答案 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