I am using AVCaptureSession class to capture video. This class only active for Device mode. Other functionality working both simulator and device. How to handle this class for Simulator mode. Whether i have开发者_如何转开发 to command this class? please advice.
You can do this using three methods :
At compilation, by using preprocessor directive :
#if TARGET_IPHONE_SIMULATOR // simulator code #else // device code #endif
At runtime (more complex), by checking device :
// 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; }
At project build settings by excluding files depending on SDK (even more complex, but useful for librairies) :
"EXCLUDED_SOURCE_FILE_NAMES[sdk=iphoneos*][arch=*]" = ...
There is a better way now! As of Xcode 9.3 beta 4 you can use #if targetEnvironment(simulator)
to check.
精彩评论