iPhone模拟器 – 如何检测应用程序在模拟器上运行(所以可以设置testing数据)?

任何示例代码,将告诉我如何,在我的iPhone应用程序代码:

  1. 如何检测应用程序是否刚刚被部署到模拟器(而不是设备)[如果“部署”不可用,那么只是检测应用程序在模拟器上运行而不是设备)
  2. 在我的iPhone应用程序代码的地方,我会把设置我的testing数据在模拟器中的线 – 这是注意到我希望testing数据被有效地擦干净/重新安装每次我重新编译和推到模拟器(但我并不是真的希望在模拟器中使用应用程序的时候运行这个代码 – 例如应该能够在模拟器中交换应用程序,然后当我在模拟器中再次启动我的应用程序时,它不应该运行数据设置代码

关于如何掩盖在模拟器上pipe理这个testing数据的其他更好的build议是很好的。 这里的背景是,我正在谈论日历中的testing数据(例如使用事件工具包),所以我不希望有应用程序将日历项目放入我的iPhone时,我部署到我的设备(对不起 – 只有1个人iPhone在这里)。

我明显使用这样的东西…

#import <TargetConditionals.h> #if TARGET_IPHONE_SIMULATOR // Simulator specific code #else // TARGET_IPHONE_SIMULATOR // Device specific code #endif // TARGET_IPHONE_SIMULATOR 

而对于你的第二个问题…这样的事情应该可以帮到你。 在您的应用程序委托中:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if ( ! [[NSUserDefaults standardUserDefaults] boolForKey:@"initialized"] ) { // Setup stuff [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"initialized"]; } ... your code ... } 

如果你想检查运行时(而不是编译#macros的编译时间)使用此代码:

 UIDevice *currentDevice = [UIDevice currentDevice]; if ([currentDevice.model rangeOfString:@"Simulator"].location == NSNotFound) { //running on device } else { // running in Simulator } 

另请参阅此问题: 如何以编程方式确定我的应用程序是否在iphone模拟器中运行?

为我工作的代码块:

 #if defined(__i386__) || defined(__x86_64__) /* Run code if in Simulator */ #else /* Run code if in device */ #end 

我注意到__i386__不适用于iPhone 6模拟器,所以我添加了x86_64