有时我们在  App  中提交一些统计信息或者用户反馈信息时,为了能更好地进行分析,通常会附带上当前应用程序的名称、版本号、设备型号、以及设备系统版本。下面演示如何获取这些信息。

1,效果图

程序启动后自动获取相关的应用信息以及设备信息,并打印到控制台中。

2,样例代码

默认情况下我从 UIDevice 中获取设备型号时只能得到 iPhoneiPod Touch 这样笼统的类型数据。
这里对 UIDevice 做个扩展,使其可以得到具体的设备型号,比如:iPhone 6s Plus 这样准确的设备款式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import UIKit
class ViewControllerUIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
         
        //应用程序信息
        let infoDictionary = Bundle.main.infoDictionary!
        let appDisplayName = infoDictionary["CFBundleDisplayName"//程序名称
        let majorVersion = infoDictionary["CFBundleShortVersionString"]//主程序版本号
        let minorVersion = infoDictionary["CFBundleVersion"]//版本号(内部标示)
        let appVersion = majorVersion asString
         
        //设备信息
        let iosVersion = UIDevice.current.systemVersion //iOS版本
        let identifierNumber = UIDevice.current.identifierForVendor //设备udid
        let systemName = UIDevice.current.systemName //设备名称
        let model = UIDevice.current.model //设备型号
        let modelName = UIDevice.current.modelName //设备具体型号
        let localizedModel = UIDevice.current.localizedModel //设备区域化型号如A1533
         
        //打印信息
        print("程序名称:\(appDisplayName)")
        print("主程序版本号:\(appVersion)")
        print("内部版本号:\(minorVersion)")
        print("iOS版本:\(iosVersion)")
        print("设备udid:\(identifierNumber)")
        print("设备名称:\(systemName)")
        print("设备型号:\(model)")
        print("设备具体型号:\(modelName)")
        print("设备区域化型号:\(localizedModel)")
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
//扩展UIDevice
extension UIDevice {
    //获取设备具体详细的型号
    var modelName: String {
        var systemInfo = utsname()
        uname(&systemInfo)
        let machineMirror = Mirror(reflecting: systemInfo.machine)
        let identifier = machineMirror.children.reduce("") { identifier, element in
            guard let value = element.value asInt8, value != 0 else return identifier }
            return identifier + String(UnicodeScalar(UInt8(value)))
        }
         
        switch identifier {
        case "iPod5,1":                                 return "iPod Touch 5"
        case "iPod7,1":                                 return "iPod Touch 6"
        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 "iPhone9,1":                               return "iPhone 7 (CDMA)"
        case "iPhone9,3":                               return "iPhone 7 (GSM)"
        case "iPhone9,2":                               return "iPhone 7 Plus (CDMA)"
        case "iPhone9,4":                               return "iPhone 7 Plus (GSM)"
             
        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,7""iPad6,8":                      return "iPad Pro"
        case "AppleTV5,3":                              return "Apple TV"
        case "i386""x86_64":                          return "Simulator"
        default:                                        return identifier
        }
    }
}

Swift - 获取应用名称、应用版本、设备型号、系统版本等信息相关推荐

  1. 获取设备型号、设备类型等信息

    获取设备型号.设备类型等信息 设备标识 关于设备标识,历史上盛行过很多英雄,比如UDID.Mac地址.OpenUDID等,然而他们都陆陆续续倒在了苹果的门下.苹果目前提供了2个方法供App获取设备标识 ...

  2. iOS获取设备型号、设备类型等信息

    iOS获取设备型号.设备类型等信息 设备标识 关于设备标识,历史上盛行过很多英雄,比如UDID.Mac地址.OpenUDID等,然而他们都陆陆续续倒在了苹果的门下.苹果目前提供了2个方法供App获取设 ...

  3. Android获取手机型号,系统版本,App版本号等信息

    MainActivity如下: package cn.testgethandsetinfo; import android.os.Bundle; import android.text.TextUti ...

  4. iOS获取设备型号,运营商,网络信息

    在 iOS开发中会经常遇到需要获取设备型号,运营商,网络信息来了解和分析用户信息及使用终端情况. 但是 iOS是不能直接获取设备型号的,需要调用C语言的API, 今天给大家带来目前所有苹果设备的型号获 ...

  5. vue项目中获取当前设备 操作系统及版本,设备型号,ip,地区信息

    1.获取ip,地区信息 使用搜狐IP地址查询接口(?后边设置编码)须连网! http://pv.sohu.com/cityjson http://pv.sohu.com/cityjson?ie=utf ...

  6. 装服务器得时候选择系统版本,云服务器选择系统版本

    云服务器选择系统版本 内容精选 换一换 云服务器的正常运行依赖于XEN Guest OS driver(PV driver)和KVM Guest OS driver(UVP VMTools),为了同时 ...

  7. 手机服务器版本是什么系统版本,查看系统版本-如何查看windows系统的详细版本号...

    1.首先,我们打开系统中的计算机界面,在计算机界面中,点击选择"控制面版",然后在控制面板中点击选择"管理工具". 2.进入Windows管理工具界面以后,点击 ...

  8. linux家用系统版本,查看linux系统版本

    篇一:linux下如何查看系统和内核版本 linux下如何查看系统和内核版本 1. 查看内核版本命令: 1) [root@q1test01 ~]# cat /proc/version Linux ve ...

  9. kali linux查看版本,kali linux 系统版本的查看方法

    kali linux 系统版本的查看方法 1. kali linux 系统版本查看 命令:cat /etc/issue 2. kali linux系统内核信息查看 命令:uname -a 以上这篇ka ...

最新文章

  1. 久其软件怎么样_久其软件助力中国电信顺利完成网络攻防演练
  2. android 输入锁屏密码错误,安卓系统手机锁屏密码输错被停用了如何解决
  3. springboot源码分析之环境属性构造过程1
  4. Centos7使用yum安装MySQL5.6的正确姿势
  5. Qt5.9使用QWebEngineView加载网页速度非常慢,问题解决
  6. InstallShield Build Error -1014: Cannot rename directory PATH to PATH\folder.Bak.
  7. java array iterator_java数组遍历——iterator和for方法
  8. 在Java EE 7上骑骆驼–带有Swagger文档的REST服务
  9. IPC 中 LPC、RPC 的区别和联系
  10. java jcsh执行linux命令,java jcsh执行linux命令
  11. CSS3单词及属性大全
  12. uniapp中qrcode生成二维码后传的参数不见了_二维码扫描登录,你必须知道的 3 件事...
  13. TextView属性的静态使用与动态使用
  14. 程序员的职业素养---编码
  15. OneAPM 技术公开课:北京,北京!
  16. ffmpeg aac解码pcm
  17. java迷宫算法_迷宫求解算法(java版)
  18. Redis-使用redis-trib构建集群
  19. Rayson API 框架分析系列之2:API服务开发
  20. 全量查询与分页查询合二为一的思考

热门文章

  1. 扒一扒神经网络--NIN
  2. 什么是股权激励?股权激励的含义
  3. layui数据表格接口_layui数据表格实现重载数据表格功能(搜索功能)
  4. foxmail 添加 gmail账号的 具体设置参数
  5. javascript转帖备忘
  6. RedHat 7.5 7.6下载磁力链分享
  7. 数据库分库分表(sharding)系列(四) 多数据源的事务处理
  8. 使用vue-cli创建vue3+ts项目
  9. 海云安-防护越早,成本越低!开源软件安全治理需“左移”
  10. 【PM 产品】读人人都是产品经理有感 — Part one