device_detector 1.0.0 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +49 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +5 -9
  5. data/CHANGELOG.md +18 -5
  6. data/README.md +7 -9
  7. data/Rakefile +20 -13
  8. data/device_detector.gemspec +1 -0
  9. data/lib/device_detector.rb +32 -28
  10. data/lib/device_detector/bot.rb +2 -2
  11. data/lib/device_detector/client.rb +3 -2
  12. data/lib/device_detector/device.rb +46 -20
  13. data/lib/device_detector/memory_cache.rb +26 -19
  14. data/lib/device_detector/metadata_extractor.rb +7 -8
  15. data/lib/device_detector/model_extractor.rb +3 -3
  16. data/lib/device_detector/name_extractor.rb +2 -2
  17. data/lib/device_detector/os.rb +121 -111
  18. data/lib/device_detector/parser.rb +22 -9
  19. data/lib/device_detector/version.rb +3 -1
  20. data/lib/device_detector/version_extractor.rb +2 -3
  21. data/regexes/bots.yml +895 -21
  22. data/regexes/client/browser_engine.yml +11 -2
  23. data/regexes/client/browsers.yml +1025 -205
  24. data/regexes/client/feed_readers.yml +38 -2
  25. data/regexes/client/libraries.yml +81 -2
  26. data/regexes/client/mediaplayers.yml +25 -5
  27. data/regexes/client/mobile_apps.yml +213 -2
  28. data/regexes/client/pim.yml +10 -1
  29. data/regexes/device/cameras.yml +1 -1
  30. data/regexes/device/car_browsers.yml +7 -3
  31. data/regexes/device/consoles.yml +3 -3
  32. data/regexes/device/mobiles.yml +12768 -571
  33. data/regexes/device/notebooks.yml +114 -0
  34. data/regexes/device/portable_media_player.yml +4 -6
  35. data/regexes/device/televisions.yml +33 -5
  36. data/regexes/oss.yml +138 -49
  37. data/regexes/vendorfragments.yml +6 -2
  38. data/spec/device_detector/concrete_user_agent_spec.rb +16 -17
  39. data/spec/device_detector/detector_fixtures_spec.rb +59 -24
  40. data/spec/device_detector/device_spec.rb +28 -48
  41. data/spec/device_detector/memory_cache_spec.rb +60 -28
  42. data/spec/device_detector/model_extractor_spec.rb +3 -3
  43. data/spec/device_detector/version_extractor_spec.rb +5 -6
  44. data/spec/device_detector_spec.rb +60 -69
  45. data/spec/fixtures/client/browser.yml +1810 -260
  46. data/spec/fixtures/client/feed_reader.yml +47 -35
  47. data/spec/fixtures/client/library.yml +118 -3
  48. data/spec/fixtures/client/mediaplayer.yml +32 -37
  49. data/spec/fixtures/client/mobile_app.yml +225 -5
  50. data/spec/fixtures/client/pim.yml +37 -18
  51. data/spec/fixtures/detector/bots.yml +1531 -136
  52. data/spec/fixtures/detector/camera.yml +36 -10
  53. data/spec/fixtures/detector/car_browser.yml +64 -3
  54. data/spec/fixtures/detector/console.yml +80 -26
  55. data/spec/fixtures/detector/desktop.yml +3865 -2238
  56. data/spec/fixtures/detector/feature_phone.yml +151 -42
  57. data/spec/fixtures/detector/feed_reader.yml +186 -121
  58. data/spec/fixtures/detector/mediaplayer.yml +113 -39
  59. data/spec/fixtures/detector/mobile_apps.yml +451 -21
  60. data/spec/fixtures/detector/phablet.yml +3847 -660
  61. data/spec/fixtures/detector/portable_media_player.yml +81 -16
  62. data/spec/fixtures/detector/smart_display.yml +8 -5
  63. data/spec/fixtures/detector/smart_speaker.yml +55 -0
  64. data/spec/fixtures/detector/smartphone-1.yml +5385 -4948
  65. data/spec/fixtures/detector/smartphone-10.yml +9973 -0
  66. data/spec/fixtures/detector/smartphone-11.yml +10015 -0
  67. data/spec/fixtures/detector/smartphone-12.yml +9897 -0
  68. data/spec/fixtures/detector/smartphone-13.yml +9912 -0
  69. data/spec/fixtures/detector/smartphone-14.yml +9935 -0
  70. data/spec/fixtures/detector/smartphone-15.yml +6595 -0
  71. data/spec/fixtures/detector/smartphone-16.yml +10021 -0
  72. data/spec/fixtures/detector/smartphone-17.yml +9408 -0
  73. data/spec/fixtures/detector/smartphone-2.yml +5221 -4646
  74. data/spec/fixtures/detector/smartphone-3.yml +5047 -4494
  75. data/spec/fixtures/detector/smartphone-4.yml +6958 -2761
  76. data/spec/fixtures/detector/smartphone-5.yml +9937 -0
  77. data/spec/fixtures/detector/smartphone-6.yml +10114 -0
  78. data/spec/fixtures/detector/smartphone-7.yml +9975 -0
  79. data/spec/fixtures/detector/smartphone-8.yml +9897 -0
  80. data/spec/fixtures/detector/smartphone-9.yml +9880 -0
  81. data/spec/fixtures/detector/smartphone.yml +5229 -4649
  82. data/spec/fixtures/detector/tablet-1.yml +4640 -4140
  83. data/spec/fixtures/detector/tablet-2.yml +9806 -71
  84. data/spec/fixtures/detector/tablet-3.yml +9968 -0
  85. data/spec/fixtures/detector/tablet-4.yml +7113 -0
  86. data/spec/fixtures/detector/tablet.yml +4619 -4132
  87. data/spec/fixtures/detector/tv.yml +4093 -1342
  88. data/spec/fixtures/detector/unknown.yml +1042 -1006
  89. data/spec/fixtures/detector/wearable.yml +61 -0
  90. data/spec/fixtures/device/camera.yml +4 -3
  91. data/spec/fixtures/device/car_browser.yml +9 -2
  92. data/spec/fixtures/device/console.yml +15 -14
  93. data/spec/fixtures/device/notebook.yml +7 -0
  94. data/spec/fixtures/parser/oss.yml +291 -2
  95. data/spec/fixtures/parser/vendorfragments.yml +8 -2
  96. metadata +59 -7
@@ -0,0 +1,114 @@
1
+ ###############
2
+ # Device Detector - The Universal Device Detection library for parsing User Agents
3
+ #
4
+ # @link https://matomo.org
5
+ # @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
6
+ ###############
7
+
8
+ Acer:
9
+ regex: 'FBMD/(?:Aspire E5-421G|Z5WAL|One S1003);'
10
+ device: 'desktop'
11
+ models:
12
+ - regex: 'FBMD/Aspire E5-421G;'
13
+ model: 'Aspire E5-421G'
14
+ - regex: 'FBMD/Z5WAL;'
15
+ model: 'Aspire E5-511'
16
+ - regex: 'FBMD/One S1003;'
17
+ model: 'One 10'
18
+
19
+ Asus:
20
+ regex: 'FBMD/(?:K50IN|K54L|T100HAN|T103HAF|UX360CAK|X550LB|X553MA|X555LN|X556UQK);'
21
+ device: 'desktop'
22
+ models:
23
+ - regex: 'FBMD/K50IN;'
24
+ model: 'K50IN'
25
+ - regex: 'FBMD/K54L;'
26
+ model: 'K54L'
27
+ - regex: 'FBMD/T100HAN;'
28
+ model: 'Transformer Book'
29
+ - regex: 'FBMD/T103HAF;'
30
+ model: 'Transformer Mini'
31
+ - regex: 'FBMD/UX360CAK;'
32
+ model: 'ZenBook Flip'
33
+ - regex: 'FBMD/X550LB;'
34
+ model: 'X550LB'
35
+ - regex: 'FBMD/X553MA;'
36
+ model: 'X553MA'
37
+ - regex: 'FBMD/X555LN;'
38
+ model: 'X555LN'
39
+ - regex: 'FBMD/X556UQK;'
40
+ model: 'X556UQK'
41
+
42
+ Dell:
43
+ regex: 'FBMD/(?:Latitude E4300|Inspiron 3541|XPS 15 95[35]0);'
44
+ device: 'desktop'
45
+ models:
46
+ - regex: 'Latitude E4300'
47
+ model: 'Latitude E4300'
48
+ - regex: 'Inspiron 3541'
49
+ model: 'Inspiron 3541'
50
+ - regex: 'XPS 15 9530'
51
+ model: 'XPS 15 9530'
52
+ - regex: 'XPS 15 9550'
53
+ model: 'XPS 15 9550'
54
+
55
+ HP:
56
+ regex: 'FBMD/((?:Compaq|HP) |23-f364)'
57
+ device: 'desktop'
58
+ models:
59
+ - regex: 'Compaq Presario CQ61 Notebook PC'
60
+ model: 'Compaq Presario CQ61'
61
+ - regex: 'HP Pavilion x2 Detachable'
62
+ model: 'Pavilion x2'
63
+ - regex: 'HP Laptop 15-bs0xx'
64
+ model: '15 Laptop PC'
65
+ - regex: 'HP ENVY x360 Convertible 15-bp0xx'
66
+ model: 'ENVY x360 Convertible PC'
67
+ - regex: 'HP EliteBook (25[67]0p)'
68
+ model: 'EliteBook $1'
69
+ - regex: 'HP ProBook (440 G5|6[35]60b)'
70
+ model: 'ProBook $1'
71
+ - regex: 'HP Pavilion dv6 Notebook PC'
72
+ model: 'Pavilion dv6'
73
+ - regex: 'HP Pavilion Notebook'
74
+ model: 'Pavilion'
75
+ - regex: 'HP Spectre x360 Convertible'
76
+ model: 'Spectre x360'
77
+ - regex: 'HP Pavilion All-in-One 24-r0xx'
78
+ model: 'Pavilion 24-r0xx All-in-One Desktop PC'
79
+ device: 'desktop'
80
+ - regex: '23-f364'
81
+ model: 'Pavilion TouchSmart 23-f364 All-in-One Desktop PC'
82
+ device: 'desktop'
83
+
84
+ Lenovo:
85
+ regex: 'FBMD/(?:37021C5|80E5|80SM|80VR);'
86
+ device: 'desktop'
87
+ models:
88
+ - regex: 'FBMD/37021C5;'
89
+ model: 'ThinkPad Helix 3702'
90
+ - regex: 'FBMD/80E5;'
91
+ model: 'G50-80'
92
+ - regex: 'FBMD/80SM;'
93
+ model: 'Ideapad 310-15ISK'
94
+ - regex: 'FBMD/80VR;'
95
+ model: 'Legion Y720'
96
+
97
+ Schneider:
98
+ regex: 'FBMD/SCL141CTP;'
99
+ device: 'desktop'
100
+ model: 'Notebook 14" Cherry Trail'
101
+
102
+ Thomson:
103
+ regex: 'FBMD/TH360R12.32CTW;'
104
+ device: 'desktop'
105
+ model: 'Prestige TH-360R12.32CTW'
106
+
107
+ Toshiba:
108
+ regex: 'FBMD/Satellite '
109
+ device: 'desktop'
110
+ models:
111
+ - regex: 'Satellite (A[25]00|C650|C855|L650|S855)'
112
+ model: 'Satellite $1'
113
+ - regex: 'Satellite ([^;\)]+);'
114
+ model: 'Satellite $1'
@@ -1,7 +1,7 @@
1
1
  ###############
2
2
  # Device Detector - The Universal Device Detection library for parsing User Agents
3
3
  #
4
- # @link http://piwik.org
4
+ # @link https://matomo.org
5
5
  # @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
6
6
  ###############
7
7
 
@@ -19,10 +19,8 @@ Apple:
19
19
  model: 'iPod Touch 4'
20
20
  - regex: '(?:Apple-)?iPod5[C,]1'
21
21
  model: 'iPod Touch 5'
22
- - regex: '(?:Apple-)?iPod1[C,]1'
23
- model: 'iPod Touch'
24
- - regex: '(?:Apple-)?iPod1[C,]1'
25
- model: 'iPod Touch'
22
+ - regex: '(?:Apple-)?iPod7[C,]1'
23
+ model: 'iPod Touch 6'
26
24
  - regex: '(?:Apple-)?iPod'
27
25
  model: 'iPod Touch'
28
26
 
@@ -58,4 +56,4 @@ Samsung:
58
56
  - regex: 'YP-G50'
59
57
  model: 'Galaxy Player 50'
60
58
  - regex: 'YP-GB70D'
61
- model: 'Galaxy Player 70 Plus'
59
+ model: 'Galaxy Player 70 Plus'
@@ -1,7 +1,7 @@
1
1
  ###############
2
2
  # Device Detector - The Universal Device Detection library for parsing User Agents
3
3
  #
4
- # @link http://piwik.org
4
+ # @link https://matomo.org
5
5
  # @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
6
6
  #
7
7
  # ATTENTION: This file may only include tv user agents that contain 'HbbTV/([1-9]{1}(\.[0-9]{1}){1,2})'
@@ -56,6 +56,16 @@ Grundig:
56
56
  device: 'tv'
57
57
  model: ''
58
58
 
59
+ # Hisense
60
+ Hisense:
61
+ regex: 'Hisense'
62
+ device: 'tv'
63
+ models:
64
+ - regex: '(L[A-Z]{2,3}[0-9]{2}[A-Z][0-9]{3,4}[A-Z]{0,6}[0-9]?[A-Z]?)'
65
+ model: '$1'
66
+ - regex: '(H[A-Z]?[0-9]{2}[A-Z][0-9]{3,4}[A-Z]{0,4})'
67
+ model: '$1'
68
+
59
69
  # Humax
60
70
  Humax:
61
71
  regex: 'Humax'
@@ -101,6 +111,10 @@ LG:
101
111
  models:
102
112
  - regex: '(NetCast [0-9]{1}.[0-9]{1}|GLOBAL_PLAT3)'
103
113
  model: '$1'
114
+ - regex: '(OLED[0-9]{2}[A-Z][0-9][A-Z])'
115
+ model: '$1'
116
+ - regex: 'LGE;? ?([0-9]{2}[A-Z]{2}[0-9]{2,4}[A-Z]?)'
117
+ model: '$1'
104
118
 
105
119
  # Loewe
106
120
  Loewe:
@@ -165,7 +179,7 @@ Samsung:
165
179
  regex: 'Samsung|Maple_2011'
166
180
  device: 'tv'
167
181
  models:
168
- - regex: 'SmartTV(2012|2013|2014|2015)'
182
+ - regex: 'SmartTV(201[2-9])'
169
183
  model: 'Smart TV $1'
170
184
  - regex: 'Maple_2011'
171
185
  model: 'Smart TV 2011'
@@ -213,7 +227,7 @@ Sony:
213
227
  regex: 'Sony'
214
228
  device: 'tv'
215
229
  models:
216
- - regex: '(KDL[0-9]{2}[A-Z]{1,2}[0-9]{3})'
230
+ - regex: '(KDL?-?[0-9]{2}[A-Z]{1,2}[0-9]{1,5})'
217
231
  model: '$1'
218
232
 
219
233
  # TechniSat
@@ -244,14 +258,28 @@ TCL:
244
258
  regex: 'TCL'
245
259
  device: 'tv'
246
260
  models:
261
+ - regex: '(32D1820)'
262
+ model: '$1'
247
263
  - regex: '(LF1V[0-9]{3})'
248
264
  model: '$1'
249
265
 
250
266
  # Thomson
251
267
  Thomson:
252
- regex: 'THOMSON|THOM'
268
+ regex: 'THOMSON[,]?|THOM'
253
269
  device: 'tv'
254
270
  models:
271
+ - regex: '(TB28D19DHS-01|T28D18SFS-01B)'
272
+ model: '$1 28.0"'
273
+ - regex: '(T32RTM5040|T32D18SFS-01B)'
274
+ model: '$1 32.0"'
275
+ - regex: '(T43FSL5031|T43D18SFS-01B)'
276
+ model: '$1 43.0"'
277
+ - regex: '(T40D18SFS-01B)'
278
+ model: '$1 40.0"'
279
+ - regex: '(T49D18SFS-01B)'
280
+ model: '$1 49.0"'
281
+ - regex: '(T55D18[SD]FS-01B)'
282
+ model: '$1 55.0"'
255
283
  - regex: '(LF1V[0-9]{3})'
256
284
  model: '$1'
257
285
 
@@ -279,4 +307,4 @@ Videoweb:
279
307
  - regex: '(tv2n)'
280
308
  model: '$1'
281
309
  - regex: '(videowebtv)'
282
- model: 'VideoWeb TV'
310
+ model: 'VideoWeb TV'
@@ -1,7 +1,7 @@
1
1
  ###############
2
2
  # Device Detector - The Universal Device Detection library for parsing User Agents
3
3
  #
4
- # @link http://piwik.org
4
+ # @link https://matomo.org
5
5
  # @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
6
6
  ###############
7
7
 
@@ -31,7 +31,7 @@
31
31
  ##########
32
32
  # Windows Mobile
33
33
  ##########
34
- - regex: 'Windows Phone (?:OS)?[ ]?(\d+[\.\d]+)'
34
+ - regex: '(?:Windows Phone (?:OS)?|wds)[ ]?(\d+[\.\d]+)'
35
35
  name: 'Windows Phone'
36
36
  version: '$1'
37
37
 
@@ -45,7 +45,7 @@
45
45
  version: '$1'
46
46
 
47
47
 
48
- - regex: '(?:IEMobile|Windows Mobile)(?: (\d+[\.\d]+))?'
48
+ - regex: '(?:IEMobile|Windows ?Mobile)(?: (\d+[\.\d]+))?'
49
49
  name: 'Windows Mobile'
50
50
  version: '$1'
51
51
 
@@ -58,6 +58,19 @@
58
58
  name: 'Windows RT'
59
59
  version: '8.1'
60
60
 
61
+ ##########
62
+ # Windows IoT
63
+ ##########
64
+ - regex: 'Windows IoT 10.0'
65
+ name: 'Windows IoT'
66
+ version: '10'
67
+
68
+ ##########
69
+ # KaiOS
70
+ ##########
71
+ - regex: 'KAIOS(?:/(\d+[\.\d]+))?'
72
+ name: 'KaiOS'
73
+ version: '$1'
61
74
 
62
75
  ##########
63
76
  # Custom Android Roms
@@ -78,17 +91,36 @@
78
91
  name: 'MocorDroid'
79
92
  version: '$1'
80
93
 
94
+ - regex: 'Fire OS(?:/(\d+[\.\d]*))?'
95
+ name: 'Fire OS'
96
+ version: '$1'
97
+
81
98
  ##########
82
99
  # Android
83
100
  ##########
84
- - regex: '(?:(?:Orca-)?Android|Adr)[ /](?:[a-z]+ )?(\d+[\.\d]+)'
101
+ - regex: '[ ]([\d\.]+)\) AppleWebKit.*ROBLOX Android App'
102
+ name: 'Android'
103
+ version: '$1'
104
+
105
+ - regex: '(?:(?:Orca-)?Android|Adr)[ /](?:[a-z]+ )?(\d+[\.\d]*)'
85
106
  name: 'Android'
86
107
  version: '$1'
87
-
88
108
 
89
109
  - regex: 'Android|Silk-Accelerated=[a-z]{4,5}'
90
110
  name: 'Android'
91
111
  version: ''
112
+
113
+ - regex: '(?:TwitterAndroid).*[ /](?:[a-z]+ )?(\d+[\.\d]*)'
114
+ name: 'Android'
115
+ version: '$1'
116
+
117
+ - regex: 'FB4A.*FBSV/(\d+[\.\d]*);'
118
+ name: 'Android'
119
+ version: '$1'
120
+
121
+ - regex: 'BeyondPod|AntennaPod|Podkicker|DoggCatcher|Player FM|okhttp|Podcatcher Deluxe'
122
+ name: 'Android'
123
+ version: ''
92
124
 
93
125
 
94
126
  ##########
@@ -122,9 +154,17 @@
122
154
  ##########
123
155
  # Linux
124
156
  ##########
157
+ - regex: '(Ordissimo|webissimo3)'
158
+ name: 'Ordissimo'
159
+ version: ''
160
+
161
+ - regex: 'TOS; Linux'
162
+ name: 'TmaxOS'
163
+ version: ''
164
+
125
165
  - regex: 'Maemo'
126
166
  name: 'Maemo'
127
- version: '$1'
167
+ version: ''
128
168
 
129
169
  - regex: 'Arch ?Linux(?:[ /\-](\d+[\.\d]+))?'
130
170
  name: 'Arch Linux'
@@ -147,7 +187,7 @@
147
187
  ##########
148
188
  # webOS
149
189
  ##########
150
- - regex: '(?:webOS|Palm webOS)(?:/(\d+[\.\d]+))?'
190
+ - regex: '(?:webOS|web0S|Palm webOS)(?:/(\d+[\.\d]+))?'
151
191
  name: 'webOS'
152
192
  version: '$1'
153
193
 
@@ -172,79 +212,118 @@
172
212
  name: 'Windows'
173
213
  version: '10'
174
214
 
175
- - regex: 'CYGWIN_NT-6.4|Windows NT 6.4|Windows 10'
215
+ - regex: 'CYGWIN_NT-6.4|Windows NT 6.4|Windows 10|win10'
176
216
  name: 'Windows'
177
217
  version: '10'
178
-
218
+
179
219
  - regex: 'CYGWIN_NT-6.3|Windows NT 6.3|Windows 8.1'
180
220
  name: 'Windows'
181
221
  version: '8.1'
182
222
 
183
-
184
223
  - regex: 'CYGWIN_NT-6.2|Windows NT 6.2|Windows 8'
185
224
  name: 'Windows'
186
225
  version: '8'
187
-
188
-
189
- - regex: 'CYGWIN_NT-6.1|Windows NT 6.1|Windows 7'
226
+
227
+ - regex: 'CYGWIN_NT-6.1|Windows NT 6.1|Windows 7|win7'
190
228
  name: 'Windows'
191
229
  version: '7'
192
-
193
-
230
+
194
231
  - regex: 'CYGWIN_NT-6.0|Windows NT 6.0|Windows Vista'
195
232
  name: 'Windows'
196
233
  version: 'Vista'
197
-
198
-
234
+
199
235
  - regex: 'CYGWIN_NT-5.2|Windows NT 5.2|Windows Server 2003 / XP x64'
200
236
  name: 'Windows'
201
237
  version: 'Server 2003'
202
-
203
-
238
+
204
239
  - regex: 'CYGWIN_NT-5.1|Windows NT 5.1|Windows XP'
205
240
  name: 'Windows'
206
241
  version: 'XP'
207
-
208
-
242
+
209
243
  - regex: 'CYGWIN_NT-5.0|Windows NT 5.0|Windows 2000'
210
244
  name: 'Windows'
211
245
  version: '2000'
212
-
213
-
246
+
214
247
  - regex: 'CYGWIN_NT-4.0|Windows NT 4.0|WinNT|Windows NT'
215
248
  name: 'Windows'
216
249
  version: 'NT'
217
-
218
-
250
+
219
251
  - regex: 'CYGWIN_ME-4.90|Win 9x 4.90|Windows ME'
220
252
  name: 'Windows'
221
253
  version: 'ME'
222
-
223
-
254
+
224
255
  - regex: 'CYGWIN_98-4.10|Win98|Windows 98'
225
256
  name: 'Windows'
226
257
  version: '98'
227
-
228
-
258
+
229
259
  - regex: 'CYGWIN_95-4.0|Win32|Win95|Windows 95|Windows_95'
230
260
  name: 'Windows'
231
261
  version: '95'
232
-
233
-
262
+
234
263
  - regex: 'Windows 3.1'
235
264
  name: 'Windows'
236
265
  version: '3.1'
237
-
238
-
266
+
267
+ - regex: 'FBW.*FBSV/(\d+[\.\d]*);'
268
+ name: 'Windows'
269
+ version: '$1'
270
+
239
271
  - regex: 'Windows'
240
272
  name: 'Windows'
241
273
  version: ''
242
-
243
-
274
+
275
+
276
+ ##########
277
+ # Haiku OS
278
+ ##########
279
+ - regex: 'Haiku'
280
+ name: 'Haiku OS'
281
+ version: ''
282
+
244
283
 
245
284
  ##########
246
285
  # iOS
247
286
  ##########
287
+ - regex: 'CFNetwork/889'
288
+ name: 'iOS'
289
+ version: '11.1'
290
+
291
+ - regex: 'CFNetwork/887.*(x86_64)'
292
+ name: 'Mac'
293
+ version: '10.13'
294
+
295
+ - regex: 'CFNetwork/887'
296
+ name: 'iOS'
297
+ version: '11.0'
298
+
299
+ - regex: 'CFNetwork/811.*(x86_64)'
300
+ name: 'Mac'
301
+ version: '10.12'
302
+
303
+ - regex: 'CFNetwork/811'
304
+ name: 'iOS'
305
+ version: '10.3'
306
+
307
+ - regex: 'CFNetwork/808\.3'
308
+ name: 'iOS'
309
+ version: '10.3'
310
+
311
+ - regex: 'CFNetwork/808\.2'
312
+ name: 'iOS'
313
+ version: '10.2'
314
+
315
+ - regex: 'CFNetwork/808\.1'
316
+ name: 'iOS'
317
+ version: '10.1'
318
+
319
+ - regex: 'CFNetwork/808\.0'
320
+ name: 'iOS'
321
+ version: '10.0'
322
+
323
+ - regex: 'CFNetwork/808'
324
+ name: 'iOS'
325
+ version: '10'
326
+
248
327
  - regex: 'CFNetwork/758\.4\.3'
249
328
  name: 'iOS'
250
329
  version: '9.3.2'
@@ -341,16 +420,31 @@
341
420
  name: 'iOS'
342
421
  version: '$1'
343
422
 
423
+ - regex: 'FBIOS.*FBSV/(\d+[\.\d]*);'
424
+ name: 'iOS'
425
+ version: '$1'
426
+
344
427
  - regex: '(?:Apple-)?(?:iPhone|iPad|iPod)(?:.*Mac OS X.*Version/(\d+\.\d+)|; Opera)?'
345
428
  name: 'iOS'
346
429
  version: '$1'
347
430
 
431
+ - regex: 'Podcasts/(?:[\d\.]+)|Instacast(?:HD)?/(?:\d\.[\d\.abc]+)|Pocket Casts, iOS|Overcast|Castro|Podcat|i[cC]atcher|RSSRadio/'
432
+ name: 'iOS'
433
+ version: ''
434
+
435
+ - regex: 'iTunes-(iPod|iPad|iPhone)/(?:[\d\.]+)'
436
+ name: 'iOS'
437
+ version: ''
348
438
 
349
439
 
350
440
  ##########
351
441
  # Mac
352
442
  ##########
353
443
 
444
+ - regex: 'CFNetwork/807'
445
+ name: 'Mac'
446
+ version: '10.12'
447
+
354
448
  - regex: 'CFNetwork/760'
355
449
  name: 'Mac'
356
450
  version: '10.11'
@@ -391,7 +485,7 @@
391
485
  name: 'Mac'
392
486
  version: '10.2'
393
487
 
394
- - regex: 'Mac OS X(?: (?:Version )?(\d+(?:[_\.]\d+)+))?'
488
+ - regex: 'Mac[ +]OS[ +]X(?:[ /](?:Version )?(\d+(?:[_\.]\d+)+))?'
395
489
  name: 'Mac'
396
490
  version: '$1'
397
491
 
@@ -399,7 +493,7 @@
399
493
  name: 'Mac'
400
494
  version: '$1'
401
495
 
402
- - regex: 'Darwin|Macintosh|Mac_PowerPC|PPC|Mac PowerPC'
496
+ - regex: 'Darwin|Macintosh|Mac_PowerPC|PPC|Mac PowerPC|iMac|MacBook'
403
497
  name: 'Mac'
404
498
  version: ''
405
499
 
@@ -408,7 +502,7 @@
408
502
  ##########
409
503
  # ChromeOS
410
504
  ##########
411
- - regex: 'CrOS [a-z0-9_]+ (\d+[\.\d]+)'
505
+ - regex: 'CrOS [a-z0-9_]+ .* Chrome/(\d+[\.\d]+)'
412
506
  name: 'Chrome OS'
413
507
  version: '$1'
414
508
 
@@ -435,13 +529,9 @@
435
529
  - regex: 'BlackBerry'
436
530
  name: 'BlackBerry OS'
437
531
  version: ''
438
-
439
-
440
- ##########
441
- # Haiku OS
442
- ##########
443
- - regex: 'Haiku'
444
- name: 'Haiku OS'
532
+
533
+ - regex: 'bPod'
534
+ name: 'BlackBerry OS'
445
535
  version: ''
446
536
 
447
537
 
@@ -645,11 +735,10 @@
645
735
  ##########
646
736
  # Gaming Console
647
737
  ##########
648
- - regex: 'Nintendo Wii'
738
+ - regex: 'Nintendo (Wii|Switch)'
649
739
  name: 'Nintendo'
650
- version: 'Wii'
651
-
652
-
740
+ version: '$1'
741
+
653
742
  - regex: 'PlayStation ?([3|4])'
654
743
  name: 'PlayStation'
655
744
  version: '$1'