美文网首页
iOS 获取应用信息和设备型号等内容(含iPhone XS Ma

iOS 获取应用信息和设备型号等内容(含iPhone XS Ma

作者: YANGXIXIYear | 来源:发表于2018-05-23 11:35 被阅读0次

前言

开发中,为了更好跟踪用户运行APP时产生的BUG,通常需要获取用户设备信息和当前运行APP的版本信息等。相关信息总结如下:

#pragma mark - 获取APP信息
- (void)getCurrentAppInfo {
    // 获取当前App的基本信息字典
    NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
    
    // app名称
    NSString *appName = [infoDic objectForKey:@"CFBundleDisplayName"];
    NSLog(@"app名称 == %@", appName);
    
    // app版本
    NSString *appVersion = [infoDic objectForKey:@"CFBundleShortVersionString"];
    NSLog(@"app版本 == %@", appVersion);
    
    // app build版本
    NSString *appBuildVersion = [infoDic objectForKey:@"CFBundleVersion"];
    NSLog(@"app build版本 == %@", appBuildVersion);
}
#pragma mark - 获取当前设备信息
- (void)getCurrentDeviceInfo {
    // 获取当前设备
    UIDevice *currentDevice = [UIDevice currentDevice];
    
    // 设备唯一标识符
    NSString *uuidStr = [[currentDevice identifierForVendor] UUIDString];
    NSLog(@"设备唯一标识符 == %@", uuidStr);
    
    // 设备名称
    NSString *deviceName = [currentDevice systemName];
    NSLog(@"设备名称 == %@", deviceName);
    
    // 设备别名
    NSString *customDeviceName = [currentDevice name];
    NSLog(@"设备别名 == %@", customDeviceName);
    
    // 系统版本号
    NSString *systemVersion = [currentDevice systemVersion];
    NSLog(@"手机系统版本号 == %@", systemVersion);
}
#pragma mark - 获取手机型号
+ (NSString *)iphoneType {

    // 需要导入头文件:#import <sys/utsname.h>
    struct utsname systemInfo; 
    
    uname(&systemInfo);
    
    NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding];
    
    if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
    
    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,2"]) return @"iPhone 4";
    
    if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4";
    
    if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
    
    if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
    
    if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
    
    if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c";
    
    if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c";
    
    if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s";
    
    if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s";
    
    if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
    
    if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
    
    if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
    
    if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
    
    if ([platform isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
    
    if ([platform isEqualToString:@"iPhone9,1"])    return @"国行、日版、港行iPhone 7";
    
    if ([platform isEqualToString:@"iPhone9,2"])    return @"港行、国行iPhone 7 Plus";
    
    if ([platform isEqualToString:@"iPhone9,3"])    return @"美版、台版iPhone 7";
    
    if ([platform isEqualToString:@"iPhone9,4"])    return @"美版、台版iPhone 7 Plus";
    
    if ([platform isEqualToString:@"iPhone10,1"])   return @"国行、日行iPhone 8";
    
    if ([platform isEqualToString:@"iPhone10,2"])   return @"国行、日行iPhone 8 Plus";
    
    if ([platform isEqualToString:@"iPhone10,3"])   return @"国行、日行iPhone X";
    
    if ([platform isEqualToString:@"iPhone10,4"])   return @"美版iPhone 8";
    
    if ([platform isEqualToString:@"iPhone10,5"])   return @"美版iPhone 8 Plus";
    
    if ([platform isEqualToString:@"iPhone10,6"])   return @"美版iPhone X";

   if ([platform isEqualToString:@"iPhone11,2"])   return @"iPhone XS";

   if ([platform isEqualToString:@"iPhone11,4"])   return @"iPhone XS Max";

   if ([platform isEqualToString:@"iPhone11,6"])   return @"iPhone XS Max";

   if ([platform isEqualToString:@"iPhone11,8"])   return @"iPhone XR";

    
    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 1G";
    
    if ([platform isEqualToString:@"iPad2,1"])   return @"iPad 2";
    
    if ([platform isEqualToString:@"iPad2,2"])   return @"iPad 2";
    
    if ([platform isEqualToString:@"iPad2,3"])   return @"iPad 2";
    
    if ([platform isEqualToString:@"iPad2,4"])   return @"iPad 2";
    
    if ([platform isEqualToString:@"iPad2,5"])   return @"iPad Mini 1G";
    
    if ([platform isEqualToString:@"iPad2,6"])   return @"iPad Mini 1G";
    
    if ([platform isEqualToString:@"iPad2,7"])   return @"iPad Mini 1G";
    
    if ([platform isEqualToString:@"iPad3,1"])   return @"iPad 3";
    
    if ([platform isEqualToString:@"iPad3,2"])   return @"iPad 3";
    
    if ([platform isEqualToString:@"iPad3,3"])   return @"iPad 3";
    
    if ([platform isEqualToString:@"iPad3,4"])   return @"iPad 4";
    
    if ([platform isEqualToString:@"iPad3,5"])   return @"iPad 4";
    
    if ([platform isEqualToString:@"iPad3,6"])   return @"iPad 4";
    
    if ([platform isEqualToString:@"iPad4,1"])   return @"iPad Air";
    
    if ([platform isEqualToString:@"iPad4,2"])   return @"iPad Air";
    
    if ([platform isEqualToString:@"iPad4,3"])   return @"iPad Air";

   if ([platform isEqualToString:@"iPad5,3"])   return @"iPad Air 2";

   if ([platform isEqualToString:@"iPad5,4"])   return @"iPad Air 2";

    if ([platform isEqualToString:@"iPad4,4"])   return @"iPad Mini 2G";
    
    if ([platform isEqualToString:@"iPad4,5"])   return @"iPad Mini 2G";
    
    if ([platform isEqualToString:@"iPad4,6"])   return @"iPad Mini 2G";

   if ([platform isEqualToString:@"iPad4,7"])   return @"iPad Mini 3";

   if ([platform isEqualToString:@"iPad4,8"])   return @"iPad Mini 3";

   if ([platform isEqualToString:@"iPad4,9"])   return @"iPad Mini 3";

   if ([platform isEqualToString:@"iPad5,1"])   return @"iPad Mini 4";
 
   if ([platform isEqualToString:@"iPad5,2"])   return @"iPad Mini 4";

  if ([platform isEqualToString:@"iPad6,3"])   return @"iPad Pro 9.7";

  if ([platform isEqualToString:@"iPad6,4"])   return @"iPad Pro 9.7";

   if ([platform isEqualToString:@"iPad6,7"])   return @"iPad Pro 12.9";

  if ([platform isEqualToString:@"iPad6,8"])   return @"iPad Pro 12.9";
    
    if ([platform isEqualToString:@"i386"])      return @"iPhone Simulator";
    
    if ([platform isEqualToString:@"x86_64"])    return @"iPhone Simulator";
    
    return platform;
    
}

swift写法(给UIDevice添加一个扩展):

extension UIDevice {
    
    var iphoneTypeName: String {
        
        var systemInfo = utsname()
        
        uname(&systemInfo)
        
        let machineMirror = Mirror(reflecting: systemInfo.machine)
        let platform = machineMirror.children.reduce("") { identifier, element in
            guard let value = element.value as? Int8, value != 0 else { return identifier }
            return identifier + String(UnicodeScalar(UInt8(value)))
        }
        
        switch platform {
            
        case "iPhone3,1", "iPhone3,2", "iPhone3,3":  return "iPhone 4"
        case "iPhone4,1":                                return "iPhone 4s"
        case "iPhone5,1", "iPhone5,2":                 return "iPhone 5"
        case "iPhone5,3", "iPhone5,4":                 return "iPhone 5c"
        case "iPhone6,1", "iPhone6,2":                 return "iPhone 5s"
        case "iPhone7,2":                                return "iPhone 6"
        case "iPhone7,1":                                return "iPhone 6 Plus"
        case "iPhone8,1":                                return "iPhone 6s"
        case "iPhone8,2":                                return "iPhone 6s Plus"
        case "iPhone8,4":                                return "iPhone SE"
        case "iPhone9,1":                                return "iPhone 7 (CDMA)"
        case "iPhone9,2":                                return "iPhone 7 Plus (CDMA)"
        case "iPhone9,3":                                return "iPhone 7 (GSM)"
        case "iPhone9,4":                                return "iPhone 7 Plus (GSM)"
        case "iPhone10,1", "iPhone10,4":               return "iPhone 8"
        case "iPhone10,2", "iPhone10,5":               return "iPhone 8 Plus"
        case "iPhone10,3", "iPhone10,6":               return "iPhone X"
        case "iPhone11,2":                               return "iPhone XS "
        case "iPhone11,4", "iPhone11,6":               return "iPhone XS Max"
        case "iPhone11,8":                               return "iPhone XR"
            
        case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2"
        case "iPad3,1", "iPad3,2", "iPad3,3":           return "iPad 3"
        case "iPad3,4", "iPad3,5", "iPad3,6":           return "iPad 4"
        case "iPad4,1", "iPad4,2", "iPad4,3":           return "iPad Air"
        case "iPad5,3", "iPad5,4":                      return "iPad Air 2"
        case "iPad2,5", "iPad2,6", "iPad2,7":           return "iPad Mini"
        case "iPad4,4", "iPad4,5", "iPad4,6":           return "iPad Mini 2"
        case "iPad4,7", "iPad4,8", "iPad4,9":           return "iPad Mini 3"
        case "iPad5,1", "iPad5,2":                      return "iPad Mini 4"
        case "iPad6,3", "iPad6,4":                      return "iPad Pro 9.7"
        case "iPad6,7", "iPad6,8":                      return "iPad Pro 12.9"
            
        case "AppleTV5,3":                              return "Apple TV 4"
            
        case "iPod5,1":                                  return "iPod Touch 5"
        case "iPod7,1":                                  return "iPod Touch 6"
            
        case "i386", "x86_64":                          return "Simulator"
            
        default:                                        return platform
        }
    }
}

在最近一个项目中,有一个需求是在网络请求时,将APP版本号和设备型号添加到请求头中,我的操作如下,但服务器有些时候并不能获取到完整的手机型号,后来发现是因为iphoneType中有返回中文,添加到头中,中文及其后面的内容无法显示。

[manager.requestSerializer setValue:[NSString stringWithFormat:@"%@-%@", [self iphoneType], [[UIDevice currentDevice] systemVersion]] forHTTPHeaderField:@"DeviceInfo"];

相关文章

网友评论

      本文标题:iOS 获取应用信息和设备型号等内容(含iPhone XS Ma

      本文链接:https://www.haomeiwen.com/subject/yztrjftx.html