执行环境
可以从 UIDevice 的属性 model 得到在现在执行的环境。例子如下:
更新了一下,支持iPhone4和iPad,iPod Touch4 #import <Foundation/Foundation.h> #import <sys/utsname.h> enum { MODEL_UNKNowN, MODEL_IPHONE_SIMULATOR, MODEL_IPOD_TOUCH, MODEL_IPOD_TOUCH_2G, MODEL_IPOD_TOUCH_3G, MODEL_IPOD_TOUCH_4G, MODEL_IPHONE, MODEL_IPHONE_3G, MODEL_IPHONE_3GS, MODEL_IPHONE_4G, MODEL_IPAD }; @interface DeviceDetection : NSObject + (uint) detectDevice; + (int) detectModel; + (Nsstring *) returnDeviceName:(BOOL)ignoreSimulator; + (BOOL) isIPodTouch; + (BOOL) isOS4; + (BOOL) canSendSms; @end #import "DeviceDetection.h" #import <MessageUI/MessageUI.h> #include <sys/types.h> #include <sys/sysctl.h> @implementation DeviceDetection + (BOOL) isIPodTouch { int model = [DeviceDetection detectDevice]; if (model == MODEL_IPOD_TOUCH || model == MODEL_IPAD){ //|| model == MODEL_IPHONE_SIMULATOR){ return YES; } else { return NO; } } + (BOOL) isOS4 { // TBD return YES; } + (BOOL)canSendSms { return [MFMessageComposeViewController canSendText]; } + (Nsstring *)platform{ size_t size; sysctlbyname("hw.machine",NULL,&size,0); char *machine = malloc(size); sysctlbyname("hw.machine",machine,0); Nsstring *platform = [Nsstring stringWithUTF8String:machine]; free(machine); return platform; } + (int) detectModel{ Nsstring *platform = [DeviceDetection platform]; if ([platform isEqualToString:@"iPhone1,1"]) return MODEL_IPHONE; if ([platform isEqualToString:@"iPhone1,2"]) return MODEL_IPHONE_3G; if ([platform isEqualToString:@"iPhone2,1"]) return MODEL_IPHONE_3GS; if ([platform isEqualToString:@"iPhone3,1"]) return MODEL_IPHONE_4G; if ([platform isEqualToString:@"iPod1,1"]) return MODEL_IPOD_TOUCH; if ([platform isEqualToString:@"iPod2,1"]) return MODEL_IPOD_TOUCH_2G; if ([platform isEqualToString:@"iPod3,1"]) return MODEL_IPOD_TOUCH_3G; if ([platform isEqualToString:@"iPod4,1"]) return MODEL_IPOD_TOUCH_4G; if ([platform isEqualToString:@"iPad1,1"]) return MODEL_IPAD; if ([platform isEqualToString:@"i386"]) return MODEL_IPHONE_SIMULATOR; return MODEL_UNKNowN; } + (uint) detectDevice { Nsstring *model= [[UIDevice currentDevice] model]; // Some iPod Touch return "iPod Touch",others just "iPod" Nsstring *iPodTouch = @"iPod Touch"; Nsstring *iPodTouchLowerCase = @"iPod touch"; Nsstring *iPodTouchShort = @"iPod"; Nsstring *iPad = @"iPad"; Nsstring *iPhonesimulator = @"iPhone Simulator"; uint detected; if ([model compare:iPhonesimulator] == NSOrderedSame) { // iPhone simulator detected = MODEL_IPHONE_SIMULATOR; } else if ([model compare:iPad] == NSOrderedSame) { // iPad detected = MODEL_IPAD; } else if ([model compare:iPodTouch] == NSOrderedSame) { // iPod Touch detected = MODEL_IPOD_TOUCH; } else if ([model compare:iPodTouchLowerCase] == NSOrderedSame) { // iPod Touch detected = MODEL_IPOD_TOUCH; } else if ([model compare:iPodTouchShort] == NSOrderedSame) { // iPod Touch detected = MODEL_IPOD_TOUCH; } else { // Could be an iPhone V1 or iPhone 3G (model should be "iPhone") struct utsname u; // u.machine Could be "i386" for the simulator,"iPod1,1" on iPod Touch,"iPhone1,1" on iPhone V1 & "iPhone1,2" on iPhone3G uname(&u); if (!strcmp(u.machine,1")) { detected = MODEL_IPHONE; } else if (!strcmp(u.machine,2")){ detected = MODEL_IPHONE_3G; } else if (!strcmp(u.machine,"iPhone2,1")){ detected = MODEL_IPHONE_3GS; } else if (!strcmp(u.machine,"iPhone3,1")){ detected = MODEL_IPHONE_4G; } } return detected; } + (Nsstring *) returnDeviceName:(BOOL)ignoreSimulator { Nsstring *returnValue = @"UnkNown"; switch ([DeviceDetection detectDevice]) { case MODEL_IPHONE_SIMULATOR: if (ignoreSimulator) { returnValue = @"iPhone 3G"; } else { returnValue = @"iPhone Simulator"; } break; case MODEL_IPOD_TOUCH: returnValue = @"iPod Touch"; break; case MODEL_IPHONE: returnValue = @"iPhone"; break; case MODEL_IPHONE_3G: returnValue = @"iPhone 3G"; break; default: break; } return returnValue; } @end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。