如何在Xcode中检测模拟器和设备代码?

时间:2011-06-15 09:28:21

标签: iphone

我正在使用AVCaptureSession类来捕获视频。此类仅对设备模式有效。其他功能同时适用于模拟器和设备。如何为Simulator模式处理此类。我是否必须指挥这门课程?请建议。

2 个答案:

答案 0 :(得分:5)

您可以使用以下三种方法执行此操作:

  • 编译时,使用预处理程序指令:

    #if TARGET_IPHONE_SIMULATOR
    // simulator code
    #else
    // device code
    #endif
    
  • 在运行时(更复杂),通过检查设备:

    // Simple version :
    if ([[[UIDevice currentDevice] model] isEqualToString:@"iPhone Simulator"]) {
       // code
    }
    

    OR

    // More precise version:
    - (NSString *) platform{
      size_t size;
      sysctlbyname("hw.machine", NULL, &size, NULL, 0);
      char *machine = malloc(size);
      sysctlbyname("hw.machine", machine, &size, NULL, 0);
      NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
      free(machine);
      return platform;
    }
    
    - (NSString *) platformString{
      NSString *platform = [self platform];
      if ([platform isEqualToString:@"iPhone1,1"])    return @"iPhone1G";
      if ([platform isEqualToString:@"iPhone1,2"])    return @"iPhone3G";
      if ([platform isEqualToString:@"iPhone2,1"])    return @"iPhone3GS";
      if ([platform isEqualToString:@"iPhone3,1"])    return @"iPhone4";
      if ([platform isEqualToString:@"iPod1,1"])      return @"iPodTouch1G";
      if ([platform isEqualToString:@"iPod2,1"])      return @"iPodTouch2G";
      if ([platform isEqualToString:@"iPod3,1"])      return @"iPodTouch3G";
      if ([platform isEqualToString:@"iPod4,1"])      return @"iPodTouch4G";
      if ([platform isEqualToString:@"iPad1,1"])      return @"iPad";
      if ([platform isEqualToString:@"iPad2,1"])      return @"iPad2Wifi";
      if ([platform isEqualToString:@"iPad2,2"])      return @"iPad2GSM";
      if ([platform isEqualToString:@"iPad2,3"])      return @"iPad2CDMA";
      if ([platform isEqualToString:@"i386"])         return @"iPhoneSimulator";
      return platform;
    }
    
  • 在项目构建设置中,通过根据SDK排除文件(更复杂,但对库管理有用):

    "EXCLUDED_SOURCE_FILE_NAMES[sdk=iphoneos*][arch=*]" = ...
    

答案 1 :(得分:0)

现在有更好的方法!从Xcode 9.3 beta 4开始,您可以使用#if targetEnvironment(simulator)进行检查。