In my application (written in Objective-C), how do I detect if the device is an iPhone, iPad, or iPhone5?
if([[UIDevice currentDevice]userInterfaceIdiom] ==
Please check below code:
UIDevice_enhanced.h
@interface UIDevice (Enhanced)
typedef enum {
kUnknownPlatform = 0,
kiPhone1G,
kiPhone3G,
kiPhone3GS,
kiPhone4,
kiPhone4Verizon,
kiPhone4S,
kiPhone5GSM,
kiPhone5CDMA,
kiPhone5CGSM,
kiPhone5CCDMA,
kiPhone5SGSM,
kiPhone5SCDMA,
kiPhone6,
kiPhone6P,
kiPhone6S,
kiPhone6SP,
kiPodTouch1G,
kiPodTouch2G,
kiPodTouch3G,
kiPodTouch4G,
kiPodTouch5G,
kiPad,
kiPad2Wifi,
kiPad2GSM,
kiPad2CMDA,
kiPad3Wifi,
kiPad3GSM,
kiPad3CMDA,
kiPad4Wifi,
kiPad4GSM,
kiPad4CMDA,
kiPadAirWifi,
kiPadAirCellular,
kiPadMiniWifi,
kiPadMiniGSM,
kiPadMiniCDMA,
kiPadMini2GWifi,
kiPadMini2GCellular,
kSimulator
} PlatformType;
- (NSString *) platformName;
- (PlatformType) platform;
@end
UIDevice_enhanced.m
#import "UIDevice_enhanced.h"
#include <sys/utsname.h>
@interface UIDevice (Enhanced)
- (NSString *) platformCode;
@end
@implementation UIDevice (Enhanced)
// Utility method (private)
- (NSString*) platformCode {
struct utsname systemInfo;
uname(&systemInfo);
NSString* platform = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
return platform;
}
// Public method to use
- (NSString*) platformName {
NSString* platform = [self platformCode];
if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPhone3,3"]) return @"Verizon iPhone 4";
if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (GSM)";
if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (GSM)";
if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM)";
if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G";
if ([platform isEqualToString:@"iPad1,1"]) return @"iPad";
if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)";
if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
if ([platform isEqualToString:@"iPad2,4"]) return @"iPad 2 (WiFi)";
if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini (WiFi)";
if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini (GSM)";
if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini (GSM+CDMA)";
if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3 (WiFi)";
if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM+CDMA)";
if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3 (GSM)";
if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4 (WiFi)";
if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4 (GSM)";
if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4 (GSM+CDMA)";
if ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air (WiFi)";
if ([platform isEqualToString:@"iPad4,2"]) return @"iPad Air (Cellular)";
if ([platform isEqualToString:@"iPad4,4"]) return @"iPad mini 2G (WiFi)";
if ([platform isEqualToString:@"iPad4,5"]) return @"iPad mini 2G (Cellular)";
if ([platform isEqualToString:@"i386"]) return @"Simulator";
if ([platform isEqualToString:@"x86_64"]) return @"Simulator";
return platform;
}
// Public method to use
- (PlatformType) platform {
NSString *platform = [self platformCode];
if ([platform isEqualToString:@"iPhone1,1"]) return kiPhone1G;
if ([platform isEqualToString:@"iPhone1,2"]) return kiPhone3G;
if ([platform isEqualToString:@"iPhone2,1"]) return kiPhone3GS;
if ([platform isEqualToString:@"iPhone3,1"]) return kiPhone4;
if ([platform isEqualToString:@"iPhone3,2"]) return kiPhone4Verizon;
if ([platform isEqualToString:@"iPhone4,1"]) return kiPhone4S;
if ([platform isEqualToString:@"iPhone5,1"]) return kiPhone5GSM;
if ([platform isEqualToString:@"iPhone5,2"]) return kiPhone5CDMA;
if ([platform isEqualToString:@"iPhone5,3"]) return kiPhone5CGSM;
if ([platform isEqualToString:@"iPhone5,4"]) return kiPhone5CCDMA;
if ([platform isEqualToString:@"iPhone6,1"]) return kiPhone5SGSM;
if ([platform isEqualToString:@"iPhone6,2"]) return kiPhone5SCDMA;
if ([platform isEqualToString:@"iPhone7,1"]) return kiPhone6P;
if ([platform isEqualToString:@"iPhone7,2"]) return kiPhone6;
if ([platform isEqualToString:@"iPhone8,2"]) return kiPhone6SP;
if ([platform isEqualToString:@"iPhone8,1"]) return kiPhone6S;
if ([platform isEqualToString:@"iPod1,1"]) return kiPodTouch1G;
if ([platform isEqualToString:@"iPod2,1"]) return kiPodTouch2G;
if ([platform isEqualToString:@"iPod3,1"]) return kiPodTouch3G;
if ([platform isEqualToString:@"iPod4,1"]) return kiPodTouch4G;
if ([platform isEqualToString:@"iPod5,1"]) return kiPodTouch5G;
if ([platform isEqualToString:@"iPad1,1"]) return kiPad;
if ([platform isEqualToString:@"iPad2,1"]) return kiPad2Wifi;
if ([platform isEqualToString:@"iPad2,2"]) return kiPad2GSM;
if ([platform isEqualToString:@"iPad2,3"]) return kiPad2CMDA;
if ([platform isEqualToString:@"iPad2,4"]) return kiPad2Wifi;
if ([platform isEqualToString:@"iPad2,5"]) return kiPadMiniWifi;
if ([platform isEqualToString:@"iPad2,6"]) return kiPadMiniGSM;
if ([platform isEqualToString:@"iPad2,7"]) return kiPadMiniCDMA;
if ([platform isEqualToString:@"iPad3,1"]) return kiPad3Wifi;
if ([platform isEqualToString:@"iPad3,2"]) return kiPad3CDMA;
if ([platform isEqualToString:@"iPad3,3"]) return kiPad3GSM;
if ([platform isEqualToString:@"iPad3,4"]) return kiPad4Wifi;
if ([platform isEqualToString:@"iPad3,5"]) return kiPad4GSM;
if ([platform isEqualToString:@"iPad3,6"]) return kiPad4CDMA;
if ([platform isEqualToString:@"iPad4,1"]) return kiPadAirWifi;
if ([platform isEqualToString:@"iPad4,2"]) return kiPadAirCellular;
if ([platform isEqualToString:@"iPad4,4"]) return kiPadMini2GWifi;
if ([platform isEqualToString:@"iPad4,5"]) return kiPadMini2GCellular;
if ([platform isEqualToString:@"i386"]) return kSimulator;
if ([platform isEqualToString:@"x86_64"]) return kSimulator;
return kUnknownPlatform;
}
@end
Hope this works for you...
you can easly detect iphone, iphone5 and iPad with below condition (But not iTouch! iTouch is treated as if it were an iPhone with this code!):-
if([[UIDevice currentDevice]userInterfaceIdiom]==UIUserInterfaceIdiomPhone)
{
if ([[UIScreen mainScreen] bounds].size.height == 568)
{
}
else
{
//iphone 3.5 inch screen
}
}
else
{
//[ipad]
}
UPDATE
You can also use MACRO or define Variable for check is that iPhone5,iPhone4 or iPad like Bellow:-
#define isiPhone5 ([[UIScreen mainScreen] bounds].size.height == 568)?TRUE:FALSE
#define isiPhone (UI_USER_INTERFACE_IDIOM() == 0)?TRUE:FALSE
Example:-
if(isiPhone)
{
if (isiPhone5)
{
}
else
{
//iphone 3.5 inch screen
}
}
else
{
//[ipad]
}
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle {
if ([[ UIScreen mainScreen ] bounds ].size.height == 568 ) {
nibName = [NSString stringWithFormat:@"%@_568", nibName];
}
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
nibName = [NSString stringWithFormat:@"%@_iPad", nibName]; {
}
if (self = [super initWithNibName:nibName bundle:nibBundle]) {
}
return self;
}
The first statement checks weather the device you have has the iPhone 5 Screen.
The Second checks weather you're using a iPad.
The third returns the normal xib for the iPhone 4s and prior.
Please note, to make this work you'll have to create 3 different XIB's, all with a different suffix.
ViewController.xib
ViewController_568.xib
ViewController_iPad.xib
Here are a bunch of constants you can stick in your PCH file and use throughout your application which give you a lot of different things you can test for. (Widescreen here means iPhone 5 "taller" screen)
#ifndef IS_WIDESCREEN
#define IS_WIDESCREEN (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double)568) < DBL_EPSILON)
#endif
#ifndef IS_IPHONE
#define IS_IPHONE ([[[UIDevice currentDevice] model] isEqualToString:@"iPhone"])
#endif
#ifndef IS_IPOD
#define IS_IPOD ([[[UIDevice currentDevice] model] isEqualToString:@"iPod touch"])
#endif
#ifndef IS_IPAD
#define IS_IPAD ([[[UIDevice currentDevice] model] isEqualToString:@"iPad"])
#endif
#ifndef IS_IPHONE5
#define IS_IPHONE5 (IS_WIDESCREEN && IS_IPHONE)
#endif
#ifndef IS_IPOD5
#define IS_IPOD5 (IS_WIDESCREEN && IS_IPOD)
#endif
You can use it like this:
if(IS_IPHONE5){
// load iPhone5 code/nibs
}
if(IS_WIDESCREEN){
// load 4" screen stuff here
}
if ([[UIDevice currentDevice].model hasPrefix:@"iPhone"]) {//iPhone... (not iTouch or iPad)
if ([[UIDevice currentDevice].model hasPrefix:@"iPad"]) {//iPad...
if (([[UIDevice currentDevice].model hasPrefix:@"iPhone"]) && ([UIScreen mainScreen]bounds].size.height == 568)) {//iPhone5...
And also, just for reference... iTouch is this:
if ([[UIDevice currentDevice].model hasPrefix:@"iPod"]) {//iTouch