device_detector 1.0.4 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/README.md +8 -7
  4. data/lib/device_detector/browser.rb +364 -0
  5. data/lib/device_detector/client.rb +8 -0
  6. data/lib/device_detector/device.rb +1204 -2
  7. data/lib/device_detector/os.rb +39 -12
  8. data/lib/device_detector/parser.rb +1 -1
  9. data/lib/device_detector/version.rb +1 -1
  10. data/lib/device_detector/version_extractor.rb +28 -0
  11. data/lib/device_detector.rb +57 -13
  12. data/regexes/bots.yml +651 -61
  13. data/regexes/client/browser_engine.yml +7 -1
  14. data/regexes/client/browsers.yml +774 -78
  15. data/regexes/client/feed_readers.yml +4 -10
  16. data/regexes/client/libraries.yml +71 -2
  17. data/regexes/client/mediaplayers.yml +25 -1
  18. data/regexes/client/mobile_apps.yml +923 -73
  19. data/regexes/client/pim.yml +65 -2
  20. data/regexes/device/cameras.yml +5 -5
  21. data/regexes/device/car_browsers.yml +16 -0
  22. data/regexes/device/consoles.yml +13 -1
  23. data/regexes/device/mobiles.yml +17029 -3889
  24. data/regexes/device/notebooks.yml +114 -0
  25. data/regexes/device/portable_media_player.yml +36 -9
  26. data/regexes/device/shell_tv.yml +117 -0
  27. data/regexes/device/televisions.yml +439 -34
  28. data/regexes/oss.yml +620 -284
  29. metadata +9 -131
  30. data/.gitignore +0 -14
  31. data/.rubocop.yml +0 -49
  32. data/.ruby-version +0 -1
  33. data/.travis.yml +0 -14
  34. data/Gemfile +0 -8
  35. data/Rakefile +0 -85
  36. data/device_detector.gemspec +0 -27
  37. data/spec/device_detector/bot_fixtures_spec.rb +0 -30
  38. data/spec/device_detector/client_fixtures_spec.rb +0 -31
  39. data/spec/device_detector/concrete_user_agent_spec.rb +0 -135
  40. data/spec/device_detector/detector_fixtures_spec.rb +0 -100
  41. data/spec/device_detector/device_fixtures_spec.rb +0 -36
  42. data/spec/device_detector/device_spec.rb +0 -131
  43. data/spec/device_detector/memory_cache_spec.rb +0 -148
  44. data/spec/device_detector/model_extractor_spec.rb +0 -63
  45. data/spec/device_detector/os_fixtures_spec.rb +0 -26
  46. data/spec/device_detector/version_extractor_spec.rb +0 -79
  47. data/spec/device_detector_spec.rb +0 -189
  48. data/spec/fixtures/client/browser.yml +0 -2836
  49. data/spec/fixtures/client/feed_reader.yml +0 -199
  50. data/spec/fixtures/client/library.yml +0 -193
  51. data/spec/fixtures/client/mediaplayer.yml +0 -163
  52. data/spec/fixtures/client/mobile_app.yml +0 -217
  53. data/spec/fixtures/client/pim.yml +0 -115
  54. data/spec/fixtures/detector/bots.yml +0 -3726
  55. data/spec/fixtures/detector/camera.yml +0 -141
  56. data/spec/fixtures/detector/car_browser.yml +0 -81
  57. data/spec/fixtures/detector/console.yml +0 -321
  58. data/spec/fixtures/detector/desktop.yml +0 -5461
  59. data/spec/fixtures/detector/feature_phone.yml +0 -891
  60. data/spec/fixtures/detector/feed_reader.yml +0 -551
  61. data/spec/fixtures/detector/mediaplayer.yml +0 -253
  62. data/spec/fixtures/detector/mobile_apps.yml +0 -494
  63. data/spec/fixtures/detector/phablet.yml +0 -4167
  64. data/spec/fixtures/detector/portable_media_player.yml +0 -178
  65. data/spec/fixtures/detector/smart_display.yml +0 -61
  66. data/spec/fixtures/detector/smart_speaker.yml +0 -55
  67. data/spec/fixtures/detector/smartphone-1.yml +0 -9927
  68. data/spec/fixtures/detector/smartphone-10.yml +0 -9977
  69. data/spec/fixtures/detector/smartphone-11.yml +0 -9891
  70. data/spec/fixtures/detector/smartphone-12.yml +0 -9906
  71. data/spec/fixtures/detector/smartphone-13.yml +0 -9920
  72. data/spec/fixtures/detector/smartphone-14.yml +0 -2662
  73. data/spec/fixtures/detector/smartphone-2.yml +0 -9992
  74. data/spec/fixtures/detector/smartphone-3.yml +0 -9945
  75. data/spec/fixtures/detector/smartphone-4.yml +0 -9923
  76. data/spec/fixtures/detector/smartphone-5.yml +0 -9914
  77. data/spec/fixtures/detector/smartphone-6.yml +0 -9962
  78. data/spec/fixtures/detector/smartphone-7.yml +0 -9899
  79. data/spec/fixtures/detector/smartphone-8.yml +0 -9931
  80. data/spec/fixtures/detector/smartphone-9.yml +0 -9899
  81. data/spec/fixtures/detector/smartphone.yml +0 -9984
  82. data/spec/fixtures/detector/tablet-1.yml +0 -9995
  83. data/spec/fixtures/detector/tablet-2.yml +0 -9977
  84. data/spec/fixtures/detector/tablet-3.yml +0 -9959
  85. data/spec/fixtures/detector/tablet-4.yml +0 -4528
  86. data/spec/fixtures/detector/tablet.yml +0 -9971
  87. data/spec/fixtures/detector/tv.yml +0 -4933
  88. data/spec/fixtures/detector/unknown.yml +0 -3236
  89. data/spec/fixtures/detector/wearable.yml +0 -61
  90. data/spec/fixtures/device/camera.yml +0 -19
  91. data/spec/fixtures/device/car_browser.yml +0 -13
  92. data/spec/fixtures/device/console.yml +0 -79
  93. data/spec/fixtures/parser/oss.yml +0 -1082
  94. data/spec/fixtures/parser/vendorfragments.yml +0 -168
  95. data/spec/spec_helper.rb +0 -9
data/regexes/oss.yml CHANGED
@@ -6,21 +6,41 @@
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]*)'
147
+ name: 'Android'
148
+ version: '$1'
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]*)'
102
163
  name: 'Android'
103
164
  version: '$1'
104
-
105
-
106
- - regex: 'Android|Silk-Accelerated=[a-z]{4,5}'
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,15 +183,30 @@
111
183
  name: 'Android'
112
184
  version: '$1'
113
185
 
114
- - regex: 'FB4A.*FBSV/(\d+[\.\d]*);'
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]*)'
115
191
  name: 'Android'
116
192
  version: '$1'
117
193
 
118
- - regex: 'BeyondPod|AntennaPod|Podkicker|DoggCatcher|Player FM|okhttp|Podcatcher Deluxe'
194
+ # Inverted Android
195
+ - regex: 'Linux; diordnA[; ](\d+[\.\d]*)'
119
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'
120
208
  version: ''
121
-
122
-
209
+
123
210
  ##########
124
211
  # AmigaOS
125
212
  ##########
@@ -148,13 +235,63 @@
148
235
  name: 'MTK / Nucleus'
149
236
  version: '$1'
150
237
 
238
+ ##########
239
+ # MRE / MAUI Runtime Environment
240
+ ##########
241
+ - regex: 'MRE/(\d+)\.(\d+).*;MAUI'
242
+ name: 'MRE'
243
+ version: '$1.$2'
244
+
151
245
  ##########
152
246
  # Linux
153
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
+
154
286
  - regex: '(Ordissimo|webissimo3)'
155
287
  name: 'Ordissimo'
156
288
  version: ''
157
289
 
290
+ # Fenix (https://fenixlinux.com/)
291
+ - regex: '(?:Win|Sistema )Fenix'
292
+ name: 'Fenix'
293
+ version: ''
294
+
158
295
  - regex: 'TOS; Linux'
159
296
  name: 'TmaxOS'
160
297
  version: ''
@@ -175,18 +312,39 @@
175
312
  name: '$1'
176
313
  version: '$2'
177
314
 
178
- - 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]+))?'
179
320
  name: '$1'
180
321
  version: '$2'
181
322
 
323
+ - regex: 'OS ROSA; Linux'
324
+ name: 'Rosa'
325
+ version: ''
326
+
182
327
  # generic linux match -> end of file
183
328
 
184
329
  ##########
185
330
  # webOS
186
331
  ##########
187
- - regex: '(?:webOS|Palm webOS)(?:/(\d+[\.\d]+))?'
332
+ - regex: '(?:Web0S; .*WEBOS|webOS|web0S|Palm webOS|hpwOS)(?:[/]?(\d+[\.\d]+))?'
188
333
  name: 'webOS'
189
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'
190
348
 
191
349
  - regex: '(?:PalmOS|Palm OS)(?:[/ ](\d+[\.\d]+))?|Palm'
192
350
  name: 'palmOS'
@@ -196,88 +354,94 @@
196
354
  name: 'palmOS'
197
355
  version: '$1'
198
356
 
199
-
200
357
  - regex: 'MorphOS(?:[ /](\d+[\.\d]+))?'
201
358
  name: 'MorphOS'
202
359
  version: '$1'
203
360
 
204
-
361
+
205
362
  ##########
206
363
  # Windows
207
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
+
208
385
  - regex: 'CYGWIN_NT-10.0|Windows NT 10.0|Windows 10'
209
386
  name: 'Windows'
210
387
  version: '10'
211
388
 
212
- - regex: 'CYGWIN_NT-6.4|Windows NT 6.4|Windows 10'
389
+ - regex: 'CYGWIN_NT-6.4|Windows NT 6.4|Windows 10|win10'
213
390
  name: 'Windows'
214
391
  version: '10'
215
-
392
+
216
393
  - regex: 'CYGWIN_NT-6.3|Windows NT 6.3|Windows 8.1'
217
394
  name: 'Windows'
218
395
  version: '8.1'
219
396
 
220
-
221
397
  - regex: 'CYGWIN_NT-6.2|Windows NT 6.2|Windows 8'
222
398
  name: 'Windows'
223
399
  version: '8'
224
-
225
-
226
- - 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'
227
402
  name: 'Windows'
228
403
  version: '7'
229
-
230
-
404
+
231
405
  - regex: 'CYGWIN_NT-6.0|Windows NT 6.0|Windows Vista'
232
406
  name: 'Windows'
233
407
  version: 'Vista'
234
-
235
-
408
+
236
409
  - regex: 'CYGWIN_NT-5.2|Windows NT 5.2|Windows Server 2003 / XP x64'
237
410
  name: 'Windows'
238
411
  version: 'Server 2003'
239
-
240
-
412
+
241
413
  - regex: 'CYGWIN_NT-5.1|Windows NT 5.1|Windows XP'
242
414
  name: 'Windows'
243
415
  version: 'XP'
244
-
245
-
416
+
246
417
  - regex: 'CYGWIN_NT-5.0|Windows NT 5.0|Windows 2000'
247
418
  name: 'Windows'
248
419
  version: '2000'
249
-
250
-
420
+
251
421
  - regex: 'CYGWIN_NT-4.0|Windows NT 4.0|WinNT|Windows NT'
252
422
  name: 'Windows'
253
423
  version: 'NT'
254
-
255
-
424
+
256
425
  - regex: 'CYGWIN_ME-4.90|Win 9x 4.90|Windows ME'
257
426
  name: 'Windows'
258
427
  version: 'ME'
259
-
260
-
428
+
261
429
  - regex: 'CYGWIN_98-4.10|Win98|Windows 98'
262
430
  name: 'Windows'
263
431
  version: '98'
264
-
265
-
432
+
266
433
  - regex: 'CYGWIN_95-4.0|Win32|Win95|Windows 95|Windows_95'
267
434
  name: 'Windows'
268
435
  version: '95'
269
-
270
-
436
+
271
437
  - regex: 'Windows 3.1'
272
438
  name: 'Windows'
273
439
  version: '3.1'
274
-
275
-
276
- - regex: 'Windows'
440
+
441
+ - regex: 'Windows|.+win32|Win64|MSDW|HandBrake Win Upd|Microsoft BITS'
277
442
  name: 'Windows'
278
443
  version: ''
279
444
 
280
-
281
445
  ##########
282
446
  # Haiku OS
283
447
  ##########
@@ -285,261 +449,472 @@
285
449
  name: 'Haiku OS'
286
450
  version: ''
287
451
 
288
-
289
452
  ##########
290
- # iOS
453
+ # tvOS (https://developer.apple.com/tvos/)
291
454
  ##########
292
- - regex: 'CFNetwork/889'
293
- name: 'iOS'
294
- version: '11.1'
295
-
296
- - regex: 'CFNetwork/887.*(x86_64)'
297
- name: 'Mac'
298
- version: '10.13'
299
-
300
- - regex: 'CFNetwork/887'
301
- name: 'iOS'
302
- version: '11.0'
303
-
304
- - regex: 'CFNetwork/811.*(x86_64)'
305
- name: 'Mac'
306
- version: '10.12'
307
-
308
- - regex: 'CFNetwork/811'
309
- name: 'iOS'
310
- version: '10.3'
311
-
312
- - regex: 'CFNetwork/808\.3'
313
- name: 'iOS'
314
- version: '10.3'
315
-
316
- - regex: 'CFNetwork/808\.2'
317
- name: 'iOS'
318
- version: '10.2'
455
+ - regex: 'Apple ?TV.*CPU (?:iPhone )?OS ((?:9|1[0-5])[_\.]\d+(?:[_.]\d+)*)'
456
+ name: 'tvOS'
457
+ version: '$1'
319
458
 
320
- - regex: 'CFNetwork/808\.1'
321
- name: 'iOS'
322
- version: '10.1'
459
+ - regex: 'iOS(?:; |/)((?:9|1[0-5]).\d+(?:[_\.]\d+)*) (?:model/)?AppleTV'
460
+ name: 'tvOS'
461
+ version: '$1'
323
462
 
324
- - regex: 'CFNetwork/808\.0'
325
- name: 'iOS'
326
- version: '10.0'
463
+ ##########
464
+ # watchOS (https://developer.apple.com/watchos/)
465
+ ##########
466
+ - regex: '(?:Watch1,[12]/|Watch OS,|watchOS[ /])(\d+[\.\d]*)'
467
+ name: 'watchOS'
468
+ version: '$1'
327
469
 
328
- - regex: 'CFNetwork/808'
329
- name: 'iOS'
330
- version: '10'
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'
331
476
 
332
- - regex: 'CFNetwork/758\.4\.3'
333
- name: 'iOS'
334
- version: '9.3.2'
477
+ - regex: 'iPad/(1[345]).(\d+[\.\d]*)'
478
+ name: 'iPadOS'
479
+ version: '$1.$2'
335
480
 
336
- - regex: 'CFNetwork/758\.3\.15'
337
- name: 'iOS'
338
- version: '9.3'
481
+ - regex: '^iPad(?:\d+[\,\d]*)/(1[345]).(\d+[\.\d]*)'
482
+ name: 'iPadOS'
483
+ version: '$1.$2'
339
484
 
340
- - regex: 'CFNetwork/758\.2\.[78]'
341
- name: 'iOS'
342
- version: '9.2'
485
+ - regex: 'iPad(?:; iOS|.+CPU OS) ((1[345])+(?:[_\.]\d+)*)'
486
+ name: 'iPadOS'
487
+ version: '$1'
343
488
 
344
- - regex: 'CFNetwork/758\.1\.6'
345
- name: 'iOS'
346
- version: '9.1'
489
+ - regex: 'iOS/(1[345]).(\d+[\.\d]*).+Apple/iPad'
490
+ name: 'iPadOS'
491
+ version: '$1.$2'
347
492
 
348
- - regex: 'CFNetwork/758\.0\.2'
349
- name: 'iOS'
350
- version: '9.0'
493
+ - regex: 'iPhone OS,(1[345]).(\d+[\.\d]*).+iPad'
494
+ name: 'iPadOS'
495
+ version: '$1.$2'
351
496
 
352
- - regex: 'CFNetwork/711\.5\.6'
497
+ ##########
498
+ # iOS
499
+ ##########
500
+ - regex: 'iPad/([89]|1[012]).(\d+[\.\d]*)'
353
501
  name: 'iOS'
354
- version: '8.4.1'
502
+ version: '$1.$2'
355
503
 
356
- - regex: 'CFNetwork/711\.4\.6'
504
+ - regex: '^(?:iPad|iPhone)(?:\d+[\,\d]*)[/_](\d+[\.\d]+)'
357
505
  name: 'iOS'
358
- version: '8.4'
506
+ version: '$1'
359
507
 
360
- - regex: 'CFNetwork/711\.3\.18'
508
+ - regex: 'Pinterest for iOS/.*; (\d(?:[\d\.]*))[)]$'
361
509
  name: 'iOS'
362
- version: '8.3'
510
+ version: '$1'
363
511
 
364
- - regex: 'CFNetwork/711\.2\.23'
512
+ - regex: '(?:iPhone ?OS|iOS(?: Version)?)(?:/|; |,)(\d+[\.\d]+)'
365
513
  name: 'iOS'
366
- version: '8.2'
514
+ version: '$1'
367
515
 
368
- - regex: 'CFNetwork/711\.1\.1[26]'
516
+ - regex: 'CFNetwork/.+ Darwin/(\d+[\.\d]+)(?!.*(?:x86_64|i386|PowerMac))'
369
517
  name: 'iOS'
370
- version: '8.1'
371
-
372
- - regex: 'CFNetwork/711\.0\.6'
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/'
373
637
  name: 'iOS'
374
- version: '8.0'
638
+ version: '$1'
375
639
 
376
- - regex: 'CFNetwork/672\.1'
640
+ - regex: 'iOS(\d+\.\d+\.\d+)'
377
641
  name: 'iOS'
378
- version: '7.1'
642
+ version: '$1'
379
643
 
380
- - regex: 'CFNetwork/672\.0'
644
+ - regex: 'iOS(\d+)\.(\d+)0'
381
645
  name: 'iOS'
382
- version: '7.0'
646
+ version: '$1.$2'
383
647
 
384
- - regex: 'CFNetwork/609\.1'
648
+ - regex: 'iPhone OS ([0-9]{1})([0-9]{1})([0-9]{1})'
385
649
  name: 'iOS'
386
- version: '6.1'
650
+ version: '$1.$2.$3'
387
651
 
388
- - regex: 'CFNetwork/60[29]'
652
+ - regex: '(?:CPU OS|iPh(?:one)?[ _]OS|iOS)[ _/](\d+(?:[_\.]\d+)*)'
389
653
  name: 'iOS'
390
- version: '6.0'
654
+ version: '$1'
391
655
 
392
- - regex: 'CFNetwork/548\.1'
656
+ - regex: 'FBMD/iPhone;.*FBSV/ ?(\d+[\.\d]+);'
393
657
  name: 'iOS'
394
- version: '5.1'
658
+ version: '$1'
395
659
 
396
- - regex: 'CFNetwork/548\.0'
660
+ - regex: '(?:FBIOS|Messenger(?:Lite)?ForiOS).*FBSV/ ?(\d+[\.\d]*);'
397
661
  name: 'iOS'
398
- version: '5.0'
662
+ version: '$1'
399
663
 
400
- - regex: 'CFNetwork/485\.13'
664
+ - regex: 'iPhone OS,([\d\.]+).+(?:iPhone|iPod)'
401
665
  name: 'iOS'
402
- version: '4.3'
666
+ version: '$1'
403
667
 
404
- - regex: 'CFNetwork/485\.12'
668
+ - regex: 'iPad.+; (\d+[\.\d]+);'
405
669
  name: 'iOS'
406
- version: '4.2'
670
+ version: '$1'
407
671
 
408
- - regex: 'CFNetwork/485\.10'
672
+ - regex: 'iPhone.+; Version (\d+[\.\d]+)'
409
673
  name: 'iOS'
410
- version: '4.1'
674
+ version: '$1'
411
675
 
412
- - regex: 'CFNetwork/485\.2'
676
+ - regex: 'OS=iOS;OSVer=(\d+[\.\d]+);'
413
677
  name: 'iOS'
414
- version: '4.0'
678
+ version: '$1'
415
679
 
416
- - regex: 'CFNetwork/467\.12'
680
+ - regex: 'os=Apple-iOS.+osversion=(\d+[\.\d]+)/'
417
681
  name: 'iOS'
418
- version: '3.2'
682
+ version: '$1'
419
683
 
420
- - regex: 'CFNetwork/459'
684
+ - regex: '(?:Apple-)?(?:iPhone|iPad|iPod)(?:.*Mac OS X.*Version/(\d+\.\d+)|; Opera)?'
421
685
  name: 'iOS'
422
- version: '3.1'
686
+ version: '$1'
423
687
 
424
- - regex: '(?:CPU OS|iPh(?:one)?[ _]OS|iOS)[ _/](\d+(?:[_\.]\d+)*)'
688
+ - regex: '(?:Podcasts/(?:[\d\.]+)|Instacast(?:HD)?/(?:\d\.[\d\.abc]+)|Pocket Casts, iOS|\(iOS\)|iOS; Opera|Overcast|Castro|Podcat|iCatcher|RSSRadio/|MobileSafari/)(?!.*x86_64)'
425
689
  name: 'iOS'
426
- version: '$1'
690
+ version: ''
427
691
 
428
- - regex: 'FBIOS.*FBSV/(\d+[\.\d]*);'
692
+ - regex: 'iTunes-(AppleTV|iPod|iPad|iPhone)/(?:[\d\.]+)'
429
693
  name: 'iOS'
430
- version: '$1'
694
+ version: ''
431
695
 
432
- - regex: '(?:Apple-)?(?:iPhone|iPad|iPod)(?:.*Mac OS X.*Version/(\d+\.\d+)|; Opera)?'
696
+ - regex: 'iOS/Version ([\d\.]+)'
433
697
  name: 'iOS'
434
698
  version: '$1'
435
699
 
436
- - regex: 'Podcasts/(?:[\d\.]+)|Instacast(?:HD)?/(?:\d\.[\d\.abc]+)|Pocket Casts, iOS|Overcast|Castro|Podcat|i[cC]atcher|RSSRadio/'
700
+ - regex: 'Sonos/.+\(ICRU_'
437
701
  name: 'iOS'
438
702
  version: ''
439
703
 
440
- - regex: 'iTunes-(iPod|iPad|iPhone)/(?:[\d\.]+)'
704
+ - regex: 'CaptiveNetworkSupport|AirPlay'
441
705
  name: 'iOS'
442
706
  version: ''
443
707
 
444
-
445
708
  ##########
446
709
  # Mac
447
710
  ##########
448
-
449
- - regex: 'CFNetwork/807'
450
- name: 'Mac'
451
- version: '10.12'
452
-
453
- - regex: 'CFNetwork/760'
454
- name: 'Mac'
455
- version: '10.11'
456
-
457
- - regex: 'CFNetwork/720'
458
- name: 'Mac'
459
- version: '10.10'
460
-
461
- - regex: 'CFNetwork/673'
462
- name: 'Mac'
463
- version: '10.9'
464
-
465
- - regex: 'CFNetwork/596'
711
+ - regex: 'CFNetwork/.+ Darwin/(?:[\d\.]+).+(?:x86_64|i386)|(?:x86_64-apple-)?darwin(?:[\d\.]+)|PowerMac'
466
712
  name: 'Mac'
467
- version: '10.8'
468
-
469
- - regex: 'CFNetwork/520'
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]+)\);'
470
858
  name: 'Mac'
471
- version: '10.7'
859
+ version: '$1'
472
860
 
473
- - regex: 'CFNetwork/454'
861
+ - regex: 'Mac[ +]OS[ +]?X(?:[ /,](?:Version )?(\d+(?:[_\.]\d+)+))?'
474
862
  name: 'Mac'
475
- version: '10.6'
863
+ version: '$1'
476
864
 
477
- - regex: 'CFNetwork/(?:438|422|339|330|221|220|217)'
865
+ - regex: 'Mac (?:OS/)?(\d+(?:[_\.]\d+)+)'
478
866
  name: 'Mac'
479
- version: '10.5'
867
+ version: '$1'
480
868
 
481
- - regex: 'CFNetwork/12[89]'
869
+ - regex: '(?:macOS[/,]|Mac-)(\d+[\.\d]+)'
482
870
  name: 'Mac'
483
- version: '10.4'
871
+ version: '$1'
484
872
 
485
- - regex: 'CFNetwork/1\.2'
873
+ - regex: 'Macintosh; OS X (\d+[\.\d]+)'
486
874
  name: 'Mac'
487
- version: '10.3'
875
+ version: '$1'
488
876
 
489
- - regex: 'CFNetwork/1\.1'
877
+ - regex: 'Darwin|Macintosh|Mac_PowerPC|PPC|Mac PowerPC|iMac|MacBook|macOS|AppleExchangeWebServices|com.apple.trustd|Sonos/.+\(MDCR_'
490
878
  name: 'Mac'
491
- version: '10.2'
879
+ version: ''
492
880
 
493
- - regex: 'Mac[ +]OS[ +]X(?:[ /](?:Version )?(\d+(?:[_\.]\d+)+))?'
494
- name: 'Mac'
495
- version: '$1'
496
-
497
- - regex: 'Mac (\d+(?:[_\.]\d+)+)'
498
- name: 'Mac'
881
+ ##########
882
+ # SeewoOS
883
+ ##########
884
+ - regex: 'SeewoOS x86_64 (\d+[\.\d]+)'
885
+ name: 'SeewoOS'
499
886
  version: '$1'
500
887
 
501
- - regex: 'Darwin|Macintosh|Mac_PowerPC|PPC|Mac PowerPC|iMac|MacBook'
502
- name: 'Mac'
503
- version: ''
504
-
505
-
506
-
507
888
  ##########
508
889
  # ChromeOS
509
890
  ##########
510
891
  - regex: 'CrOS [a-z0-9_]+ .* Chrome/(\d+[\.\d]+)'
511
892
  name: 'Chrome OS'
512
893
  version: '$1'
513
-
514
-
515
-
894
+
516
895
  ##########
517
896
  # BlackBerry
518
897
  ##########
519
898
  - regex: '(?:BB10;.+Version|Black[Bb]erry[0-9a-z]+|Black[Bb]erry.+Version)/(\d+[\.\d]+)'
520
899
  name: 'BlackBerry OS'
521
900
  version: '$1'
522
-
523
-
901
+
524
902
  - regex: 'RIM Tablet OS (\d+[\.\d]+)'
525
903
  name: 'BlackBerry Tablet OS'
526
904
  version: '$1'
527
-
528
-
905
+
529
906
  - regex: 'RIM Tablet OS|QNX|Play[Bb]ook'
530
907
  name: 'BlackBerry Tablet OS'
531
908
  version: ''
532
-
533
-
909
+
534
910
  - regex: 'BlackBerry'
535
911
  name: 'BlackBerry OS'
536
912
  version: ''
537
-
913
+
538
914
  - regex: 'bPod'
539
915
  name: 'BlackBerry OS'
540
916
  version: ''
541
917
 
542
-
543
918
  ##########
544
919
  # BeOS
545
920
  ##########
@@ -547,9 +922,6 @@
547
922
  name: 'BeOS'
548
923
  version: ''
549
924
 
550
-
551
-
552
-
553
925
  ##########
554
926
  # Symbian
555
927
  ##########
@@ -557,48 +929,38 @@
557
929
  name: 'Symbian^3'
558
930
  version: 'Anna'
559
931
 
560
-
561
932
  - regex: 'Symbian/3.+NokiaBrowser/7\.4'
562
933
  name: 'Symbian^3'
563
934
  version: 'Belle'
564
935
 
565
-
566
936
  - regex: 'Symbian/3'
567
937
  name: 'Symbian^3'
568
938
  version: ''
569
939
 
570
-
571
940
  - regex: '(?:Series ?60|SymbOS|S60)(?:[ /]?(\d+[\.\d]+|V\d+))?'
572
941
  name: 'Symbian OS Series 60'
573
942
  version: '$1'
574
943
 
575
-
576
944
  - regex: 'Series40'
577
945
  name: 'Symbian OS Series 40'
578
946
  version: ''
579
947
 
580
-
581
948
  - regex: 'SymbianOS/(\d+[\.\d]+)'
582
949
  name: 'Symbian OS'
583
950
  version: '$1'
584
-
585
-
951
+
586
952
  - regex: 'MeeGo|WeTab'
587
953
  name: 'MeeGo'
588
954
  version: ''
589
-
590
-
955
+
591
956
  - regex: 'Symbian(?: OS)?|SymbOS'
592
957
  name: 'Symbian OS'
593
958
  version: ''
594
-
595
-
959
+
596
960
  - regex: 'Nokia'
597
961
  name: 'Symbian'
598
962
  version: ''
599
963
 
600
-
601
-
602
964
  ##########
603
965
  # Firefox OS
604
966
  ##########
@@ -606,7 +968,6 @@
606
968
  name: 'Firefox OS'
607
969
  version: ''
608
970
 
609
-
610
971
  ##########
611
972
  # RISC OS
612
973
  ##########
@@ -614,7 +975,6 @@
614
975
  name: 'RISC OS'
615
976
  version: '$1'
616
977
 
617
-
618
978
  ##########
619
979
  # Inferno
620
980
  ##########
@@ -622,50 +982,41 @@
622
982
  name: 'Inferno'
623
983
  version: '$1'
624
984
 
625
-
626
985
  ##########
627
986
  # Bada
628
987
  ##########
629
- - regex: 'bada(?:[ /](\d+[\.\d]+))'
988
+ - regex: 'bada(?:[ /](\d+[\.\d]+))?'
630
989
  name: 'Bada'
631
990
  version: '$1'
632
-
633
-
634
- - regex: 'bada'
635
- name: 'Bada'
636
- version: ''
637
991
 
992
+ ##########
993
+ # REX
994
+ ##########
995
+ - regex: 'REX; U;'
996
+ name: 'REX'
997
+ version: ''
638
998
 
639
999
  ##########
640
1000
  # Brew
641
1001
  ##########
642
- - regex: '(?:Brew MP|BREW|BMP)(?:[ /](\d+[\.\d]+))'
1002
+ - regex: '(?:Brew(?!-Applet)(?: MP)?|BMP)(?:[ /](\d+[\.\d]+))?'
643
1003
  name: 'Brew'
644
1004
  version: '$1'
645
1005
 
646
-
647
- - regex: 'Brew MP|BREW|BMP'
648
- name: 'Brew'
649
- version: ''
650
-
651
-
652
1006
  ##########
653
1007
  # Web TV
654
1008
  ##########
655
1009
  - regex: 'GoogleTV(?:[ /](\d+[\.\d]+))?'
656
1010
  name: 'Google TV'
657
1011
  version: '$1'
658
-
659
-
1012
+
660
1013
  - regex: 'AppleTV(?:/?(\d+[\.\d]+))?'
661
- name: 'Apple TV'
1014
+ name: 'tvOS'
662
1015
  version: '$1'
663
-
664
-
1016
+
665
1017
  - regex: 'WebTV/(\d+[\.\d]+)'
666
1018
  name: 'WebTV'
667
1019
  version: '$1'
668
-
669
1020
 
670
1021
  ##########
671
1022
  # Remix OS
@@ -682,61 +1033,49 @@
682
1033
  name: 'Remix OS'
683
1034
  version: ''
684
1035
 
685
-
686
1036
  ##########
687
1037
  # Unix
688
1038
  ##########
689
1039
  - regex: '(?:SunOS|Solaris)(?:[/ ](\d+[\.\d]+))?'
690
1040
  name: 'Solaris'
691
1041
  version: '$1'
692
-
693
-
1042
+
694
1043
  - regex: 'AIX(?:[/ ]?(\d+[\.\d]+))?'
695
1044
  name: 'AIX'
696
1045
  version: '$1'
697
-
698
-
1046
+
699
1047
  - regex: 'HP-UX(?:[/ ]?(\d+[\.\d]+))?'
700
1048
  name: 'HP-UX'
701
1049
  version: '$1'
702
-
703
-
1050
+
704
1051
  - regex: 'FreeBSD(?:[/ ]?(\d+[\.\d]+))?'
705
1052
  name: 'FreeBSD'
706
1053
  version: '$1'
707
-
708
-
1054
+
709
1055
  - regex: 'NetBSD(?:[/ ]?(\d+[\.\d]+))?'
710
1056
  name: 'NetBSD'
711
1057
  version: '$1'
712
-
713
-
1058
+
714
1059
  - regex: 'OpenBSD(?:[/ ]?(\d+[\.\d]+))?'
715
1060
  name: 'OpenBSD'
716
1061
  version: '$1'
717
-
718
-
1062
+
719
1063
  - regex: 'DragonFly(?:[/ ]?(\d+[\.\d]+))?'
720
1064
  name: 'DragonFly'
721
1065
  version: '$1'
722
-
723
-
1066
+
724
1067
  - regex: 'Syllable(?:[/ ]?(\d+[\.\d]+))?'
725
1068
  name: 'Syllable'
726
1069
  version: '$1'
727
-
728
-
1070
+
729
1071
  - regex: 'IRIX(?:;64)?(?:[/ ]?(\d+[\.\d]+))'
730
1072
  name: 'IRIX'
731
1073
  version: '$1'
732
-
733
-
1074
+
734
1075
  - regex: 'OSF1(?:[/ ]?v?(\d+[\.\d]+))?'
735
1076
  name: 'OSF1'
736
1077
  version: '$1'
737
-
738
-
739
-
1078
+
740
1079
  ##########
741
1080
  # Gaming Console
742
1081
  ##########
@@ -744,45 +1083,42 @@
744
1083
  name: 'Nintendo'
745
1084
  version: '$1'
746
1085
 
747
- - regex: 'PlayStation ?([3|4])'
1086
+ - regex: 'PlayStation ?([34])'
748
1087
  name: 'PlayStation'
749
1088
  version: '$1'
750
-
751
-
1089
+
752
1090
  - regex: 'Xbox|KIN\.(?:One|Two)'
753
1091
  name: 'Xbox'
754
1092
  version: '360'
755
-
756
-
757
-
1093
+
758
1094
  ##########
759
1095
  # Mobile Gaming Console
760
1096
  ##########
761
1097
  - regex: 'Nitro|Nintendo ([3]?DS[i]?)'
762
1098
  name: 'Nintendo Mobile'
763
1099
  version: '$1'
764
-
765
-
1100
+
766
1101
  - regex: 'PlayStation ((?:Portable|Vita))'
767
1102
  name: 'PlayStation Portable'
768
1103
  version: '$1'
769
-
770
-
771
-
1104
+
772
1105
  ##########
773
1106
  # IBM
774
1107
  ##########
775
1108
  - regex: 'OS/2'
776
1109
  name: 'OS/2'
777
1110
  version: ''
778
-
779
-
780
1111
 
781
1112
  ###########
782
1113
  # Linux (Generic)
783
1114
  ###########
784
- - regex: 'Linux(?:OS)?[^a-z]'
1115
+ - regex: 'Linux(?:OS)?[^a-z]|Cinnamon/(?:\d+[\.\d]+)'
785
1116
  name: 'GNU/Linux'
786
1117
  version: ''
787
1118
 
788
-
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: ''