如何解决如何在Xcode中检测模拟器和设备代码?
| 我正在使用AVCaptureSession类来捕获视频。此类仅在设备模式下有效。模拟器和设备均可使用的其他功能。如何在模拟器模式下处理此类。我是否必须指挥此类课程?请指教。解决方法
您可以使用以下三种方法执行此操作:
在编译时,通过使用预处理指令:
#if TARGET_IPHONE_SIMULATOR
// simulator code
#else
// device code
#endif
在运行时(更复杂),通过检查device:
// Simple version :
if ([[[UIDevice currentDevice] model] isEqualToString:@\"iPhone Simulator\"]) {
// code
}
要么
// More precise version:
- (NSString *) platform{
size_t size;
sysctlbyname(\"hw.machine\",NULL,&size,0);
char *machine = malloc(size);
sysctlbyname(\"hw.machine\",machine,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=*]\" = ...
, 现在有更好的方法!从Xcode 9.3 beta 4开始,您可以使用#if targetEnvironment(simulator)
进行检查。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。