检测IOS设备types

我从这里find了解决scheme: 用iPhone SDK确定设备(iPhone,iPod Touch)

从链接,它build议使用图书馆https://gist.github.com/1323251

但显然,图书馆已经过时了。 在列表中找不到iPhone 5和新iPad等。

有谁知道我怎么能find完整的和更新的列表?

非常感谢。

你可以用下面的条件轻松检测iphoneiphone5iPad

  if([[UIDevice currentDevice]userInterfaceIdiom]==UIUserInterfaceIdiomPhone) { if ([[UIScreen mainScreen] bounds].size.height == 568.0f) { } else { //iphone 3.5 inch screen } } else { //[ipad] } 

我的回答: – 检测设备types

这工作得很好:

 if([UIDevice currentDevice].userInterfaceIdiom==UIUserInterfaceIdiomPad) { NSLog(@"IPAD"); }else{ NSLog(@"IPHONE"); } 

刚join@Mohammad Kamran Usmani答案。 更具体的iPhonetypes:

 @import UIKit; //Check which iPhone it is double screenHeight = [[UIScreen mainScreen] bounds].size.height; if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) { NSLog(@"All iPads"); } else if (UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPhone) { if(screenHeight == 480) { NSLog(@"iPhone 4/4S"); smallFonts = true; } else if (screenHeight == 568) { NSLog(@"iPhone 5/5S/SE"); smallFonts = true; } else if (screenHeight == 667) { NSLog(@"iPhone 6/6S"); } else if (screenHeight == 736) { NSLog(@"iPhone 6+, 6S+"); } else { NSLog(@"Others"); } } 

使用下面的代码:

 #import <sys/utsname.h> - (NSString *)machineName { struct utsname systemInfo; uname(&systemInfo); NSString *temp = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; if ([temp rangeOfString:@"iPod"].location != NSNotFound) { return @"iPod"; } if ([temp rangeOfString:@"iPad"].location != NSNotFound) { return @"iPad"; } if ([temp rangeOfString:@"iPhone"].location != NSNotFound) { return @"iPhone"; } return @"Unknown device"; } 

您可以使用下面的代码

 if(screenSize.width==2048 && screenSize.height==1536) { LetterParams.DeviceType=1;//IPadRetina } else if(screenSize.width==2048/2 && screenSize.height==1536/2) { LetterParams.DeviceType=2;//IPad Non-Retina } else if(screenSize.width==1136 && screenSize.height==640) { LetterParams.DeviceType=3;//IPhoneRetina } else { LetterParams.DeviceType=4;//IPhone & Ipod } 

这里是我提出的一个方法,专注于屏幕测量function的关键设备。 这是一个快速的方式来确定你需要什么。 这将检测到iPhone 5和第五代iPod触摸。

 typedef enum{ iPadRetina,iPadNoRetina,iPhoneiPod35InchRetina,iPhoneiPod35InchNoRetina,iPhoneiPod4InchRetina}DeviceType; -(void)yourCustomFunctionThatNeedsToKnowDeviceType { NSLog(@"device type = %i",[self getDeviceType]); switch ([self getDeviceType]) { case iPadRetina: { NSLog(@"This device is one of the following: iPad 3, iPad 4"); break; } case iPadNoRetina: { NSLog(@"This device is one of the following: iPad 1, iPad 2, iPad mini"); break; } case iPhoneiPod35InchRetina: { NSLog(@"This device is one of the following: iPhone 4/4S or iPod Touch 4th Generation"); break; } case iPhoneiPod35InchNoRetina: { NSLog(@"This device is one of the following: iPhone 3G/3GS or iPod Touch 3rd Generation"); break; } case iPhoneiPod4InchRetina: { NSLog(@"This device is one of the following: iPhone 5 or iPod Touch 5th Generation"); break; } } } -(int)getDeviceType { // Get the ratio of the device's screen (height/width) CGFloat screenRatio = [UIScreen mainScreen].bounds.size.height/[UIScreen mainScreen].bounds.size.width; // Initialize return value to negative value DeviceType type = -1; if(screenRatio > 1.5) { /* 4.0-Inch Screen This implies that the device is either an iPhone 5 or a 5th generation iPod Retina display is implicit */ type = iPhoneiPod4InchRetina; } else { /* Device must be iPad 1/2/3/4/mini or iPhone 4/4S or iPhone 3G/3GS */ // Take a screenshot to determine if the device has retina display or not UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0.0); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *scaleCheckImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { /* Device must be iPad 1/2/3/4/mini */ if(scaleCheckImage.scale == 1) { // iPad 1/2/mini (No Retina) type = iPadNoRetina; } else if(scaleCheckImage.scale == 2) { // iPad 3/4 (Retina) type = iPadRetina; } } else { /* Device must be iPhone 4/4S or iPhone 3G/3GS or iPod Touch 3rd Generation or iPod Touch 4th Generation */ if(scaleCheckImage.scale == 1) { // iPhone 3G/3GS or iPod Touch 3rd Generation (No Retina) type = iPhoneiPod35InchNoRetina; } else if(scaleCheckImage.scale == 2) { // iPhone 4/4S or iPod Touch 4th Generation (Retina) type = iPhoneiPod35InchRetina; } } } return type; } 
 if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) { NSLog(@"All iPads"); } else { else if (UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPhone) { if( screenHeight > 480 && screenHeight < 667 ) { NSLog(@"iPhone 5/5s/6"); } else if ( screenHeight > 480 && screenHeight < 736 ) { NSLog(@"Other iPhones Resizable"); } else if ( screenHeight > 480 ) { NSLog(@"iPhone 6 +"); } else { NSLog(@"iPhone 4s and others"); } } 

我与其他人正在维护GitHub上的代码,所以请从那里采取最新的代码。 我们不断在列表中添加新设备。

Objective-C : GitHub / DeviceUtil

Swift : GitHub / DeviceGuru

 #include <sys/types.h> #include <sys/sysctl.h> - (NSString*)hardwareDescription { NSString *hardware = [self hardwareString]; if ([hardware isEqualToString:@"iPhone1,1"]) return @"iPhone 2G"; if ([hardware isEqualToString:@"iPhone1,2"]) return @"iPhone 3G"; if ([hardware isEqualToString:@"iPhone3,1"]) return @"iPhone 4"; if ([hardware isEqualToString:@"iPhone4,1"]) return @"iPhone 4S"; if ([hardware isEqualToString:@"iPhone5,1"]) return @"iPhone 5"; if ([hardware isEqualToString:@"iPod1,1"]) return @"iPodTouch 1G"; if ([hardware isEqualToString:@"iPod2,1"]) return @"iPodTouch 2G"; if ([hardware isEqualToString:@"iPad1,1"]) return @"iPad"; if ([hardware isEqualToString:@"iPad2,6"]) return @"iPad Mini"; if ([hardware isEqualToString:@"iPad4,1"]) return @"iPad Air WIFI"; //there are lots of other strings too, checkout the github repo //link is given at the top of this answer if ([hardware isEqualToString:@"i386"]) return @"Simulator"; if ([hardware isEqualToString:@"x86_64"]) return @"Simulator"; return nil; } - (NSString*)hardwareString { size_t size = 100; char *hw_machine = malloc(size); int name[] = {CTL_HW,HW_MACHINE}; sysctl(name, 2, hw_machine, &size, NULL, 0); NSString *hardware = [NSString stringWithUTF8String:hw_machine]; free(hw_machine); return hardware; }