我正在使用AVCaptureSession类来捕获视频.此类仅对设备模式有效.其他功能同时适用于模拟器和设备.如何为Simulator模式处理此类.我是否必须指挥这门课程?请指教.
您可以使用三种方法执行此操作:
在编译时,通过使用预处理器指令:
#if TARGET_IPHONE_SIMULATOR
// simulator code
#else
// device code
#endif
Run Code Online (Sandbox Code Playgroud)在运行时(更复杂),通过检查设备:
// Simple version :
if ([[[UIDevice currentDevice] model] isEqualToString:@"iPhone Simulator"]) {
// code
}
Run Code Online (Sandbox Code Playgroud)
要么
// 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;
}
Run Code Online (Sandbox Code Playgroud)在项目构建设置中,通过根据SDK排除文件(甚至更复杂,但对于库(librairies)有用):
"EXCLUDED_SOURCE_FILE_NAMES[sdk=iphoneos*][arch=*]" = ...
Run Code Online (Sandbox Code Playgroud)