我正在使用AVCaptureSession类来捕获视频。此类仅对设备模式有效。其他功能同时适用于模拟器和设备。如何为Simulator模式处理此类。我是否必须指挥这门课程?请建议。
答案 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)
进行检查。