ok i'm here it is in a category, sorry to put as answer but it allows me better formatting...
first file - UIDevice+JEFkit.h
#import <UIKit/UIKit.h>
@interface UIDevice (JEFkit)
#pragma mark device type..
+(NSString *)deviceType;
+(BOOL)iPad;
+(BOOL)iPadMini;
+(BOOL)fourInchScreen;
+(BOOL)retinaDisplay;
+(Float32) pixelsPer10mm;
#pragma mark orientation..
+(UIInterfaceOrientation)orient;
+(BOOL)landscape;
#pragma mark specific feature checkers..
+(NSString *)deviceName;
+(BOOL)camera;
+(NSString *)systemVersion;
+(BOOL)doesSystemVersionMeetRequirement:(NSString *)minRequirement;// eg NSString *reqSysVer = @"4.0"
+(BOOL)iOs7;
@end
and the main, several of these are just wrappers for stuff i struggle to remember, e.g. the deviceIdiom stuff, anyway its just a little 'helpers' class extension.. UIDevice+JEFkit.m
#import "UIDevice+JEFkit.h"
#include <sys/types.h>
#include <sys/sysctl.h>
@implementation UIDevice (JEFkit)
#pragma mark device type..
+(NSString *)deviceType{
NSString *result = [[UIDevice currentDevice] model];
return result;
}
+(BOOL)iPad{
BOOL result = NO;
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 30200)
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
result = YES;
} else {
result = NO;
}
#endif
return result;
}
+(BOOL)iPadMini{
if (![UIDevice iPad]) {
return NO;
}
size_t size1;
sysctlbyname("hw.machine", NULL, &size1, NULL, 0);
char *machine1 = malloc(size1 + 1);
sysctlbyname("hw.machine", machine1, &size1, NULL, 0);
machine1[size1] = 0;
if (strcmp(machine1, "iPad1,1") == 0 || strcmp(machine1, "iPad2,1") == 0 || strcmp(machine1, "iPad2,2") == 0 || strcmp(machine1, "iPad2,3") == 0 || strcmp(machine1, "iPad2,4") == 0 ) {
/* iPad 1 or 2 */
// JLog(@"iPad 1 or 2");
free(machine1);
return NO;
}
if ([[UIScreen mainScreen]respondsToSelector:@selector(scale)]) {
if ([[UIScreen mainScreen] scale] < 2.0) {
free(machine1);
return YES; //all other non retina devices are eliminated
}
}else{
///does not respond to @selector(scale)
/// should not ever happen
free(machine1);
return NO;
}
//ok only retina ipads are left...
if (strcmp(machine1, "iPad4,4") == 0 || strcmp(machine1, "iPad4,5") == 0 ) {
/* 2nd gen minis w retina*/
free(machine1);
return YES;
}
free(machine1);
return NO;
}
+(BOOL)fourInchScreen{
if (![UIDevice iPad] && ([UIScreen mainScreen].bounds.size.height == 568 || [UIScreen mainScreen].bounds.size.width == 568)) return YES;
else return NO;
}
+(BOOL)retinaDisplay{
BOOL result = NO;
if ([[UIScreen mainScreen]respondsToSelector:@selector(scale)]){
if ([[UIScreen mainScreen] scale] == 2.0) result = YES;
}
return result;
}
+(Float32) pixelsPer10mm{
CGFloat dpi;
if ([UIDevice iPadMini]) {
dpi = (Float32)163.0;
} else if ([UIDevice iPad]) {
dpi = (Float32)132.0;
}else {dpi = (Float32)163.0;}
// JLog(@"pixels /10 mm %.3f", dpi/2.54);
return (Float32)(dpi / (Float32)2.54);
//return 64.173;
}
#pragma mark orientation..
+(UIInterfaceOrientation)orient{
return [[UIApplication sharedApplication] statusBarOrientation];
}
+(BOOL)landscape{
if (UIInterfaceOrientationIsLandscape([UIDevice orient])) {
return YES;
}
return NO;
}
#pragma mark specific feature checkers..
+(NSString *)deviceName{
return [[UIDevice currentDevice] name];
}
+(BOOL)camera{
BOOL result = [UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeCamera];
return result;
}
+(NSString *)systemVersion{
NSString *result = [[UIDevice currentDevice] systemVersion];
return result;
}
+(BOOL)doesSystemVersionMeetRequirement:(NSString *)minRequirement{
// eg NSString *reqSysVer = @"4.0";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:minRequirement options:NSNumericSearch] != NSOrderedAscending)
{
return YES;
}else{
return NO;
}
}
+(BOOL)iOs7{
return (NSClassFromString(@"NSLayoutManager") != nil);
}
@end
so to use this category i just add it to project (actually its part of my 'jefkit' static library, but if i was to add just this, id go into my .pch file and add
#import "UIDevice+JEFkit.h"