天天看點

Swift - 擷取應用名稱、應用版本、裝置型号、系統版本等資訊

有時我們在 App 中送出一些統計資訊或者使用者回報資訊時,為了能更好地進行分析,通常會附帶上目前應用程式的名稱、版本号、裝置型号、以及裝置系統版本。下面示範如何擷取這些資訊。

1,效果圖

程式啟動後自動擷取相關的應用資訊以及裝置資訊,并列印到控制台中。

​​

Swift - 擷取應用名稱、應用版本、裝置型号、系統版本等資訊

2,樣例代碼

預設情況下我從 UIDevice 中擷取裝置型号時隻能得到 iPhone、iPod 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​

​ViewController​

​: ​

​UIViewController​

​{​

​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 ​

​as​

​! ​

​String​

​//裝置資訊​

​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 ​

​as​

​? ​

​Int8​

​, 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​

​}​

​}​

​}​