在Xcode iPhone项目中检测我是否正在为模拟器或设备构建?

时间:2009-12-01 19:57:48

标签: iphone xcode target

根据我是在为模拟器还是设备构建,有没有办法在我的应用程序中有条件地编译? (我的应用程序挂钩到外部服务器:如果我在设备上运行,我想连接到localhost;如果我在设备上运行,我想去我的生产服务器。)

我正在寻找一些我能检测到的#ifdef变量,甚至是在运行时的东西......无关紧要。

感谢。

2 个答案:

答案 0 :(得分:18)

#if !(TARGET_IPHONE_SIMULATOR)

或者,

#if (TARGET_OS_IPHONE)

会告诉您是否在设备上运行。为了使它起作用,你必须

#include "TargetConditionals.h"

您可以找到here的文件。

答案 1 :(得分:1)

我创建了一个宏,您可以在其中指定要在括号内执行的操作,并且只有在模拟设备时才会执行这些操作。

#define SIM(x) if ([[[UIDevice currentDevice].model lowercaseString] rangeOfString:@"simulator"].location != NSNotFound){x;}

这是这样使用的:

SIM(NSLog(@"This will only be logged if the device is simulated"));