device_detector 1.0.0 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +49 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +5 -9
  5. data/CHANGELOG.md +18 -5
  6. data/README.md +7 -9
  7. data/Rakefile +20 -13
  8. data/device_detector.gemspec +1 -0
  9. data/lib/device_detector.rb +32 -28
  10. data/lib/device_detector/bot.rb +2 -2
  11. data/lib/device_detector/client.rb +3 -2
  12. data/lib/device_detector/device.rb +46 -20
  13. data/lib/device_detector/memory_cache.rb +26 -19
  14. data/lib/device_detector/metadata_extractor.rb +7 -8
  15. data/lib/device_detector/model_extractor.rb +3 -3
  16. data/lib/device_detector/name_extractor.rb +2 -2
  17. data/lib/device_detector/os.rb +121 -111
  18. data/lib/device_detector/parser.rb +22 -9
  19. data/lib/device_detector/version.rb +3 -1
  20. data/lib/device_detector/version_extractor.rb +2 -3
  21. data/regexes/bots.yml +895 -21
  22. data/regexes/client/browser_engine.yml +11 -2
  23. data/regexes/client/browsers.yml +1025 -205
  24. data/regexes/client/feed_readers.yml +38 -2
  25. data/regexes/client/libraries.yml +81 -2
  26. data/regexes/client/mediaplayers.yml +25 -5
  27. data/regexes/client/mobile_apps.yml +213 -2
  28. data/regexes/client/pim.yml +10 -1
  29. data/regexes/device/cameras.yml +1 -1
  30. data/regexes/device/car_browsers.yml +7 -3
  31. data/regexes/device/consoles.yml +3 -3
  32. data/regexes/device/mobiles.yml +12768 -571
  33. data/regexes/device/notebooks.yml +114 -0
  34. data/regexes/device/portable_media_player.yml +4 -6
  35. data/regexes/device/televisions.yml +33 -5
  36. data/regexes/oss.yml +138 -49
  37. data/regexes/vendorfragments.yml +6 -2
  38. data/spec/device_detector/concrete_user_agent_spec.rb +16 -17
  39. data/spec/device_detector/detector_fixtures_spec.rb +59 -24
  40. data/spec/device_detector/device_spec.rb +28 -48
  41. data/spec/device_detector/memory_cache_spec.rb +60 -28
  42. data/spec/device_detector/model_extractor_spec.rb +3 -3
  43. data/spec/device_detector/version_extractor_spec.rb +5 -6
  44. data/spec/device_detector_spec.rb +60 -69
  45. data/spec/fixtures/client/browser.yml +1810 -260
  46. data/spec/fixtures/client/feed_reader.yml +47 -35
  47. data/spec/fixtures/client/library.yml +118 -3
  48. data/spec/fixtures/client/mediaplayer.yml +32 -37
  49. data/spec/fixtures/client/mobile_app.yml +225 -5
  50. data/spec/fixtures/client/pim.yml +37 -18
  51. data/spec/fixtures/detector/bots.yml +1531 -136
  52. data/spec/fixtures/detector/camera.yml +36 -10
  53. data/spec/fixtures/detector/car_browser.yml +64 -3
  54. data/spec/fixtures/detector/console.yml +80 -26
  55. data/spec/fixtures/detector/desktop.yml +3865 -2238
  56. data/spec/fixtures/detector/feature_phone.yml +151 -42
  57. data/spec/fixtures/detector/feed_reader.yml +186 -121
  58. data/spec/fixtures/detector/mediaplayer.yml +113 -39
  59. data/spec/fixtures/detector/mobile_apps.yml +451 -21
  60. data/spec/fixtures/detector/phablet.yml +3847 -660
  61. data/spec/fixtures/detector/portable_media_player.yml +81 -16
  62. data/spec/fixtures/detector/smart_display.yml +8 -5
  63. data/spec/fixtures/detector/smart_speaker.yml +55 -0
  64. data/spec/fixtures/detector/smartphone-1.yml +5385 -4948
  65. data/spec/fixtures/detector/smartphone-10.yml +9973 -0
  66. data/spec/fixtures/detector/smartphone-11.yml +10015 -0
  67. data/spec/fixtures/detector/smartphone-12.yml +9897 -0
  68. data/spec/fixtures/detector/smartphone-13.yml +9912 -0
  69. data/spec/fixtures/detector/smartphone-14.yml +9935 -0
  70. data/spec/fixtures/detector/smartphone-15.yml +6595 -0
  71. data/spec/fixtures/detector/smartphone-16.yml +10021 -0
  72. data/spec/fixtures/detector/smartphone-17.yml +9408 -0
  73. data/spec/fixtures/detector/smartphone-2.yml +5221 -4646
  74. data/spec/fixtures/detector/smartphone-3.yml +5047 -4494
  75. data/spec/fixtures/detector/smartphone-4.yml +6958 -2761
  76. data/spec/fixtures/detector/smartphone-5.yml +9937 -0
  77. data/spec/fixtures/detector/smartphone-6.yml +10114 -0
  78. data/spec/fixtures/detector/smartphone-7.yml +9975 -0
  79. data/spec/fixtures/detector/smartphone-8.yml +9897 -0
  80. data/spec/fixtures/detector/smartphone-9.yml +9880 -0
  81. data/spec/fixtures/detector/smartphone.yml +5229 -4649
  82. data/spec/fixtures/detector/tablet-1.yml +4640 -4140
  83. data/spec/fixtures/detector/tablet-2.yml +9806 -71
  84. data/spec/fixtures/detector/tablet-3.yml +9968 -0
  85. data/spec/fixtures/detector/tablet-4.yml +7113 -0
  86. data/spec/fixtures/detector/tablet.yml +4619 -4132
  87. data/spec/fixtures/detector/tv.yml +4093 -1342
  88. data/spec/fixtures/detector/unknown.yml +1042 -1006
  89. data/spec/fixtures/detector/wearable.yml +61 -0
  90. data/spec/fixtures/device/camera.yml +4 -3
  91. data/spec/fixtures/device/car_browser.yml +9 -2
  92. data/spec/fixtures/device/console.yml +15 -14
  93. data/spec/fixtures/device/notebook.yml +7 -0
  94. data/spec/fixtures/parser/oss.yml +291 -2
  95. data/spec/fixtures/parser/vendorfragments.yml +8 -2
  96. metadata +59 -7
@@ -1,7 +1,7 @@
1
1
  ###############
2
2
  # Device Detector - The Universal Device Detection library for parsing User Agents
3
3
  #
4
- # @link http://piwik.org
4
+ # @link https://matomo.org
5
5
  # @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
6
6
  ###############
7
7
 
@@ -17,6 +17,24 @@
17
17
  url: 'https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/pubsub.1.html'
18
18
  type: 'Feed Reader'
19
19
 
20
+ - regex: 'BashPodder'
21
+ name: 'BashPodder'
22
+ version: ''
23
+ url: 'http://lincgeek.org/bashpodder/'
24
+ type: 'Feed Reader'
25
+
26
+ - regex: 'Breaker/v([\d\.]+)'
27
+ name: 'Breaker'
28
+ version: '$1'
29
+ url: 'https://www.breaker.audio/'
30
+ type: 'Feed Reader App'
31
+
32
+ - regex: 'Downcast/([\d\.]+)'
33
+ name: 'Downcast'
34
+ version: '$1'
35
+ url: 'http://downcastapp.com/'
36
+ type: 'Feed Reader App'
37
+
20
38
  - regex: 'FeedDemon(?:/(\d+[\.\d]+))?'
21
39
  name: 'FeedDemon'
22
40
  version: '$1'
@@ -29,6 +47,18 @@
29
47
  url: 'http://www.chebinliu.com/projects/iphone/feeddler-rss-reader/'
30
48
  type: 'Feed Reader App'
31
49
 
50
+ - regex: 'QuiteRSS(?:[/ ](\d+[\.\d]+))?'
51
+ name: 'QuiteRSS'
52
+ version: '$1'
53
+ url: https://quiterss.org
54
+ type: 'Feed Reader App'
55
+
56
+ - regex: 'gPodder/([\d\.]+)'
57
+ name: 'gPodder'
58
+ version: '$1'
59
+ url: 'http://gpodder.org/'
60
+ type: 'Feed Reader App'
61
+
32
62
  - regex: 'JetBrains Omea Reader(?:[/ ](\d+[\.\d]+))?'
33
63
  name: 'JetBrains Omea Reader'
34
64
  version: '$1'
@@ -65,7 +95,13 @@
65
95
  url: 'http://www.newsbeuter.org/'
66
96
  type: 'Feed Reader'
67
97
 
68
- - regex: 'Pulp(?:[/ ](\d+[\.\d]+))?'
98
+ - regex: 'PritTorrent/([\d\.]+)'
99
+ name: 'PritTorrent'
100
+ version: '$1'
101
+ url: 'http://bitlove.org'
102
+ type: 'Feed Reader'
103
+
104
+ - regex: 'Pulp[/ ](\d+[\.\d]+)'
69
105
  name: 'Pulp'
70
106
  version: '$1'
71
107
  url: 'http://www.acrylicapps.com/pulp/'
@@ -1,7 +1,7 @@
1
1
  ###############
2
2
  # Device Detector - The Universal Device Detection library for parsing User Agents
3
3
  #
4
- # @link http://piwik.org
4
+ # @link https://matomo.org
5
5
  # @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
6
6
  ###############
7
7
 
@@ -31,4 +31,83 @@
31
31
 
32
32
  - regex: '(?:perlclient|libwww-perl)(?:/?(\d+[\.\d]+))?'
33
33
  name: 'Perl'
34
- version: '$1'
34
+ version: '$1'
35
+
36
+ - regex: 'okhttp/([\d\.]+)'
37
+ name: 'OkHttp'
38
+ version: '$1'
39
+
40
+ - regex: 'HTTP_Request2(?:/(\d+[\.\d]+))?'
41
+ name: 'HTTP_Request2'
42
+ version: '$1'
43
+
44
+ - regex: 'HTTP_Request2(?:/(\d+[\.\d]+))?'
45
+ name: 'HTTP_Request2'
46
+ version: '$1'
47
+ url: 'http://pear.php.net/package/http_request2'
48
+
49
+ - regex: 'Mechanize(?:/(\d+[\.\d]+))?'
50
+ name: 'Mechanize'
51
+ version: '$1'
52
+ url: 'http://github.com/sparklemotion/mechanize/'
53
+
54
+ - regex: 'aiohttp(?:/(\d+[\.\d]+))?'
55
+ name: 'aiohttp'
56
+ version: '$1'
57
+
58
+ - regex: 'Google-HTTP-Java-Client(?:/(\d+[\.\d\w-]+))?'
59
+ name: 'Google HTTP Java Client'
60
+ version: '$1'
61
+
62
+ - regex: 'WWW-Mechanize(?:/(\d+[\.\d]+))?'
63
+ name: 'WWW-Mechanize'
64
+ version: '$1'
65
+
66
+ - regex: 'Faraday(?: v(\d+[\.\d]+))?'
67
+ name: 'Faraday'
68
+ version: '$1'
69
+
70
+ - regex: '(?:Go-http-client|Go )/?(?:(\d+[\.\d]+))?(?: package http)?'
71
+ name: 'Go-http-client'
72
+ version: '$1'
73
+
74
+ - regex: 'urlgrabber(?:/(\d+[\.\d]+))?'
75
+ name: 'urlgrabber (yum)'
76
+ version: '$1'
77
+
78
+ - regex: 'libdnf(?:/(\d+[\.\d]+))?'
79
+ name: 'libdnf'
80
+ version: '$1'
81
+
82
+ - regex: 'HTTPie(?:/(\d+[\.\d]+))?'
83
+ name: 'HTTPie'
84
+ version: '$1'
85
+
86
+ - regex: 'rest-client/(\d+[\.\d]+).*ruby'
87
+ name: 'REST Client for Ruby'
88
+ version: '$1'
89
+
90
+ - regex: 'RestSharp/(\d+[\.\d]+)'
91
+ name: 'RestSharp'
92
+ version: '$1'
93
+ url: 'http://restsharp.org/'
94
+
95
+ - regex: 'scalaj-http/(\d+[\.\d]+)'
96
+ name: 'ScalaJ HTTP'
97
+ version: '$1'
98
+ url: 'https://github.com/scalaj/scalaj-http'
99
+
100
+ - regex: 'REST::Client/(\d+)'
101
+ name: 'Perl REST::Client'
102
+ version: '$1'
103
+ url: 'https://metacpan.org/pod/REST::Client'
104
+
105
+ - regex: 'node-fetch/(\d+[\.\d]+)'
106
+ name: 'Node Fetch'
107
+ version: $1
108
+ url: 'https://github.com/node-fetch/node-fetch'
109
+
110
+ - regex: 'ReactorNetty/(\d+[\.\d]+)'
111
+ name: 'ReactorNetty'
112
+ version: $1
113
+ url: 'https://github.com/reactor/reactor-netty'
@@ -1,10 +1,14 @@
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
+ - regex: 'Audacious(?:[ /]([\d\.]+))?'
9
+ name: 'Audacious'
10
+ version: '$1'
11
+
8
12
  - regex: 'Banshee(?:[ /]([\d\.]+))?'
9
13
  name: 'Banshee'
10
14
  version: '$1'
@@ -17,13 +21,21 @@
17
21
  name: 'Clementine'
18
22
  version: '$1'
19
23
 
20
- - regex: 'iTunes(?:/([\d\.]+))?'
24
+ - regex: 'Deezer(?:/([\d\.]+))?'
25
+ name: 'Deezer'
26
+ version: '$1'
27
+
28
+ - regex: 'iTunes(?:-iPhone|-iPad)?(?:/([\d\.]+))?'
21
29
  name: 'iTunes'
22
30
  version: '$1'
23
31
 
24
32
  - regex: 'FlyCast(?:/([\d\.]+))?'
25
33
  name: 'FlyCast'
26
34
  version: '$1'
35
+
36
+ - regex: 'foobar2000(?:/([\d\.]+))?'
37
+ name: 'Foobar2000'
38
+ version: '$1'
27
39
 
28
40
  - regex: 'MediaMonkey(?:[ /](\d+[\.\d]+))?'
29
41
  name: 'MediaMonkey'
@@ -77,6 +89,14 @@
77
89
  name: 'Stagefright'
78
90
  version: '$1'
79
91
 
80
- - regex: 'Instacast(?:/([\d\.]+))? CFNetwork/([\d\.]+)'
81
- name: 'Instacast'
82
- version: '$1'
92
+ - regex: 'GoogleChirp(?:/(\d+[\.\d]+))?'
93
+ name: 'Google Podcasts'
94
+ version: '$1'
95
+
96
+ - regex: 'Music Player Daemon (?:(\d+[\.\d]+))?'
97
+ name: 'Music Player Daemon'
98
+ version: '$1'
99
+
100
+ - regex: 'mpv (?:(\d+[\.\d]+))?'
101
+ name: 'mpv'
102
+ version: '$1'
@@ -1,7 +1,7 @@
1
1
  ###############
2
2
  # Device Detector - The Universal Device Detection library for parsing User Agents
3
3
  #
4
- # @link http://piwik.org
4
+ # @link https://matomo.org
5
5
  # @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
6
6
  ###############
7
7
 
@@ -10,16 +10,38 @@
10
10
  name: 'AndroidDownloadManager'
11
11
  version: '$1'
12
12
 
13
+ # Apple News
14
+ - regex: '(?:Apple)?News(?:[ /][\d\.]+)? Version(?:[ /]([\d\.]+))?'
15
+ name: 'Apple News'
16
+ version: '$1'
17
+
18
+ - regex: 'bPod'
19
+ name: 'bPod'
20
+ version: ''
21
+
22
+ # Facebook Messenger
23
+ - regex: '(?:MessengerForiOS|MESSENGER).(?:FBAV)(?:[ /]([\d\.]+))?'
24
+ name: 'Facebook Messenger'
25
+ version: '$1'
26
+
13
27
  # Facebook
14
28
  - regex: '(?:FBAV|com.facebook.katana)(?:[ /]([\d\.]+))?'
15
29
  name: 'Facebook'
16
30
  version: '$1'
31
+ - regex: '(?:FBAN|FBSV|FBID|FBBV)/'
32
+ name: 'Facebook'
33
+ version: ''
17
34
 
18
35
  # FeedR
19
36
  - regex: 'FeedR(?:/([\d\.]+))?'
20
37
  name: 'FeedR'
21
38
  version: '$1'
22
39
 
40
+ # Google Go
41
+ - regex: 'com.google.android.apps.searchlite'
42
+ name: 'Google Go'
43
+ version: ''
44
+
23
45
  # Google Play Kiosk
24
46
  - regex: 'com.google.android.apps.magazines'
25
47
  name: 'Google Play Newsstand'
@@ -35,6 +57,11 @@
35
57
  name: 'WeChat'
36
58
  version: '$1'
37
59
 
60
+ # DingTalk
61
+ - regex: 'DingTalk/([0-9\.]+)'
62
+ name: 'DingTalk'
63
+ version: '$1'
64
+
38
65
  # Sina Weibo
39
66
  - regex: '.*__weibo__([0-9\.]+)__'
40
67
  name: 'Sina Weibo'
@@ -45,6 +72,11 @@
45
72
  name: 'Pinterest'
46
73
  version: '$1'
47
74
 
75
+ # Podcatcher Deluxe
76
+ - regex: 'Podcatcher Deluxe'
77
+ name: 'Podcatcher Deluxe'
78
+ version: ''
79
+
48
80
  # YouTube
49
81
  - regex: 'com.google.android.youtube(?:/([\d\.]+))?'
50
82
  name: 'YouTube'
@@ -63,4 +95,183 @@
63
95
  # Line
64
96
  - regex: 'Line(?:[ /]([\d\.]+))'
65
97
  name: 'Line'
66
- version: '$1'
98
+ version: '$1'
99
+
100
+ # Instacast
101
+ - regex: 'Instacast(?:HD)?/(\d\.[\d\.abc]+) CFNetwork/([\d\.]+) Darwin/([\d\.]+)'
102
+ name: 'Instacast'
103
+ version: '$1'
104
+ -
105
+ regex: 'Podcasts/([\d\.]+)'
106
+ name: 'Podcasts'
107
+ version: '$1'
108
+ -
109
+ regex: 'Pocket Casts(?:, (?:Android|iOS) v([\d\.]+))?'
110
+ name: 'Pocket Casts'
111
+ version: '$1'
112
+ -
113
+ regex: 'Podcat/([\d\.]+)'
114
+ name: 'Podcat'
115
+ version: '$1'
116
+
117
+ -
118
+ regex: 'BeyondPod'
119
+ name: 'BeyondPod'
120
+ version:
121
+ -
122
+ regex: 'AntennaPod/?([\d\.]+)?'
123
+ name: 'AntennaPod'
124
+ version: '$1'
125
+ -
126
+ regex: 'Overcast/([\d\.]+)'
127
+ name: 'Overcast'
128
+ version: '$1'
129
+ -
130
+ regex: '(?:CastBox|fm.castbox.audiobook.radio.podcast)/?([\d\.]+)?'
131
+ name: 'CastBox'
132
+ version: '$1'
133
+ -
134
+ regex: 'Player FM'
135
+ name: 'Player FM'
136
+ version: ''
137
+ -
138
+ regex: 'Podkicker(?: Pro)?/([\d\.]+)'
139
+ name: 'Podkicker'
140
+ version: '$1'
141
+ -
142
+ regex: 'PodcastRepublic/([\d\.]+)'
143
+ name: 'Podcast Republic'
144
+ version: '$1'
145
+ -
146
+ regex: 'Castro/(\d+)'
147
+ name: 'Castro'
148
+ version: '$1'
149
+ -
150
+ regex: 'Castro 2 ([\d\.]+)/[\d]+ Like iTunes'
151
+ name: 'Castro 2'
152
+ version: '$1'
153
+ -
154
+ regex: 'Castro 2'
155
+ name: 'Castro 2'
156
+ version: ''
157
+ -
158
+ regex: 'DoggCatcher'
159
+ name: 'DoggCatcher'
160
+ version:
161
+ -
162
+ regex: 'PodcastAddict/v([\d]+)'
163
+ name: 'Podcast & Radio Addict'
164
+ version: '$1'
165
+ -
166
+ regex: 'Podcat/([\d]+) CFNetwork/([\d\.]+) Darwin/([\d\.]+)'
167
+ name: 'Podcat'
168
+ version: '$1'
169
+ -
170
+ regex: 'i[cC]atcher[^\d]+([\d\.]+)'
171
+ name: 'iCatcher'
172
+ version: '$1'
173
+ -
174
+ regex: 'YelpApp/([\d\.]+)'
175
+ name: 'Yelp Mobile'
176
+ version: '$1'
177
+ -
178
+ regex: 'jp.co.yahoo.android.yjtop/([\d\.]+)'
179
+ name: 'Yahoo! Japan'
180
+ version: '$1'
181
+ -
182
+ regex: 'RSSRadio/([\d]+)?'
183
+ name: 'RSSRadio'
184
+ version: '$1'
185
+ -
186
+ regex: 'SogouSearch Android[\d\.]+ version([\d\.]+)?'
187
+ name: 'SogouSearch App'
188
+ version: '$1'
189
+ -
190
+ regex: 'NewsArticle/([\d\.]+)?'
191
+ name: 'NewsArticle App'
192
+ version: '$1'
193
+ -
194
+ regex: 'tieba/([\d\.]+)?'
195
+ name: 'tieba'
196
+ version: '$1'
197
+ -
198
+ regex: 'com\.douban\.group/([\d\.]+)?'
199
+ name: 'douban App'
200
+ version: '$1'
201
+ -
202
+ regex: 'BingWeb/([\d\.]+)?'
203
+ name: 'BingWebApp'
204
+ version: '$1'
205
+ -
206
+ regex: 'GSA/([\d\.]+)?'
207
+ name: 'Google Search App'
208
+ version: '$1'
209
+ -
210
+ regex: 'Flipboard/([\d\.]+)?'
211
+ name: 'Flipboard App'
212
+ version: '$1'
213
+ -
214
+ regex: 'Instagram[ /]([\d\.]+)?'
215
+ name: 'Instagram App'
216
+ version: '$1'
217
+ -
218
+ regex: 'baiduboxapp/([\d\.]+)?'
219
+ name: 'Baidu Box App'
220
+ version: '$1'
221
+ -
222
+ regex: 'Crosswalk(?!.*(?:Streamy|QwantMobile))/([\d\.]+)?'
223
+ name: 'CrosswalkApp'
224
+ version: '$1'
225
+ -
226
+ regex: 'Twitter for iPhone[/]?([\d\.]+)?'
227
+ name: 'Twitter'
228
+ version: '$1'
229
+ -
230
+ regex: 'Twitter/([\d\.]+)'
231
+ name: 'Twitter'
232
+ version: '$1'
233
+ -
234
+ regex: 'TwitterAndroid[/]?([\d\.]+)?'
235
+ name: 'Twitter'
236
+ version: '$1'
237
+
238
+ -
239
+ regex: 'TopBuzz/([\d\.]+)'
240
+ name: 'TopBuzz'
241
+ version: '$1'
242
+ -
243
+ regex: 'Snapchat/([\d\.]+)'
244
+ name: 'Snapchat'
245
+ version: '$1'
246
+
247
+ # UnityPlayer
248
+ - regex: 'UnityPlayer/([\d\.]+)'
249
+ name: 'UnityPlayer'
250
+ version: '$1'
251
+
252
+ # (https://play.google.com/store/apps/details?id=cl.uchile.ing.adi.ucursos)
253
+ - regex: 'UCURSOS/v([\d\.]+)'
254
+ name: 'U-Cursos'
255
+ version: '$1'
256
+
257
+ # HeyTabBrowser or HeyTabAccount
258
+ - regex: 'HeyTapBrowser/([\d\.]+)'
259
+ name: 'HeyTapBrowser'
260
+ version: '$1'
261
+
262
+ # Roblox App
263
+ - regex: 'RobloxApp/([\d\.]+)'
264
+ name: 'Roblox'
265
+ version: '$1'
266
+
267
+ - regex: 'Viber/([\d\.]+)'
268
+ name: 'Viber'
269
+ version: '$1'
270
+
271
+ - regex: 'Siri/1'
272
+ name: 'Siri'
273
+ version: '1.0'
274
+
275
+ - regex: 'LinkedIn/([\d\.]+)'
276
+ name: 'LinkedIn'
277
+ version: '$1'