device_detector 1.0.3 → 1.0.7

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 (94) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +15 -0
  3. data/README.md +8 -7
  4. data/lib/device_detector/bot.rb +2 -2
  5. data/lib/device_detector/browser.rb +364 -0
  6. data/lib/device_detector/client.rb +11 -2
  7. data/lib/device_detector/device.rb +1247 -22
  8. data/lib/device_detector/memory_cache.rb +5 -5
  9. data/lib/device_detector/metadata_extractor.rb +7 -8
  10. data/lib/device_detector/model_extractor.rb +3 -3
  11. data/lib/device_detector/name_extractor.rb +2 -2
  12. data/lib/device_detector/os.rb +150 -116
  13. data/lib/device_detector/parser.rb +23 -10
  14. data/lib/device_detector/version.rb +1 -1
  15. data/lib/device_detector/version_extractor.rb +29 -2
  16. data/lib/device_detector.rb +73 -40
  17. data/regexes/bots.yml +868 -62
  18. data/regexes/client/browser_engine.yml +11 -2
  19. data/regexes/client/browsers.yml +1132 -112
  20. data/regexes/client/feed_readers.yml +5 -11
  21. data/regexes/client/libraries.yml +86 -2
  22. data/regexes/client/mediaplayers.yml +39 -3
  23. data/regexes/client/mobile_apps.yml +940 -66
  24. data/regexes/client/pim.yml +66 -3
  25. data/regexes/device/cameras.yml +6 -6
  26. data/regexes/device/car_browsers.yml +23 -3
  27. data/regexes/device/consoles.yml +15 -3
  28. data/regexes/device/mobiles.yml +18351 -3566
  29. data/regexes/device/notebooks.yml +114 -0
  30. data/regexes/device/portable_media_player.yml +36 -9
  31. data/regexes/device/shell_tv.yml +117 -0
  32. data/regexes/device/televisions.yml +440 -35
  33. data/regexes/oss.yml +635 -284
  34. data/regexes/vendorfragments.yml +5 -1
  35. metadata +21 -118
  36. data/.gitignore +0 -14
  37. data/.travis.yml +0 -14
  38. data/Gemfile +0 -8
  39. data/Rakefile +0 -96
  40. data/device_detector.gemspec +0 -26
  41. data/spec/device_detector/bot_fixtures_spec.rb +0 -30
  42. data/spec/device_detector/client_fixtures_spec.rb +0 -31
  43. data/spec/device_detector/concrete_user_agent_spec.rb +0 -135
  44. data/spec/device_detector/detector_fixtures_spec.rb +0 -100
  45. data/spec/device_detector/device_fixtures_spec.rb +0 -36
  46. data/spec/device_detector/device_spec.rb +0 -151
  47. data/spec/device_detector/memory_cache_spec.rb +0 -148
  48. data/spec/device_detector/model_extractor_spec.rb +0 -63
  49. data/spec/device_detector/os_fixtures_spec.rb +0 -26
  50. data/spec/device_detector/version_extractor_spec.rb +0 -79
  51. data/spec/device_detector_spec.rb +0 -189
  52. data/spec/fixtures/client/browser.yml +0 -2206
  53. data/spec/fixtures/client/feed_reader.yml +0 -199
  54. data/spec/fixtures/client/library.yml +0 -175
  55. data/spec/fixtures/client/mediaplayer.yml +0 -163
  56. data/spec/fixtures/client/mobile_app.yml +0 -193
  57. data/spec/fixtures/client/pim.yml +0 -115
  58. data/spec/fixtures/detector/bots.yml +0 -3260
  59. data/spec/fixtures/detector/camera.yml +0 -121
  60. data/spec/fixtures/detector/car_browser.yml +0 -21
  61. data/spec/fixtures/detector/console.yml +0 -281
  62. data/spec/fixtures/detector/desktop.yml +0 -5361
  63. data/spec/fixtures/detector/feature_phone.yml +0 -891
  64. data/spec/fixtures/detector/feed_reader.yml +0 -551
  65. data/spec/fixtures/detector/mediaplayer.yml +0 -210
  66. data/spec/fixtures/detector/mobile_apps.yml +0 -456
  67. data/spec/fixtures/detector/phablet.yml +0 -3785
  68. data/spec/fixtures/detector/portable_media_player.yml +0 -178
  69. data/spec/fixtures/detector/smart_display.yml +0 -61
  70. data/spec/fixtures/detector/smartphone-1.yml +0 -9953
  71. data/spec/fixtures/detector/smartphone-10.yml +0 -9924
  72. data/spec/fixtures/detector/smartphone-11.yml +0 -9889
  73. data/spec/fixtures/detector/smartphone-12.yml +0 -8655
  74. data/spec/fixtures/detector/smartphone-2.yml +0 -9967
  75. data/spec/fixtures/detector/smartphone-3.yml +0 -9887
  76. data/spec/fixtures/detector/smartphone-4.yml +0 -9911
  77. data/spec/fixtures/detector/smartphone-5.yml +0 -9933
  78. data/spec/fixtures/detector/smartphone-6.yml +0 -9923
  79. data/spec/fixtures/detector/smartphone-7.yml +0 -9892
  80. data/spec/fixtures/detector/smartphone-8.yml +0 -9896
  81. data/spec/fixtures/detector/smartphone-9.yml +0 -9928
  82. data/spec/fixtures/detector/smartphone.yml +0 -9984
  83. data/spec/fixtures/detector/tablet-1.yml +0 -10023
  84. data/spec/fixtures/detector/tablet-2.yml +0 -9968
  85. data/spec/fixtures/detector/tablet-3.yml +0 -7787
  86. data/spec/fixtures/detector/tablet.yml +0 -9951
  87. data/spec/fixtures/detector/tv.yml +0 -3333
  88. data/spec/fixtures/detector/unknown.yml +0 -3283
  89. data/spec/fixtures/device/camera.yml +0 -19
  90. data/spec/fixtures/device/car_browser.yml +0 -7
  91. data/spec/fixtures/device/console.yml +0 -79
  92. data/spec/fixtures/parser/oss.yml +0 -1047
  93. data/spec/fixtures/parser/vendorfragments.yml +0 -162
  94. data/spec/spec_helper.rb +0 -9
data/regexes/oss.yml CHANGED
@@ -1,26 +1,46 @@
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
 
8
8
  ##########
9
- # Tizen
9
+ # GridOS (https://web.archive.org/web/20111123141630/http://fusiongarage.com/grid-os/about)
10
10
  ##########
11
- - regex: 'Tizen[ /]?(\d+[\.\d]+)?'
12
- name: 'Tizen'
11
+ - regex: 'Grid OS (\d+[\.\d]+)'
12
+ name: 'GridOS'
13
13
  version: '$1'
14
14
 
15
-
15
+ ##########
16
+ # Caixa Mágica (https://caixamagica.pt/)
17
+ ##########
18
+ - regex: 'CaixaMagica'
19
+ name: 'Caixa Mágica'
20
+ version: ''
16
21
 
17
22
  ##########
18
- ## Sailfish OS
19
- ###########
20
- - regex: 'Sailfish|Jolla'
21
- name: 'Sailfish OS'
23
+ # Mageia (https://www.mageia.org/en/)
24
+ ##########
25
+ - regex: 'Mageia; Linux'
26
+ name: 'Mageia'
22
27
  version: ''
23
28
 
29
+ ##########
30
+ # Whale OS (https://www.zeasn.com/)
31
+ ##########
32
+ - regex: '(?:WH|WhaleTV/)(\d+[\.\d]+)'
33
+ name: 'Whale OS'
34
+ version: '$1'
35
+
36
+ ##########
37
+ # Tizen
38
+ ##########
39
+ - regex: 'Tizen[ /]?(\d+[\.\d]+)?'
40
+ name: 'Tizen'
41
+ version: '$1'
42
+
43
+
24
44
  ##########
25
45
  # YunOS (Android based)
26
46
  ##########
@@ -31,11 +51,14 @@
31
51
  ##########
32
52
  # Windows Mobile
33
53
  ##########
34
- - regex: '(?:Windows Phone (?:OS)?|wds)[ ]?(\d+[\.\d]+)'
54
+ - regex: 'Windows Phone;FBSV/(\d+[\.\d]+)'
55
+ name: 'Windows Phone'
56
+ version: '$1'
57
+
58
+ - regex: '(?:Windows Phone (?:OS)?|wds)[ /]?(\d+[\.\d]+)'
35
59
  name: 'Windows Phone'
36
60
  version: '$1'
37
-
38
-
61
+
39
62
  - regex: 'XBLWP7|Windows Phone'
40
63
  name: 'Windows Phone'
41
64
  version: ''
@@ -43,17 +66,15 @@
43
66
  - regex: 'Windows CE(?: (\d+[\.\d]+))?'
44
67
  name: 'Windows CE'
45
68
  version: '$1'
46
-
47
-
69
+
48
70
  - regex: '(?:IEMobile|Windows ?Mobile)(?: (\d+[\.\d]+))?'
49
71
  name: 'Windows Mobile'
50
72
  version: '$1'
51
-
52
-
73
+
53
74
  - regex: 'Windows NT 6.2; ARM;'
54
75
  name: 'Windows RT'
55
76
  version: ''
56
-
77
+
57
78
  - regex: 'Windows NT 6.3; ARM;'
58
79
  name: 'Windows RT'
59
80
  version: '8.1'
@@ -75,6 +96,10 @@
75
96
  ##########
76
97
  # Custom Android Roms
77
98
  ##########
99
+ - regex: 'HarmonyOS(?:[/ ](\d+[\.\d]+))?'
100
+ name: 'HarmonyOS'
101
+ version: '$1'
102
+
78
103
  - regex: 'RazoDroiD(?: v(\d+[\.\d]*))?'
79
104
  name: 'RazoDroiD'
80
105
  version: '$1'
@@ -95,15 +120,62 @@
95
120
  name: 'Fire OS'
96
121
  version: '$1'
97
122
 
123
+ - regex: '.+FIRETVSTICK2018'
124
+ name: 'Fire OS'
125
+ version: '6'
126
+
127
+ - regex: 'AFTSO001'
128
+ name: 'Fire OS'
129
+ version: '7'
130
+
131
+ - regex: 'FydeOS'
132
+ name: 'FydeOS'
133
+ version: ''
134
+
98
135
  ##########
99
136
  # Android
100
137
  ##########
101
- - regex: '(?:(?:Orca-)?Android|Adr)[ /](?:[a-z]+ )?(\d+[\.\d]*)'
138
+ - regex: 'Android Marshmallow'
139
+ name: 'Android'
140
+ version: '6'
141
+
142
+ - regex: '(?:Podbean|Podimo)(?:.*)/Android'
143
+ name: 'Android'
144
+ version: ''
145
+
146
+ - regex: 'Android OS/(\d+[\.\d]*)'
102
147
  name: 'Android'
103
148
  version: '$1'
104
-
105
-
106
- - regex: 'Android|Silk-Accelerated=[a-z]{4,5}'
149
+
150
+ - regex: 'Pinterest for Android/.*; (\d(?:[\d\.]*))\)$'
151
+ name: 'Android'
152
+ version: '$1'
153
+
154
+ - regex: 'Android; (\d+[\.\d]*); Mobile;'
155
+ name: 'Android'
156
+ version: '$1'
157
+
158
+ - regex: '[ ]([\d\.]+)\) AppleWebKit.*ROBLOX Android App'
159
+ name: 'Android'
160
+ version: '$1'
161
+
162
+ - regex: '(?:(?:Orca-)?Android|Adr)[ /]?(?:[a-z]+ )?(\d+[\.\d]*)'
163
+ name: 'Android'
164
+ version: '$1'
165
+
166
+ - regex: '(?:Allview_TX1_Quasar|Cosmote_My_mini_Tab) (\d+[\.\d]*)'
167
+ name: 'Android'
168
+ version: '$1'
169
+
170
+ - regex: 'Android ?(?:jelly bean|Kit Kat|S.O. Ginger Bread|The FireCyano|:) (\d+[\.\d]*)'
171
+ name: 'Android'
172
+ version: '$1'
173
+
174
+ - regex: '(?:Orca-Android|FB4A).*FBSV/(\d+[\.\d]*);'
175
+ name: 'Android'
176
+ version: '$1'
177
+
178
+ - regex: ' Adr |Android|Silk-Accelerated=[a-z]{4,5}'
107
179
  name: 'Android'
108
180
  version: ''
109
181
 
@@ -111,11 +183,30 @@
111
183
  name: 'Android'
112
184
  version: '$1'
113
185
 
114
- - regex: 'BeyondPod|AntennaPod|Podkicker|DoggCatcher|Player FM|okhttp|Podcatcher Deluxe'
186
+ - regex: 'BeyondPod|AntennaPod|Podkicker|DoggCatcher|Player FM|okhttp|Podcatcher Deluxe|.+K_?Android_?TV_|Sonos/.+\(ACR_'
187
+ name: 'Android'
188
+ version: ''
189
+
190
+ - regex: 'Linux; Andr0id[; ](\d+[\.\d]*)'
191
+ name: 'Android'
192
+ version: '$1'
193
+
194
+ # Inverted Android
195
+ - regex: 'Linux; diordnA[; ](\d+[\.\d]*)'
115
196
  name: 'Android'
197
+ version: '$1'
198
+
199
+ - regex: '^A/(\d+[\.\d]*)/'
200
+ name: 'Android'
201
+ version: '$1'
202
+
203
+ ##########
204
+ ## Sailfish OS
205
+ ###########
206
+ - regex: 'Sailfish|Jolla'
207
+ name: 'Sailfish OS'
116
208
  version: ''
117
-
118
-
209
+
119
210
  ##########
120
211
  # AmigaOS
121
212
  ##########
@@ -144,9 +235,67 @@
144
235
  name: 'MTK / Nucleus'
145
236
  version: '$1'
146
237
 
238
+ ##########
239
+ # MRE / MAUI Runtime Environment
240
+ ##########
241
+ - regex: 'MRE/(\d+)\.(\d+).*;MAUI'
242
+ name: 'MRE'
243
+ version: '$1.$2'
244
+
147
245
  ##########
148
246
  # Linux
149
247
  ##########
248
+ # OpenWrt (https://openwrt.org/)
249
+ - regex: 'uclient-fetch'
250
+ name: 'OpenWrt'
251
+ version: ''
252
+
253
+ # Roku OS (https://www.roku.com/how-it-works/roku-os)
254
+ - regex: 'RokuOS/.+RokuOS (\d+.[\d.]+)'
255
+ name: 'Roku OS'
256
+ version: '$1'
257
+
258
+ - regex: 'Roku(?:OS)?/(?:DVP|Pluto)?-?(\d+[\.\d]+)'
259
+ name: 'Roku OS'
260
+ version: '$1'
261
+
262
+ - regex: 'Roku; (?:AP|UI); (\d+[\.\d]+)'
263
+ name: 'Roku OS'
264
+ version: '$1'
265
+
266
+ # DVKBuntu (https://www.dvkbuntu.org/)
267
+ - regex: 'dvkbuntu'
268
+ name: 'DVKBuntu'
269
+ version: ''
270
+
271
+ # Lumin OS (https://developer.magicleap.com/en-us/learn/guides/lumin-os-release-notes-summary)
272
+ - regex: 'Helio/(\d+[\.\d]+)'
273
+ name: 'Lumin OS'
274
+ version: '$1'
275
+
276
+ # HasCodingOS (https://forum.hascoding.com/HasCodingOS)
277
+ - regex: 'HasCodingOs (\d+[\.\d]+)'
278
+ name: 'HasCodingOS'
279
+ version: '$1'
280
+
281
+ # PCLinuxOS (https://www.pclinuxos.com/)
282
+ - regex: 'PCLinuxOS/(\d+[\.\d]+)'
283
+ name: 'PCLinuxOS'
284
+ version: '$1'
285
+
286
+ - regex: '(Ordissimo|webissimo3)'
287
+ name: 'Ordissimo'
288
+ version: ''
289
+
290
+ # Fenix (https://fenixlinux.com/)
291
+ - regex: '(?:Win|Sistema )Fenix'
292
+ name: 'Fenix'
293
+ version: ''
294
+
295
+ - regex: 'TOS; Linux'
296
+ name: 'TmaxOS'
297
+ version: ''
298
+
150
299
  - regex: 'Maemo'
151
300
  name: 'Maemo'
152
301
  version: ''
@@ -163,18 +312,39 @@
163
312
  name: '$1'
164
313
  version: '$2'
165
314
 
166
- - regex: '(Debian|Knoppix|Mint|Ubuntu|Kubuntu|Xubuntu|Lubuntu|Fedora|Red Hat|Mandriva|Gentoo|Sabayon|Slackware|SUSE|CentOS|BackTrack)(?:(?: Enterprise)? Linux)?(?:[ /\-](\d+[\.\d]+))?'
315
+ - regex: 'Deepin[ /](\d+[\.\d]+)'
316
+ name: 'Deepin'
317
+ version: '$1'
318
+
319
+ - regex: '(Debian|Knoppix|Mint(?! Browser)|Ubuntu|Kubuntu|Xubuntu|Lubuntu|Fedora|Red Hat|Mandriva|Gentoo|Sabayon|Slackware|SUSE|CentOS|BackTrack|Freebox)(?:(?: Enterprise)? Linux)?(?:[ /\-](\d+[\.\d]+))?'
167
320
  name: '$1'
168
321
  version: '$2'
169
322
 
323
+ - regex: 'OS ROSA; Linux'
324
+ name: 'Rosa'
325
+ version: ''
326
+
170
327
  # generic linux match -> end of file
171
328
 
172
329
  ##########
173
330
  # webOS
174
331
  ##########
175
- - regex: '(?:webOS|Palm webOS)(?:/(\d+[\.\d]+))?'
332
+ - regex: '(?:Web0S; .*WEBOS|webOS|web0S|Palm webOS|hpwOS)(?:[/]?(\d+[\.\d]+))?'
176
333
  name: 'webOS'
177
334
  version: '$1'
335
+ versions:
336
+ - regex: 'WEBOS(\d+[\.\d]+)'
337
+ version: '$1'
338
+ - regex: 'Web0S; Linux/SmartTV.+Chrome/68'
339
+ version: '5'
340
+ - regex: 'Web0S; Linux/SmartTV.+Chrome/53'
341
+ version: '4'
342
+ - regex: 'Web0S; Linux/SmartTV.+Chrome/38'
343
+ version: '3'
344
+ - regex: 'Web0S; Linux/SmartTV.+Safari/538'
345
+ version: '2'
346
+ - regex: 'Web0S; Linux/SmartTV.+Safari/537'
347
+ version: '1'
178
348
 
179
349
  - regex: '(?:PalmOS|Palm OS)(?:[/ ](\d+[\.\d]+))?|Palm'
180
350
  name: 'palmOS'
@@ -184,88 +354,94 @@
184
354
  name: 'palmOS'
185
355
  version: '$1'
186
356
 
187
-
188
357
  - regex: 'MorphOS(?:[ /](\d+[\.\d]+))?'
189
358
  name: 'MorphOS'
190
359
  version: '$1'
191
360
 
192
-
361
+
193
362
  ##########
194
363
  # Windows
195
364
  ##########
365
+ - regex: 'FBW.+FBSV/(\d+[\.\d]*);'
366
+ name: 'Windows'
367
+ version: '$1'
368
+
369
+ - regex: 'Windows.+OS: (\d+[\.\d]*)'
370
+ name: 'Windows'
371
+ version: '$1'
372
+
373
+ - regex: 'Windows;(\d+[\.\d]*);'
374
+ name: 'Windows'
375
+ version: '$1'
376
+
377
+ - regex: 'mingw32|winhttp'
378
+ name: 'Windows'
379
+ version: ''
380
+
381
+ - regex: '(?:Windows(?:-Update-Agent)?|Microsoft-(?:CryptoAPI|Delivery-Optimization|WebDAV-MiniRedir|WNS))/(\d+\.\d+)'
382
+ name: 'Windows'
383
+ version: '$1'
384
+
196
385
  - regex: 'CYGWIN_NT-10.0|Windows NT 10.0|Windows 10'
197
386
  name: 'Windows'
198
387
  version: '10'
199
388
 
200
- - regex: 'CYGWIN_NT-6.4|Windows NT 6.4|Windows 10'
389
+ - regex: 'CYGWIN_NT-6.4|Windows NT 6.4|Windows 10|win10'
201
390
  name: 'Windows'
202
391
  version: '10'
203
-
392
+
204
393
  - regex: 'CYGWIN_NT-6.3|Windows NT 6.3|Windows 8.1'
205
394
  name: 'Windows'
206
395
  version: '8.1'
207
396
 
208
-
209
397
  - regex: 'CYGWIN_NT-6.2|Windows NT 6.2|Windows 8'
210
398
  name: 'Windows'
211
399
  version: '8'
212
-
213
-
214
- - regex: 'CYGWIN_NT-6.1|Windows NT 6.1|Windows 7'
400
+
401
+ - regex: 'CYGWIN_NT-6.1|Windows NT 6.1|Windows 7|win7|Windows \(6.1'
215
402
  name: 'Windows'
216
403
  version: '7'
217
-
218
-
404
+
219
405
  - regex: 'CYGWIN_NT-6.0|Windows NT 6.0|Windows Vista'
220
406
  name: 'Windows'
221
407
  version: 'Vista'
222
-
223
-
408
+
224
409
  - regex: 'CYGWIN_NT-5.2|Windows NT 5.2|Windows Server 2003 / XP x64'
225
410
  name: 'Windows'
226
411
  version: 'Server 2003'
227
-
228
-
412
+
229
413
  - regex: 'CYGWIN_NT-5.1|Windows NT 5.1|Windows XP'
230
414
  name: 'Windows'
231
415
  version: 'XP'
232
-
233
-
416
+
234
417
  - regex: 'CYGWIN_NT-5.0|Windows NT 5.0|Windows 2000'
235
418
  name: 'Windows'
236
419
  version: '2000'
237
-
238
-
420
+
239
421
  - regex: 'CYGWIN_NT-4.0|Windows NT 4.0|WinNT|Windows NT'
240
422
  name: 'Windows'
241
423
  version: 'NT'
242
-
243
-
424
+
244
425
  - regex: 'CYGWIN_ME-4.90|Win 9x 4.90|Windows ME'
245
426
  name: 'Windows'
246
427
  version: 'ME'
247
-
248
-
428
+
249
429
  - regex: 'CYGWIN_98-4.10|Win98|Windows 98'
250
430
  name: 'Windows'
251
431
  version: '98'
252
-
253
-
432
+
254
433
  - regex: 'CYGWIN_95-4.0|Win32|Win95|Windows 95|Windows_95'
255
434
  name: 'Windows'
256
435
  version: '95'
257
-
258
-
436
+
259
437
  - regex: 'Windows 3.1'
260
438
  name: 'Windows'
261
439
  version: '3.1'
262
-
263
-
264
- - regex: 'Windows'
440
+
441
+ - regex: 'Windows|.+win32|Win64|MSDW|HandBrake Win Upd|Microsoft BITS'
265
442
  name: 'Windows'
266
443
  version: ''
267
444
 
268
-
269
445
  ##########
270
446
  # Haiku OS
271
447
  ##########
@@ -273,257 +449,472 @@
273
449
  name: 'Haiku OS'
274
450
  version: ''
275
451
 
276
-
277
452
  ##########
278
- # iOS
453
+ # tvOS (https://developer.apple.com/tvos/)
279
454
  ##########
280
- - regex: 'CFNetwork/889'
281
- name: 'iOS'
282
- version: '11.1'
283
-
284
- - regex: 'CFNetwork/887.*(x86_64)'
285
- name: 'Mac'
286
- version: '10.13'
287
-
288
- - regex: 'CFNetwork/887'
289
- name: 'iOS'
290
- version: '11.0'
291
-
292
- - regex: 'CFNetwork/811.*(x86_64)'
293
- name: 'Mac'
294
- version: '10.12'
295
-
296
- - regex: 'CFNetwork/811'
297
- name: 'iOS'
298
- version: '10.3'
299
-
300
- - regex: 'CFNetwork/808\.3'
301
- name: 'iOS'
302
- version: '10.3'
455
+ - regex: 'Apple ?TV.*CPU (?:iPhone )?OS ((?:9|1[0-5])[_\.]\d+(?:[_.]\d+)*)'
456
+ name: 'tvOS'
457
+ version: '$1'
303
458
 
304
- - regex: 'CFNetwork/808\.2'
305
- name: 'iOS'
306
- version: '10.2'
459
+ - regex: 'iOS(?:; |/)((?:9|1[0-5]).\d+(?:[_\.]\d+)*) (?:model/)?AppleTV'
460
+ name: 'tvOS'
461
+ version: '$1'
307
462
 
308
- - regex: 'CFNetwork/808\.1'
309
- name: 'iOS'
310
- version: '10.1'
463
+ ##########
464
+ # watchOS (https://developer.apple.com/watchos/)
465
+ ##########
466
+ - regex: '(?:Watch1,[12]/|Watch OS,|watchOS[ /])(\d+[\.\d]*)'
467
+ name: 'watchOS'
468
+ version: '$1'
311
469
 
312
- - regex: 'CFNetwork/808\.0'
313
- name: 'iOS'
314
- version: '10.0'
470
+ ##########
471
+ # iPadOS (https://www.apple.com/ipados/)
472
+ ##########
473
+ - regex: 'FBMD/iPad;.*FBSV/ ?(1[345]).(\d+[\.\d]*);'
474
+ name: 'iPadOS'
475
+ version: '$1.$2'
315
476
 
316
- - regex: 'CFNetwork/808'
317
- name: 'iOS'
318
- version: '10'
477
+ - regex: 'iPad/(1[345]).(\d+[\.\d]*)'
478
+ name: 'iPadOS'
479
+ version: '$1.$2'
319
480
 
320
- - regex: 'CFNetwork/758\.4\.3'
321
- name: 'iOS'
322
- version: '9.3.2'
481
+ - regex: '^iPad(?:\d+[\,\d]*)/(1[345]).(\d+[\.\d]*)'
482
+ name: 'iPadOS'
483
+ version: '$1.$2'
323
484
 
324
- - regex: 'CFNetwork/758\.3\.15'
325
- name: 'iOS'
326
- version: '9.3'
485
+ - regex: 'iPad(?:; iOS|.+CPU OS) ((1[345])+(?:[_\.]\d+)*)'
486
+ name: 'iPadOS'
487
+ version: '$1'
327
488
 
328
- - regex: 'CFNetwork/758\.2\.[78]'
329
- name: 'iOS'
330
- version: '9.2'
489
+ - regex: 'iOS/(1[345]).(\d+[\.\d]*).+Apple/iPad'
490
+ name: 'iPadOS'
491
+ version: '$1.$2'
331
492
 
332
- - regex: 'CFNetwork/758\.1\.6'
333
- name: 'iOS'
334
- version: '9.1'
493
+ - regex: 'iPhone OS,(1[345]).(\d+[\.\d]*).+iPad'
494
+ name: 'iPadOS'
495
+ version: '$1.$2'
335
496
 
336
- - regex: 'CFNetwork/758\.0\.2'
497
+ ##########
498
+ # iOS
499
+ ##########
500
+ - regex: 'iPad/([89]|1[012]).(\d+[\.\d]*)'
337
501
  name: 'iOS'
338
- version: '9.0'
502
+ version: '$1.$2'
339
503
 
340
- - regex: 'CFNetwork/711\.5\.6'
504
+ - regex: '^(?:iPad|iPhone)(?:\d+[\,\d]*)[/_](\d+[\.\d]+)'
341
505
  name: 'iOS'
342
- version: '8.4.1'
506
+ version: '$1'
343
507
 
344
- - regex: 'CFNetwork/711\.4\.6'
508
+ - regex: 'Pinterest for iOS/.*; (\d(?:[\d\.]*))[)]$'
345
509
  name: 'iOS'
346
- version: '8.4'
510
+ version: '$1'
347
511
 
348
- - regex: 'CFNetwork/711\.3\.18'
512
+ - regex: '(?:iPhone ?OS|iOS(?: Version)?)(?:/|; |,)(\d+[\.\d]+)'
349
513
  name: 'iOS'
350
- version: '8.3'
514
+ version: '$1'
351
515
 
352
- - regex: 'CFNetwork/711\.2\.23'
516
+ - regex: 'CFNetwork/.+ Darwin/(\d+[\.\d]+)(?!.*(?:x86_64|i386|PowerMac))'
353
517
  name: 'iOS'
354
- version: '8.2'
355
-
356
- - regex: 'CFNetwork/711\.1\.1[26]'
518
+ versions:
519
+ - regex: 'Darwin/21.2.0'
520
+ version: '15.2'
521
+ - regex: 'Darwin/21.1.0'
522
+ version: '15.1'
523
+ - regex: 'Darwin/21.0.0'
524
+ version: '15.0'
525
+ - regex: 'Darwin/20.6.0'
526
+ version: '14.7'
527
+ - regex: 'Darwin/20.5.0'
528
+ version: '14.6'
529
+ - regex: 'Darwin/20.4.0'
530
+ version: '14.5'
531
+ - regex: 'Darwin/20.3.0'
532
+ version: '14.4'
533
+ - regex: 'Darwin/20.2.0'
534
+ version: '14.3'
535
+ - regex: 'Darwin/20.1.0'
536
+ version: '14.2'
537
+ - regex: 'Darwin/20.0.0'
538
+ version: '14.0'
539
+ - regex: 'Darwin/19.6.0'
540
+ version: '13.6'
541
+ - regex: 'Darwin/19.5.0'
542
+ version: '13.5'
543
+ - regex: 'Darwin/19.4.0'
544
+ version: '13.4'
545
+ - regex: 'Darwin/19.3.0'
546
+ version: '13.3.1'
547
+ - regex: 'Darwin/19.2.0'
548
+ version: '13.3'
549
+ - regex: 'Darwin/19.0.0'
550
+ version: '13.0'
551
+ - regex: 'Darwin/18.7.0'
552
+ version: '12.4'
553
+ - regex: 'Darwin/18.6.0'
554
+ version: '12.3'
555
+ - regex: 'Darwin/18.5.0'
556
+ version: '12.2'
557
+ - regex: 'Darwin/18.2.0'
558
+ version: '12.1'
559
+ - regex: 'Darwin/18.0.0'
560
+ version: '12.0'
561
+ - regex: 'Darwin/17.7.0'
562
+ version: '11.4.1'
563
+ - regex: 'Darwin/17.6.0'
564
+ version: '11.4'
565
+ - regex: 'Darwin/17.5.0'
566
+ version: '11.3'
567
+ - regex: 'Darwin/17.4.0'
568
+ version: '11.2.6'
569
+ - regex: 'Darwin/17.3.0'
570
+ version: '11.2'
571
+ - regex: 'CFNetwork/889'
572
+ version: '11.1'
573
+ - regex: 'CFNetwork/887'
574
+ version: '11.0'
575
+ - regex: 'CFNetwork/811'
576
+ version: '10.3'
577
+ - regex: 'CFNetwork/808\.3'
578
+ version: '10.3'
579
+ - regex: 'CFNetwork/808\.2'
580
+ version: '10.2'
581
+ - regex: 'CFNetwork/808\.1'
582
+ version: '10.1'
583
+ - regex: 'CFNetwork/808\.0'
584
+ version: '10.0'
585
+ - regex: 'CFNetwork/808'
586
+ version: '10'
587
+ - regex: 'CFNetwork/758\.5\.3'
588
+ version: '9.3.5'
589
+ - regex: 'CFNetwork/758\.4\.3'
590
+ version: '9.3.2'
591
+ - regex: 'CFNetwork/758\.3\.15'
592
+ version: '9.3'
593
+ - regex: 'CFNetwork/758\.2\.[78]'
594
+ version: '9.2'
595
+ - regex: 'CFNetwork/758\.1\.6'
596
+ version: '9.1'
597
+ - regex: 'CFNetwork/758\.0\.2'
598
+ version: '9.0'
599
+ - regex: 'CFNetwork/711\.5\.6'
600
+ version: '8.4.1'
601
+ - regex: 'CFNetwork/711\.4\.6'
602
+ version: '8.4'
603
+ - regex: 'CFNetwork/711\.3\.18'
604
+ version: '8.3'
605
+ - regex: 'CFNetwork/711\.2\.23'
606
+ version: '8.2'
607
+ - regex: 'CFNetwork/711\.1\.1[26]'
608
+ version: '8.1'
609
+ - regex: 'CFNetwork/711\.0\.6'
610
+ version: '8.0'
611
+ - regex: 'CFNetwork/672\.1'
612
+ version: '7.1'
613
+ - regex: 'CFNetwork/672\.0'
614
+ version: '7.0'
615
+ - regex: 'CFNetwork/609\.1'
616
+ version: '6.1'
617
+ - regex: 'CFNetwork/60[29]'
618
+ version: '6.0'
619
+ - regex: 'CFNetwork/548\.1'
620
+ version: '5.1'
621
+ - regex: 'CFNetwork/548\.0'
622
+ version: '5.0'
623
+ - regex: 'CFNetwork/485\.13'
624
+ version: '4.3'
625
+ - regex: 'CFNetwork/485\.12'
626
+ version: '4.2'
627
+ - regex: 'CFNetwork/485\.10'
628
+ version: '4.1'
629
+ - regex: 'CFNetwork/485\.2'
630
+ version: '4.0'
631
+ - regex: 'CFNetwork/467\.12'
632
+ version: '3.2'
633
+ - regex: 'CFNetwork/459'
634
+ version: '3.1'
635
+
636
+ - regex: '(?:iPhone|iPod_touch)/(\d+[\.\d]*) hw/'
357
637
  name: 'iOS'
358
- version: '8.1'
638
+ version: '$1'
359
639
 
360
- - regex: 'CFNetwork/711\.0\.6'
640
+ - regex: 'iOS(\d+\.\d+\.\d+)'
361
641
  name: 'iOS'
362
- version: '8.0'
642
+ version: '$1'
363
643
 
364
- - regex: 'CFNetwork/672\.1'
644
+ - regex: 'iOS(\d+)\.(\d+)0'
365
645
  name: 'iOS'
366
- version: '7.1'
646
+ version: '$1.$2'
367
647
 
368
- - regex: 'CFNetwork/672\.0'
648
+ - regex: 'iPhone OS ([0-9]{1})([0-9]{1})([0-9]{1})'
369
649
  name: 'iOS'
370
- version: '7.0'
650
+ version: '$1.$2.$3'
371
651
 
372
- - regex: 'CFNetwork/609\.1'
652
+ - regex: '(?:CPU OS|iPh(?:one)?[ _]OS|iOS)[ _/](\d+(?:[_\.]\d+)*)'
373
653
  name: 'iOS'
374
- version: '6.1'
654
+ version: '$1'
375
655
 
376
- - regex: 'CFNetwork/60[29]'
656
+ - regex: 'FBMD/iPhone;.*FBSV/ ?(\d+[\.\d]+);'
377
657
  name: 'iOS'
378
- version: '6.0'
658
+ version: '$1'
379
659
 
380
- - regex: 'CFNetwork/548\.1'
660
+ - regex: '(?:FBIOS|Messenger(?:Lite)?ForiOS).*FBSV/ ?(\d+[\.\d]*);'
381
661
  name: 'iOS'
382
- version: '5.1'
662
+ version: '$1'
383
663
 
384
- - regex: 'CFNetwork/548\.0'
664
+ - regex: 'iPhone OS,([\d\.]+).+(?:iPhone|iPod)'
385
665
  name: 'iOS'
386
- version: '5.0'
666
+ version: '$1'
387
667
 
388
- - regex: 'CFNetwork/485\.13'
668
+ - regex: 'iPad.+; (\d+[\.\d]+);'
389
669
  name: 'iOS'
390
- version: '4.3'
670
+ version: '$1'
391
671
 
392
- - regex: 'CFNetwork/485\.12'
672
+ - regex: 'iPhone.+; Version (\d+[\.\d]+)'
393
673
  name: 'iOS'
394
- version: '4.2'
674
+ version: '$1'
395
675
 
396
- - regex: 'CFNetwork/485\.10'
676
+ - regex: 'OS=iOS;OSVer=(\d+[\.\d]+);'
397
677
  name: 'iOS'
398
- version: '4.1'
678
+ version: '$1'
399
679
 
400
- - regex: 'CFNetwork/485\.2'
680
+ - regex: 'os=Apple-iOS.+osversion=(\d+[\.\d]+)/'
401
681
  name: 'iOS'
402
- version: '4.0'
682
+ version: '$1'
403
683
 
404
- - regex: 'CFNetwork/467\.12'
684
+ - regex: '(?:Apple-)?(?:iPhone|iPad|iPod)(?:.*Mac OS X.*Version/(\d+\.\d+)|; Opera)?'
405
685
  name: 'iOS'
406
- version: '3.2'
686
+ version: '$1'
407
687
 
408
- - regex: 'CFNetwork/459'
688
+ - regex: '(?:Podcasts/(?:[\d\.]+)|Instacast(?:HD)?/(?:\d\.[\d\.abc]+)|Pocket Casts, iOS|\(iOS\)|iOS; Opera|Overcast|Castro|Podcat|iCatcher|RSSRadio/|MobileSafari/)(?!.*x86_64)'
409
689
  name: 'iOS'
410
- version: '3.1'
690
+ version: ''
411
691
 
412
- - regex: '(?:CPU OS|iPh(?:one)?[ _]OS|iOS)[ _/](\d+(?:[_\.]\d+)*)'
692
+ - regex: 'iTunes-(AppleTV|iPod|iPad|iPhone)/(?:[\d\.]+)'
413
693
  name: 'iOS'
414
- version: '$1'
694
+ version: ''
415
695
 
416
- - regex: '(?:Apple-)?(?:iPhone|iPad|iPod)(?:.*Mac OS X.*Version/(\d+\.\d+)|; Opera)?'
696
+ - regex: 'iOS/Version ([\d\.]+)'
417
697
  name: 'iOS'
418
698
  version: '$1'
419
699
 
420
- - regex: 'Podcasts/(?:[\d\.]+)|Instacast(?:HD)?/(?:\d\.[\d\.abc]+)|Pocket Casts, iOS|Overcast|Castro|Podcat|i[cC]atcher|RSSRadio/'
700
+ - regex: 'Sonos/.+\(ICRU_'
421
701
  name: 'iOS'
422
702
  version: ''
423
703
 
424
- - regex: 'iTunes-(iPod|iPad|iPhone)/(?:[\d\.]+)'
704
+ - regex: 'CaptiveNetworkSupport|AirPlay'
425
705
  name: 'iOS'
426
706
  version: ''
427
707
 
428
-
429
708
  ##########
430
709
  # Mac
431
710
  ##########
432
-
433
- - regex: 'CFNetwork/807'
711
+ - regex: 'CFNetwork/.+ Darwin/(?:[\d\.]+).+(?:x86_64|i386)|(?:x86_64-apple-)?darwin(?:[\d\.]+)|PowerMac'
434
712
  name: 'Mac'
435
- version: '10.12'
436
-
437
- - regex: 'CFNetwork/760'
438
- name: 'Mac'
439
- version: '10.11'
440
-
441
- - regex: 'CFNetwork/720'
442
- name: 'Mac'
443
- version: '10.10'
444
-
445
- - regex: 'CFNetwork/673'
446
- name: 'Mac'
447
- version: '10.9'
448
-
449
- - regex: 'CFNetwork/596'
713
+ versions:
714
+ - regex: '(?:x86_64-apple-)?Darwin/?21.2.0'
715
+ version: '12.1'
716
+ - regex: '(?:x86_64-apple-)?Darwin/?21.1.0'
717
+ version: '12.0.1'
718
+ - regex: '(?:x86_64-apple-)?Darwin/?21.0.0'
719
+ version: '12.0'
720
+ - regex: '(?:x86_64-apple-)?Darwin/?20.6.0'
721
+ version: '11.5'
722
+ - regex: '(?:x86_64-apple-)?Darwin/?20.5.0'
723
+ version: '11.4'
724
+ - regex: '(?:x86_64-apple-)?Darwin/?20.4.0'
725
+ version: '11.3'
726
+ - regex: '(?:x86_64-apple-)?Darwin/?20.3.0'
727
+ version: '11.2'
728
+ - regex: '(?:x86_64-apple-)?Darwin/?20.2.0.*'
729
+ version: '11.1'
730
+ - regex: '(?:x86_64-apple-)?Darwin/?20.[01].0'
731
+ version: '11.0'
732
+ - regex: '(?:x86_64-apple-)?Darwin/?19.6.0'
733
+ version: '10.15.6'
734
+ - regex: '(?:x86_64-apple-)?Darwin/?19.5.0'
735
+ version: '10.15.5'
736
+ - regex: '(?:x86_64-apple-)?Darwin/?19.4.0'
737
+ version: '10.15.4'
738
+ - regex: '(?:x86_64-apple-)?Darwin/?19.3.0'
739
+ version: '10.15.3'
740
+ - regex: '(?:x86_64-apple-)?Darwin/?19.2.0'
741
+ version: '10.15.2'
742
+ - regex: '(?:x86_64-apple-)?Darwin/?19.0.0'
743
+ version: '10.15'
744
+ - regex: '(?:x86_64-apple-)?Darwin/?18.7.0'
745
+ version: '10.14'
746
+ - regex: '(?:x86_64-apple-)?Darwin/?18.6.0'
747
+ version: '10.14.5'
748
+ - regex: '(?:x86_64-apple-)?Darwin/?18.5.0'
749
+ version: '10.14.4'
750
+ - regex: '(?:x86_64-apple-)?Darwin/?18.2.0'
751
+ version: '10.14.1'
752
+ - regex: '(?:x86_64-apple-)?Darwin/?18.0.0'
753
+ version: '10.14'
754
+ - regex: '(?:x86_64-apple-)?Darwin/?17.7.0'
755
+ version: '10.13.6'
756
+ - regex: '(?:x86_64-apple-)?Darwin/?17.6.0'
757
+ version: '10.13.5'
758
+ - regex: '(?:x86_64-apple-)?Darwin/?17.5.0'
759
+ version: '10.13.4'
760
+ - regex: '(?:x86_64-apple-)?Darwin/?17.4.0'
761
+ version: '10.13.3'
762
+ - regex: '(?:x86_64-apple-)?Darwin/?17.3.0'
763
+ version: '10.13.2'
764
+ - regex: '(?:x86_64-apple-)?Darwin/?17.2.0'
765
+ version: '10.13.1'
766
+ - regex: '(?:x86_64-apple-)?Darwin/?17.0.0'
767
+ version: '10.13'
768
+ - regex: '(?:x86_64-apple-)?Darwin/?16.7.0'
769
+ version: '10.12.6'
770
+ - regex: '(?:x86_64-apple-)?Darwin/?16.6.0'
771
+ version: '10.12.5'
772
+ - regex: '(?:x86_64-apple-)?Darwin/?16.5.0'
773
+ version: '10.12.4'
774
+ - regex: '(?:x86_64-apple-)?Darwin/?16.4.0'
775
+ version: '10.12.3'
776
+ - regex: '(?:x86_64-apple-)?Darwin/?16.3.0'
777
+ version: '10.12.2'
778
+ - regex: '(?:x86_64-apple-)?Darwin/?16.2.0'
779
+ version: '10.12.2'
780
+ - regex: '(?:x86_64-apple-)?Darwin/?16.1.0'
781
+ version: '10.12.1'
782
+ - regex: '(?:x86_64-apple-)?Darwin/?16.0.0'
783
+ version: '10.12'
784
+ - regex: '(?:x86_64-apple-)?Darwin/?15.6.0'
785
+ version: '10.11.6'
786
+ - regex: '(?:x86_64-apple-)?Darwin/?15.5.0'
787
+ version: '10.11.5'
788
+ - regex: '(?:x86_64-apple-)?Darwin/?15.4.0'
789
+ version: '10.11.4'
790
+ - regex: '(?:x86_64-apple-)?Darwin/?15.3.0'
791
+ version: '10.11.3'
792
+ - regex: '(?:x86_64-apple-)?Darwin/?15.2.0'
793
+ version: '10.11.2'
794
+ - regex: 'CFNetwork/760'
795
+ version: '10.11'
796
+ - regex: '(?:x86_64-apple-)?Darwin/?14.5.0'
797
+ version: '10.10.5'
798
+ - regex: '(?:x86_64-apple-)?Darwin/?14.4.0'
799
+ version: '10.10.4'
800
+ - regex: '(?:x86_64-apple-)?Darwin/?14.3.0'
801
+ version: '10.10.3'
802
+ - regex: '(?:x86_64-apple-)?Darwin/?14.1.0'
803
+ version: '10.10.2'
804
+ - regex: '(?:x86_64-apple-)?Darwin/?14.0.0'
805
+ version: '10.10'
806
+ - regex: '(?:x86_64-apple-)?Darwin/?13.4.0'
807
+ version: '10.9.5'
808
+ - regex: '(?:x86_64-apple-)?Darwin/?13.3.0'
809
+ version: '10.9.4'
810
+ - regex: '(?:x86_64-apple-)?Darwin/?13.2.0'
811
+ version: '10.9.3'
812
+ - regex: '(?:x86_64-apple-)?Darwin/?13.1.0'
813
+ version: '10.9.2'
814
+ - regex: '(?:x86_64-apple-)?Darwin/?13.0.0'
815
+ version: '10.9.0'
816
+ - regex: '(?:x86_64-apple-)?Darwin/?12.6.0'
817
+ version: '10.8.5'
818
+ - regex: '(?:x86_64-apple-)?Darwin/?12.5.0'
819
+ version: '10.8.5'
820
+ - regex: '(?:x86_64-apple-)?Darwin/?12.4.0'
821
+ version: '10.8.4'
822
+ - regex: '(?:x86_64-apple-)?Darwin/?12.3.0'
823
+ version: '10.8.3'
824
+ - regex: '(?:x86_64-apple-)?Darwin/?12.2.0'
825
+ version: '10.8.2'
826
+ - regex: '(?:x86_64-apple-)?Darwin/?12.1.0'
827
+ version: '10.8.1'
828
+ - regex: '(?:x86_64-apple-)?Darwin/?11.5.0'
829
+ version: '10.7.5'
830
+ - regex: '(?:x86_64-apple-)?Darwin/?11.4.2'
831
+ version: '10.7.5'
832
+ - regex: '(?:x86_64-apple-)?Darwin/?11.4.0'
833
+ version: '10.7.4'
834
+ - regex: '(?:x86_64-apple-)?Darwin/?11.3.0'
835
+ version: '10.7.3'
836
+ - regex: '(?:x86_64-apple-)?Darwin/?11.2.0'
837
+ version: '10.7.2'
838
+ - regex: '(?:x86_64-apple-)?Darwin/?11.1.0'
839
+ version: '10.7.1'
840
+ - regex: '(?:x86_64-apple-)?Darwin/?10.8.0'
841
+ version: '10.6.8'
842
+ - regex: '(?:x86_64-apple-)?Darwin/?10.7.[34]'
843
+ version: '10.6.7'
844
+ - regex: '(?:x86_64-apple-)?Darwin/?10.3.0'
845
+ version: '10.6.3'
846
+ - regex: '(?:x86_64-apple-)?Darwin/?10.0.0'
847
+ version: '10.6'
848
+ - regex: '(?:x86_64-apple-)?Darwin/?9.8.0'
849
+ version: '10.5.8'
850
+ - regex: '(?:x86_64-apple-)?Darwin/?9.7.1'
851
+ version: '10.5.7'
852
+ - regex: '(?:x86_64-apple-)?Darwin/?9.6.2'
853
+ version: '10.5.6'
854
+ - regex: '(?:x86_64-apple-)?Darwin/?9.5.[05]'
855
+ version: '10.5.5'
856
+
857
+ - regex: 'Macintosh;Mac OS X \((\d+[\.\d]+)\);'
450
858
  name: 'Mac'
451
- version: '10.8'
452
-
453
- - regex: 'CFNetwork/520'
454
- name: 'Mac'
455
- version: '10.7'
859
+ version: '$1'
456
860
 
457
- - regex: 'CFNetwork/454'
861
+ - regex: 'Mac[ +]OS[ +]?X(?:[ /,](?:Version )?(\d+(?:[_\.]\d+)+))?'
458
862
  name: 'Mac'
459
- version: '10.6'
863
+ version: '$1'
460
864
 
461
- - regex: 'CFNetwork/(?:438|422|339|330|221|220|217)'
865
+ - regex: 'Mac (?:OS/)?(\d+(?:[_\.]\d+)+)'
462
866
  name: 'Mac'
463
- version: '10.5'
867
+ version: '$1'
464
868
 
465
- - regex: 'CFNetwork/12[89]'
869
+ - regex: '(?:macOS[/,]|Mac-)(\d+[\.\d]+)'
466
870
  name: 'Mac'
467
- version: '10.4'
871
+ version: '$1'
468
872
 
469
- - regex: 'CFNetwork/1\.2'
873
+ - regex: 'Macintosh; OS X (\d+[\.\d]+)'
470
874
  name: 'Mac'
471
- version: '10.3'
875
+ version: '$1'
472
876
 
473
- - regex: 'CFNetwork/1\.1'
877
+ - regex: 'Darwin|Macintosh|Mac_PowerPC|PPC|Mac PowerPC|iMac|MacBook|macOS|AppleExchangeWebServices|com.apple.trustd|Sonos/.+\(MDCR_'
474
878
  name: 'Mac'
475
- version: '10.2'
879
+ version: ''
476
880
 
477
- - regex: 'Mac[ +]OS[ +]X(?:[ /](?:Version )?(\d+(?:[_\.]\d+)+))?'
478
- name: 'Mac'
479
- version: '$1'
480
-
481
- - regex: 'Mac (\d+(?:[_\.]\d+)+)'
482
- name: 'Mac'
881
+ ##########
882
+ # SeewoOS
883
+ ##########
884
+ - regex: 'SeewoOS x86_64 (\d+[\.\d]+)'
885
+ name: 'SeewoOS'
483
886
  version: '$1'
484
887
 
485
- - regex: 'Darwin|Macintosh|Mac_PowerPC|PPC|Mac PowerPC|iMac|MacBook'
486
- name: 'Mac'
487
- version: ''
488
-
489
-
490
-
491
888
  ##########
492
889
  # ChromeOS
493
890
  ##########
494
891
  - regex: 'CrOS [a-z0-9_]+ .* Chrome/(\d+[\.\d]+)'
495
892
  name: 'Chrome OS'
496
893
  version: '$1'
497
-
498
-
499
-
894
+
500
895
  ##########
501
896
  # BlackBerry
502
897
  ##########
503
898
  - regex: '(?:BB10;.+Version|Black[Bb]erry[0-9a-z]+|Black[Bb]erry.+Version)/(\d+[\.\d]+)'
504
899
  name: 'BlackBerry OS'
505
900
  version: '$1'
506
-
507
-
901
+
508
902
  - regex: 'RIM Tablet OS (\d+[\.\d]+)'
509
903
  name: 'BlackBerry Tablet OS'
510
904
  version: '$1'
511
-
512
-
905
+
513
906
  - regex: 'RIM Tablet OS|QNX|Play[Bb]ook'
514
907
  name: 'BlackBerry Tablet OS'
515
908
  version: ''
516
-
517
-
909
+
518
910
  - regex: 'BlackBerry'
519
911
  name: 'BlackBerry OS'
520
912
  version: ''
521
-
913
+
522
914
  - regex: 'bPod'
523
915
  name: 'BlackBerry OS'
524
916
  version: ''
525
917
 
526
-
527
918
  ##########
528
919
  # BeOS
529
920
  ##########
@@ -531,9 +922,6 @@
531
922
  name: 'BeOS'
532
923
  version: ''
533
924
 
534
-
535
-
536
-
537
925
  ##########
538
926
  # Symbian
539
927
  ##########
@@ -541,48 +929,38 @@
541
929
  name: 'Symbian^3'
542
930
  version: 'Anna'
543
931
 
544
-
545
932
  - regex: 'Symbian/3.+NokiaBrowser/7\.4'
546
933
  name: 'Symbian^3'
547
934
  version: 'Belle'
548
935
 
549
-
550
936
  - regex: 'Symbian/3'
551
937
  name: 'Symbian^3'
552
938
  version: ''
553
939
 
554
-
555
940
  - regex: '(?:Series ?60|SymbOS|S60)(?:[ /]?(\d+[\.\d]+|V\d+))?'
556
941
  name: 'Symbian OS Series 60'
557
942
  version: '$1'
558
943
 
559
-
560
944
  - regex: 'Series40'
561
945
  name: 'Symbian OS Series 40'
562
946
  version: ''
563
947
 
564
-
565
948
  - regex: 'SymbianOS/(\d+[\.\d]+)'
566
949
  name: 'Symbian OS'
567
950
  version: '$1'
568
-
569
-
951
+
570
952
  - regex: 'MeeGo|WeTab'
571
953
  name: 'MeeGo'
572
954
  version: ''
573
-
574
-
955
+
575
956
  - regex: 'Symbian(?: OS)?|SymbOS'
576
957
  name: 'Symbian OS'
577
958
  version: ''
578
-
579
-
959
+
580
960
  - regex: 'Nokia'
581
961
  name: 'Symbian'
582
962
  version: ''
583
963
 
584
-
585
-
586
964
  ##########
587
965
  # Firefox OS
588
966
  ##########
@@ -590,7 +968,6 @@
590
968
  name: 'Firefox OS'
591
969
  version: ''
592
970
 
593
-
594
971
  ##########
595
972
  # RISC OS
596
973
  ##########
@@ -598,7 +975,6 @@
598
975
  name: 'RISC OS'
599
976
  version: '$1'
600
977
 
601
-
602
978
  ##########
603
979
  # Inferno
604
980
  ##########
@@ -606,50 +982,41 @@
606
982
  name: 'Inferno'
607
983
  version: '$1'
608
984
 
609
-
610
985
  ##########
611
986
  # Bada
612
987
  ##########
613
- - regex: 'bada(?:[ /](\d+[\.\d]+))'
988
+ - regex: 'bada(?:[ /](\d+[\.\d]+))?'
614
989
  name: 'Bada'
615
990
  version: '$1'
616
-
617
-
618
- - regex: 'bada'
619
- name: 'Bada'
620
- version: ''
621
991
 
992
+ ##########
993
+ # REX
994
+ ##########
995
+ - regex: 'REX; U;'
996
+ name: 'REX'
997
+ version: ''
622
998
 
623
999
  ##########
624
1000
  # Brew
625
1001
  ##########
626
- - regex: '(?:Brew MP|BREW|BMP)(?:[ /](\d+[\.\d]+))'
1002
+ - regex: '(?:Brew(?!-Applet)(?: MP)?|BMP)(?:[ /](\d+[\.\d]+))?'
627
1003
  name: 'Brew'
628
1004
  version: '$1'
629
1005
 
630
-
631
- - regex: 'Brew MP|BREW|BMP'
632
- name: 'Brew'
633
- version: ''
634
-
635
-
636
1006
  ##########
637
1007
  # Web TV
638
1008
  ##########
639
1009
  - regex: 'GoogleTV(?:[ /](\d+[\.\d]+))?'
640
1010
  name: 'Google TV'
641
1011
  version: '$1'
642
-
643
-
1012
+
644
1013
  - regex: 'AppleTV(?:/?(\d+[\.\d]+))?'
645
- name: 'Apple TV'
1014
+ name: 'tvOS'
646
1015
  version: '$1'
647
-
648
-
1016
+
649
1017
  - regex: 'WebTV/(\d+[\.\d]+)'
650
1018
  name: 'WebTV'
651
1019
  version: '$1'
652
-
653
1020
 
654
1021
  ##########
655
1022
  # Remix OS
@@ -666,108 +1033,92 @@
666
1033
  name: 'Remix OS'
667
1034
  version: ''
668
1035
 
669
-
670
1036
  ##########
671
1037
  # Unix
672
1038
  ##########
673
1039
  - regex: '(?:SunOS|Solaris)(?:[/ ](\d+[\.\d]+))?'
674
1040
  name: 'Solaris'
675
1041
  version: '$1'
676
-
677
-
1042
+
678
1043
  - regex: 'AIX(?:[/ ]?(\d+[\.\d]+))?'
679
1044
  name: 'AIX'
680
1045
  version: '$1'
681
-
682
-
1046
+
683
1047
  - regex: 'HP-UX(?:[/ ]?(\d+[\.\d]+))?'
684
1048
  name: 'HP-UX'
685
1049
  version: '$1'
686
-
687
-
1050
+
688
1051
  - regex: 'FreeBSD(?:[/ ]?(\d+[\.\d]+))?'
689
1052
  name: 'FreeBSD'
690
1053
  version: '$1'
691
-
692
-
1054
+
693
1055
  - regex: 'NetBSD(?:[/ ]?(\d+[\.\d]+))?'
694
1056
  name: 'NetBSD'
695
1057
  version: '$1'
696
-
697
-
1058
+
698
1059
  - regex: 'OpenBSD(?:[/ ]?(\d+[\.\d]+))?'
699
1060
  name: 'OpenBSD'
700
1061
  version: '$1'
701
-
702
-
1062
+
703
1063
  - regex: 'DragonFly(?:[/ ]?(\d+[\.\d]+))?'
704
1064
  name: 'DragonFly'
705
1065
  version: '$1'
706
-
707
-
1066
+
708
1067
  - regex: 'Syllable(?:[/ ]?(\d+[\.\d]+))?'
709
1068
  name: 'Syllable'
710
1069
  version: '$1'
711
-
712
-
1070
+
713
1071
  - regex: 'IRIX(?:;64)?(?:[/ ]?(\d+[\.\d]+))'
714
1072
  name: 'IRIX'
715
1073
  version: '$1'
716
-
717
-
1074
+
718
1075
  - regex: 'OSF1(?:[/ ]?v?(\d+[\.\d]+))?'
719
1076
  name: 'OSF1'
720
1077
  version: '$1'
721
-
722
-
723
-
1078
+
724
1079
  ##########
725
1080
  # Gaming Console
726
1081
  ##########
727
- - regex: 'Nintendo Wii'
1082
+ - regex: 'Nintendo (Wii|Switch)'
728
1083
  name: 'Nintendo'
729
- version: 'Wii'
730
-
731
-
732
- - regex: 'PlayStation ?([3|4])'
1084
+ version: '$1'
1085
+
1086
+ - regex: 'PlayStation ?([34])'
733
1087
  name: 'PlayStation'
734
1088
  version: '$1'
735
-
736
-
1089
+
737
1090
  - regex: 'Xbox|KIN\.(?:One|Two)'
738
1091
  name: 'Xbox'
739
1092
  version: '360'
740
-
741
-
742
-
1093
+
743
1094
  ##########
744
1095
  # Mobile Gaming Console
745
1096
  ##########
746
1097
  - regex: 'Nitro|Nintendo ([3]?DS[i]?)'
747
1098
  name: 'Nintendo Mobile'
748
1099
  version: '$1'
749
-
750
-
1100
+
751
1101
  - regex: 'PlayStation ((?:Portable|Vita))'
752
1102
  name: 'PlayStation Portable'
753
1103
  version: '$1'
754
-
755
-
756
-
1104
+
757
1105
  ##########
758
1106
  # IBM
759
1107
  ##########
760
1108
  - regex: 'OS/2'
761
1109
  name: 'OS/2'
762
1110
  version: ''
763
-
764
-
765
1111
 
766
1112
  ###########
767
1113
  # Linux (Generic)
768
1114
  ###########
769
- - regex: 'Linux(?:OS)?[^a-z]'
1115
+ - regex: 'Linux(?:OS)?[^a-z]|Cinnamon/(?:\d+[\.\d]+)'
770
1116
  name: 'GNU/Linux'
771
1117
  version: ''
772
1118
 
773
-
1119
+ ##########
1120
+ # Java ME (Java Platform, Micro Edition)
1121
+ ##########
1122
+ - regex: 'Java ME|(J2ME|Profile)/MIDP|MIDP-(?:\d+[\.\d]+)/CLDC|Configuration/CLDC|Java; U; MIDP|MMP/\d.\d'
1123
+ name: 'Java ME'
1124
+ version: ''