device_detector 1.0.4 → 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 (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: ''