一、设备判断
真机与模拟器判断:
#if defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR
NSLog(@" on simulator");
#else
NSLog(@"not on simulator");
#endif
注意:TARGET_OS_IPHONE在真机和模拟器上都是1
设备类型判断方法有两种:
1. UI_USER_INTERFACE_IDIOM() 进行区分(ios 3.2以上),但是无法区分iphone和ipod
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
//设备为ipad
} else {
//设备为iphone 或 ipod
}
或者
if([ [ UIDevice currentDevice ] userInterfaceIdiom ] == UIUserInterfaceIdiomPhone ){
//IPhone设备
}else{
//ipad设备
}
2. 使用 UIDevice.model 进行区分 (ios 2.0 >=)
NSString *deviceType = [UIDevice currentDevice].model;
if([deviceType isEqualToString:@"iPhone"]) {
//iPhone
}else if([deviceType isEqualToString:@"iPod touch"]) {
//iPod Touch
}else {
//iPad
}
或者
if ([[UIDevice currentDevice].model rangeOfString:@"iPad"].location != NSNotFound) {
NSLog(@"Thisis an iPad!");
}
不过网上有人说在使用第一种方法时发现,在Xcode4中,在项目的Summary页里必须将设备类型改为Universal才能生效。要不然就会一直返回为iPhone。所以,如果你的应用不需要设置成Universal,还是用第二种方法吧。
二、设备版本判断
1.
/*
* System Versioning Preprocessor Macros
*/
#define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
/*
* Usage
*/
if (SYSTEM_VERSION_LESS_THAN(@"4.0")) {
}
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"3.1.1")) {
}
2.
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0) {
// iOS 5 code
for(UITabBarItem *tabBarItem in self.tabBar.items)
{
[tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont systemFontOfSize:14.0], UITextAttributeFont, nil]
forState:UIControlStateNormal];
}
}
else {
// iOS 4.x code
;
}
3.
#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_6_0 // 当前支持的sdk版本是否低于6.0
//ios 6.0以下的处理
#else
//ios 6.0以上的处理
#endif
三、判断设备是否是iphone5,retina屏
- #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)
- #define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
四、常用宏定义(.h)
- #ifndef MacroDefinition_h
- #define MacroDefinition_h
- //-------------------获取设备大小-------------------------
- //NavBar高度
- #define NavigationBar_HEIGHT 44
- //获取屏幕 宽度、高度
- #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
- #define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
- //-------------------打印日志-------------------------
- //DEBUG 模式下打印日志,当前行
- #ifdef DEBUG
- # define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
- #else
- # define DLog(...)
- #endif
- //----------------------系统----------------------------
- //获取系统版本
- #define IOS_VERSION [[[UIDevice currentDevice] systemVersion] floatValue]
- #define CurrentSystemVersion [[UIDevice currentDevice] systemVersion]
- //获取当前语言
- #define CurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])
- //判断是否 Retina屏、设备是否%fhone 5、是否是iPad
- #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)
- #define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
- #define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
- //判断是真机还是模拟器
- #if TARGET_OS_IPHONE
- //iPhone Device
- #endif
- #if TARGET_IPHONE_SIMULATOR
- //iPhone Simulator
- #endif
- //检查系统版本
- #define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
- #define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
- #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
- #define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
- #define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
- //----------------------系统----------------------------
- //使用ARC和不使用ARC
- #if __has_feature(objc_arc)
- //compiling with ARC
- #else
- //compiling without ARC
- #endif
- //释放对象
- #pragma mark - common functions
- #define RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }
- //G-C-D
- #define BACK(block) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block)
- #define MAIN(block) dispatch_async(dispatch_get_main_queue(),block)
- //由角度获取弧度 有弧度获取角度
- #define degreesToRadian(x) (M_PI * (x) / 180.0)
- #define radianToDegrees(radian) (radian*180.0)/(M_PI)
- //单例化一个类
- #define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \
- \
- static classname *shared##classname = nil; \
- \
- + (classname *)shared##classname \
- { \
- @synchronized(self) \
- { \
- if (shared##classname == nil) \
- { \
- shared##classname = [[self alloc] init]; \
- } \
- } \
- \
- return shared##classname; \
- } \
- \
- + (id)allocWithZone:(NSZone *)zone \
- { \
- @synchronized(self) \
- { \
- if (shared##classname == nil) \
- { \
- shared##classname = [super allocWithZone:zone]; \
- return shared##classname; \
- } \
- } \
- \
- return nil; \
- } \
- \
- 100. - (id)copyWithZone:(NSZone *)zone \
- 101. { \
- 102. return self; \
- 103. }
- 104.
- 107. #endif
-
五、设备信息
获取设备相关信息
//软件信息
NSLog(@"sysname=%@",[[UIDevice currentDevice] systemName]);// 系统名
NSLog(@"systemVersion=%@",[[UIDevice currentDevice] systemVersion]); //版本号
NSLog(@"model=%@",[[UIDevice currentDevice] model]); //类型(ipad、ipod、iphone)而[[UIDevice currentDevice] userInterfaceIdiom]只能判断iphone和ipad
NSLog(@"olduuid=%@",[[UIDevice currentDevice] uniqueIdentifier]); //唯一识别码 ios5.0开始deprecated
NSLog(@"name=%@",[[UIDevice currentDevice] name]); //设备名称
NSLog(@"localizedModel=%@",[[UIDevice currentDevice] localizedModel]); // 本地模式
NSLog(@"ios6UUID=%@",[[[UIDevice currentDevice] identifierForVendor] UUIDString]);//ios6.0开始available
----------注:以下内容未测试
// 硬件信息
[UIDevice platform];//平台
[UIDevice cpuFrequency]];//cpu信息
UIDevice busFrequency]];//总线
[UIDevice totalMemory]];//总内存
UIDevice userMemory]];//已经使用的内存
//App信息
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
CFShow(infoDictionary);//所有plist内容
// app名称
NSString *app_Name = [infoDictionary objectForKey:@"CFBundleDisplayName"];
// app版本
NSString *app_Version = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
// app build版本
NSString *app_build = [infoDictionary objectForKey:@"CFBundleVersion"];
判断是否有照相机
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
NSLog(@"有");
else
NSLog(@"没有");
六、判断设备
#import "sys/utsname.h"
struct utsname systemInfo;
uname(&systemInfo);
NSString *deviceString = [NSStringstringWithCString:systemInfo.machineencoding:NSUTF8StringEncoding];
if ([deviceString isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
if ([deviceString isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
if ([deviceString isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
if ([deviceString isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
if ([deviceString isEqualToString:@"iPhone3,3"]) return@"Verizon iPhone 4";
if ([deviceString isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
if ([deviceString isEqualToString:@"iPhone5,1"]) return@"iPhone 5 (GSM)";
if ([deviceString isEqualToString:@"iPhone5,2"]) return@"iPhone 5 (GSM+CDMA)";
if ([deviceString isEqualToString:@"iPhone5,3"]) return@"iPhone 5c (GSM)";
if ([deviceString isEqualToString:@"iPhone5,4"]) return@"iPhone 5c (GSM+CDMA)";
if ([deviceString isEqualToString:@"iPhone6,1"]) return@"iPhone 5s (GSM)";
if ([deviceString isEqualToString:@"iPhone6,2"]) return@"iPhone 5s (GSM+CDMA)";
if ([deviceStringisEqualToString:@"iPod1,1"]) return@"iPod Touch 1G";
if ([deviceStringisEqualToString:@"iPod2,1"]) return@"iPod Touch 2G";
if ([deviceStringisEqualToString:@"iPod3,1"]) return@"iPod Touch 3G";
if ([deviceString isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
if ([deviceString isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G";
if ([deviceString isEqualToString:@"iPad1,1"]) return @"iPad";
if ([deviceString isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)";
if ([deviceString isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
if ([deviceString isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
if ([deviceString isEqualToString:@"iPad2,4"]) return @"iPad 2 (WiFi)";
if ([deviceString isEqualToString:@"iPad2,5"]) return @"iPad Mini (WiFi)";
if ([deviceString isEqualToString:@"iPad2,6"]) return @"iPad Mini (GSM)";
if ([deviceString isEqualToString:@"iPad2,7"]) return@"iPad Mini (GSM+CDMA)";
if ([deviceString isEqualToString:@"iPad3,1"]) return @"iPad 3 (WiFi)";
if ([deviceString isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM+CDMA)";
if ([deviceString isEqualToString:@"iPad3,3"]) return @"iPad 3 (GSM)";
if ([deviceString isEqualToString:@"iPad3,4"]) return @"iPad 4 (WiFi)";
if ([deviceString isEqualToString:@"iPad3,5"]) return @"iPad 4 (GSM)";
if ([deviceString isEqualToString:@"iPad3,6"]) return @"iPad 4 (GSM+CDMA)";
if ([deviceString isEqualToString:@"iPad4,1"]) return @"iPad Air (WiFi)";
if ([deviceString isEqualToString:@"iPad4,2"]) return@"iPad Air (Cellular)";
if ([deviceString isEqualToString:@"i386"]) return @"Simulator";
if ([deviceString isEqualToString:@"x86_64"]) return @"Simulator";
判断设备(.h)
- #import <Foundation/Foundation.h>
- #import <sys/utsname.h>
- @interface DeviceInfo : NSObject
- +(NSString*)deviceString;
- +(BOOL)isRetina;
- @end
- //.m
- #import "DeviceInfo.h"
- @implementation DeviceInfo
- +(NSString*)deviceString
- {
- struct utsname systemInfo;
- uname(&systemInfo);
- NSString *deviceString = [NSStringstringWithCString:systemInfo.machineencoding:NSUTF8StringEncoding];
- if ([deviceString isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
- if ([deviceString isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
- if ([deviceString isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
- if ([deviceString isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
- if ([deviceString isEqualToString:@"iPhone3,2"]) return@"Verizon iPhone 4";
- if ([deviceString isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
- if ([deviceString isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
- if ([deviceString isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
- if ([deviceString isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
- if ([deviceString isEqualToString:@"iPad1,1"]) return @"iPad";
- if ([deviceString isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)";
- if ([deviceString isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
- if ([deviceString isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
- if ([deviceString isEqualToString:@"i386"]) return @"Simulator";
- if ([deviceString isEqualToString:@"x86_64"]) return @"Simulator";
- return deviceString;
- }
- +(BOOL)isRetina
- {
- struct utsname systemInfo;
- uname(&systemInfo);
- NSString *deviceString = [NSStringstringWithCString:systemInfo.machineencoding:NSUTF8StringEncoding];
- if ([deviceString isEqualToString:@"iPhone1,1"]) return NO;
- if ([deviceString isEqualToString:@"iPhone1,2"]) return NO;
- if ([deviceString isEqualToString:@"iPhone2,1"]) return NO;
- if ([deviceString isEqualToString:@"iPhone3,1"]) return YES;
- if ([deviceString isEqualToString:@"iPhone3,2"]) return YES;
- if ([deviceString isEqualToString:@"iPod1,1"]) return NO;
- if ([deviceString isEqualToString:@"iPod2,1"]) return NO;
- if ([deviceString isEqualToString:@"iPod3,1"]) return NO;
- if ([deviceString isEqualToString:@"iPod4,1"]) return YES;
- if ([deviceString isEqualToString:@"iPad1,1"]) return YES;
- if ([deviceString isEqualToString:@"iPad2,1"]) return YES;
- if ([deviceString isEqualToString:@"iPad2,2"]) return YES;
- if ([deviceString isEqualToString:@"iPad2,3"]) return YES;
- if ([deviceString isEqualToString:@"i386"]) return NO;
- if ([deviceString isEqualToString:@"x86_64"]) return NO;
- returnNO;
- // return deviceString;
- }
- @end
- + (NSString*)deviceString
- {
- // 需要#import "sys/utsname.h"
- struct utsname systemInfo;
- uname(&systemInfo);
- NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
- if ([deviceString isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
- if ([deviceString isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
- if ([deviceString isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
- if ([deviceString isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
- if ([deviceString isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
- if ([deviceString isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
- if ([deviceString isEqualToString:@"iPhone3,2"]) return @"Verizon iPhone 4";
- if ([deviceString isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
- if ([deviceString isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
- if ([deviceString isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
- if ([deviceString isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
- if ([deviceString isEqualToString:@"iPad1,1"]) return @"iPad";
- if ([deviceString isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)";
- if ([deviceString isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
- if ([deviceString isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
- if ([deviceString isEqualToString:@"i386"]) return @"Simulator";
- if ([deviceString isEqualToString:@"x86_64"]) return @"Simulator";
- NSLog(@"NOTE: Unknown device type: %@", deviceString);
- return deviceString;
- }