1、app版本号
NSString * localVersionShort = [[NSBundlemainBundle]infoDictionary objectForKey:@"CFBundleShortVersionString"];
2、app名称
NSString *app_Name = [[NSBundlemainBundle]infoDictionary objectForKey:@"CFBundleDisplayName"];
3、app build版本
NSString *app_Name = [[NSBundlemainBundle]infoDictionary objectForKey:@"CFBundleVersion"];
4、设备信息
唯一标示符 NSLog(@"uniqueIdentifier: %@", [[UIDevicecurrentDevice]identifierForVendor]);
设备名称 NSLog(@"name: %@", [[UIDevicecurrentDevice]name]);
系统名字 NSLog(@"systemName: %@", [[UIDevicecurrentDevice]systemName]);
系统版本号 NSLog(@"systemVersion: %@", [[UIDevicecurrentDevice]systemVersion]);
类型,模拟器,真机 NSLog(@"model: %@", [[UIDevicecurrentDevice]model]);
本地模式 NSLog(@"localizedModel: %@", [[UIDevicecurrentDevice]localizedModel]);
获取设备方向
@property(nonatomic,readonly) UIDeviceOrientation orientation;
是否开启监测电池状态 开启后 才可以正常获取电池状态
@property(nonatomic,getter=isBatteryMonitoringEnabled)
BOOL batteryMonitoringEnabled NS_AVAILABLE_IOS(3_0); // default is NO
获取电池状态
@property(nonatomic,readonly) UIDeviceBatteryState batteryState NS_AVAILABLE_IOS(3_0);
获取电量
@property(nonatomic,readonly) float batteryLevel NS_AVAILABLE_IOS(3_0);
设备方向的枚举如下:
typedef NS_ENUM(NSInteger, UIDeviceOrientation)
{
UIDeviceOrientationUnknown, UIDeviceOrientationPortrait, // home键在下
UIDeviceOrientationPortraitUpsideDown, // home键在上
UIDeviceOrientationLandscapeLeft, // home键在右
UIDeviceOrientationLandscapeRight, // home键在左
UIDeviceOrientationFaceUp, // 屏幕朝上
UIDeviceOrientationFaceDown // 屏幕朝下
};
电池状态的枚举如下:
typedef NS_ENUM(NSInteger, UIDeviceBatteryState) {
UIDeviceBatteryStateUnknown,
UIDeviceBatteryStateUnplugged, // 放电状态
UIDeviceBatteryStateCharging, // 充电未充满状态
UIDeviceBatteryStateFull, // 充电已充满
};
下面的方法关于监测屏幕状态:
//获取是否开启屏幕状态更改通知
@property(nonatomic,readonly,getter=isGeneratingDeviceOrientationNotifications) BOOL generatesDeviceOrientationNotifications;
//开始监测通知
- (void)beginGeneratingDeviceOrientationNotifications;
//结束监测通知
- (void)endGeneratingDeviceOrientationNotifications;
相关通知:
//设备方向改变时发送的通知
UIKIT_EXTERN NSString *const UIDeviceOrientationDidChangeNotification;
//电池状态改变时发送的通知
UIKIT_EXTERN NSString *const UIDeviceBatteryStateDidChangeNotification NS_AVAILABLE_IOS(3_0);
//电量改变时发送的通知
UIKIT_EXTERN NSString *const UIDeviceBatteryLevelDidChangeNotification NS_AVAILABLE_IOS(3_0);
//距离传感器状态改变时发送的通知
UIKIT_EXTERN NSString *const UIDeviceProximityStateDidChangeNotification NS_AVAI
5、获得当前设备的型号
#include <sys/types.h>
#include <sys/sysctl.h>
#define CTL_HW 6
#define HW_MACHINE 1
#pragma mark 获得当前设备的型号
/**
* @author zm
*
* @brief 获得当前设备的型号(型号跟踪到iPhone6S/iPad4/iPod5G)
*
* @return 设备型号字符串
*/
- (NSString *)f_getCurrentDeviceModel
{
int _mib[2];
size_t len;
char *machine;
_mib[0] =CTL_HW;
_mib[1] =HW_MACHINE;
sysctl(_mib,2,NULL, &len,NULL,0);
machine = malloc(len);
sysctl(_mib,2, machine, &len,NULL,0);
NSString *platform = [NSStringstringWithCString:machineencoding:NSASCIIStringEncoding];
free(machine);
if ([platformisEqualToString:@"iPhone1,1"]) return@"iPhone 1G";
if ([platformisEqualToString:@"iPhone1,2"]) return@"iPhone 3G";
if ([platformisEqualToString:@"iPhone2,1"]) return@"iPhone 3GS";
if ([platformisEqualToString:@"iPhone3,1"]) return@"iPhone 4";
if ([platformisEqualToString:@"iPhone3,3"]) return@"Verizon iPhone 4";
if ([platformisEqualToString:@"iPhone4,1"]) return@"iPhone 4S";
if ([platformisEqualToString:@"iPhone5,1"]) return@"iPhone 5 (GSM)";
if ([platformisEqualToString:@"iPhone5,2"]) return@"iPhone 5 (GSM+CDMA)";
if ([platformisEqualToString:@"iPhone5,3"]) return@"iPhone 5c (GSM)";
if ([platformisEqualToString:@"iPhone5,4"]) return@"iPhone 5c (GSM+CDMA)";
if ([platformisEqualToString:@"iPhone6,1"]) return@"iPhone 5s (GSM)";
if ([platformisEqualToString:@"iPhone6,2"]) return@"iPhone 5s (GSM+CDMA)";
if ([platformisEqualToString:@"iPhone7,1"]) return@"iPhone 6 Plus";
if ([platformisEqualToString:@"iPhone7,2"]) return@"iPhone 6";
if ([platformisEqualToString:@"iPhone8,1"]) return@"iPhone 6s Plus";
if ([platformisEqualToString:@"iPhone8,2"]) return@"iPhone 6s";
if ([platformisEqualToString:@"iPod1,1"]) return@"iPod Touch 1G";
if ([platformisEqualToString:@"iPod2,1"]) return@"iPod Touch 2G";
if ([platformisEqualToString:@"iPod3,1"]) return@"iPod Touch 3G";
if ([platformisEqualToString:@"iPod4,1"]) return@"iPod Touch 4G";
if ([platformisEqualToString:@"iPod5,1"]) return@"iPod Touch 5G";
if ([platformisEqualToString:@"iPad1,1"]) return@"iPad";
if ([platformisEqualToString:@"iPad2,1"]) return@"iPad 2 (WiFi)";
if ([platformisEqualToString:@"iPad2,2"]) return@"iPad 2 (GSM)";
if ([platformisEqualToString:@"iPad2,3"]) return@"iPad 2 (CDMA)";
if ([platformisEqualToString:@"iPad2,4"]) return@"iPad 2 (WiFi)";
if ([platformisEqualToString:@"iPad2,5"]) return@"iPad Mini (WiFi)";
if ([platformisEqualToString:@"iPad2,6"]) return@"iPad Mini (GSM)";
if ([platformisEqualToString:@"iPad2,7"]) return@"iPad Mini (GSM+CDMA)";
if ([platformisEqualToString:@"iPad3,1"]) return@"iPad 3 (WiFi)";
if ([platformisEqualToString:@"iPad3,2"]) return@"iPad 3 (GSM+CDMA)";
if ([platformisEqualToString:@"iPad3,3"]) return@"iPad 3 (GSM)";
if ([platformisEqualToString:@"iPad3,4"]) return@"iPad 4 (WiFi)";
if ([platformisEqualToString:@"iPad3,5"]) return@"iPad 4 (GSM)";
if ([platformisEqualToString:@"iPad3,6"]) return@"iPad 4 (GSM+CDMA)";
if ([platformisEqualToString:@"iPad4,1"]) return@"iPad Air (WiFi)";
if ([platformisEqualToString:@"iPad4,2"]) return@"iPad Air (Cellular)";
if ([platformisEqualToString:@"iPad4,4"]) return@"iPad mini 2G (WiFi)";
if ([platformisEqualToString:@"iPad4,5"]) return@"iPad mini 2G (Cellular)";
if ([platformisEqualToString:@"i386"]) return@"Simulator";
if ([platformisEqualToString:@"x86_64"]) return@"Simulator";
return platform;
}
顺便附带 UIDevice、UIApplication、UIScreen讲解
UIDevice
通过UIDevice可以获取一个描述当前设备的单例。你可以获取以下设备相关的信息:设备名,设备型号,操作系统名称和版本。
我们还可以通过UIDevice实例检测设备的变化,比方横屏还是竖屏。Orientation属性代表了设备的方位,也可以通过注册UIDeviceOrientationDidChangeNotification通知消息来实时获取方位变化。在要使用这些数据前,必须先通过beginGeneratingDeviceOrientationNotifications方法调用开启该功能,然后调用endGeneratingDeviceOrientationNotifications禁用该功能。
此外,我们还能通过该实例获取关于电量状态变化的信息和通知信息(batteryState,batteryLevel)。还有就是关于接近传感数据(proximityState),接近传感器用于侦测用户是否拿着手机并紧贴在脸庞。同样的,只有在必要的时候才开启以上两项功能。
从iOS4.2开始,我们可以使用playInputClick实例方法响应用户自定义的键盘操作。
UIApplication
UIApplication是一个控制和协调运行中应用的中心。任何一个应用有且仅有一个UIApplication(或是一个UIApplication的一个子类)。一旦应用启动,UIApplicationMain就会被调用。在应用的某个任务中,这个函数会创建一个UIApplication单例。因此,你可以使用sharedApplication来获取该对象。
UIApplication的一个重要作用,就是它是所有用户操作事件传递链的开始。它也将由UIControl类传递给它的动作信息,进一步分发合适的目标类。此外,UIApplication对象维护了所有在当前APP中打开的windows的列表。应用对象一般都会有一个代理,用于处理应用运行时信息,如:应用开启,内存不足,应用关闭。因此应用有机会处理这些重要的信息。
APP之前可以通过openURL方法进行协作,如处理资源类似email和图像文件。比方,一个应用打开了调用了email URL,使用这个方法可以打开邮件客户端并显示信息。
UIApplication接口允许你管理设备相关的行为,具体如下:
在设备方位变化时,控制应用的反应;
临时阻断触摸事件。
开启和关闭接近传感器。
注册远程通知消息。
触发撤销或重做UI (applicationSupportsShakeToEdit)
检测一个安装好的应用是否可以打开一个URL(canOpenURL:).
在应用退到后台前,让它在后台还能再运行一下,完成一些收尾工作。
调度或中止本地通知。
协同处理接收到的远程控制事件。
重新恢复应用的状态。
绝大多数的应用不需要创建UIApplication子类,只需要使用UIApplication的代理函数管理系统和应用之间的交互。
如果你需要实现自定义一个事件或动作分发系统时,你才需要创建UIApplication子类。这样的话,你需要重写sendEvent或sendAction方法来自定义分发机制。我们尽量避免这种情况。
UIScreen
UIScreen对象定义了与硬件显示屏相关的属性。iOS设备有个主屏,外加0个或多个附屏。这个类可以获取所有与设备相关的屏幕。Screen类定义了bounds,以及其他属性如对比度。
在iOS8之前,screen的bounds属性一定反映了屏幕在竖屏情况的尺寸。旋转屏幕成为横屏或倒立情况都不会改变bounds属性。从iOS8开始,bounds属性参考设备方位的变化。依赖屏幕尺寸的应用可以使用fixedCoordinateSpace属性来修正点在坐标中的位置。
当用户连接或断开屏幕时,系统会发送通知给应用。利用代理可以长时间的监控通知信息。连接和断开的通知可能随时发生,也许这时你的应用在后台被挂起。在应用挂起时,通知会保存在队列中,直到你的app’在前台或后台又开始运行时。
但系统通知外部屏连接上时,你可以随意使用这个额外的屏幕空间。为使用这个空间,需要创建uiwindow对象,为新的screen进行赋值,显示到window上。屏幕支持多种分辨率,其中使用不同的像素宽高比。屏幕对象使用最普通的屏幕模式,你也可以设置适合你的模式。比方,如果你在游戏应用中使用OpenGL。
还可参考博主转载的文章ios开发-获取手机相关信息