device_detector 1.0.2 → 1.0.6

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 (112) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +49 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +5 -6
  5. data/CHANGELOG.md +11 -0
  6. data/README.md +8 -7
  7. data/Rakefile +7 -4
  8. data/device_detector.gemspec +1 -0
  9. data/lib/device_detector/bot.rb +2 -2
  10. data/lib/device_detector/browser.rb +364 -0
  11. data/lib/device_detector/client.rb +11 -2
  12. data/lib/device_detector/device.rb +1168 -22
  13. data/lib/device_detector/memory_cache.rb +5 -5
  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 +148 -116
  18. data/lib/device_detector/parser.rb +22 -9
  19. data/lib/device_detector/version.rb +1 -1
  20. data/lib/device_detector/version_extractor.rb +10 -2
  21. data/lib/device_detector.rb +73 -40
  22. data/regexes/bots.yml +909 -59
  23. data/regexes/client/browser_engine.yml +14 -2
  24. data/regexes/client/browsers.yml +1356 -241
  25. data/regexes/client/feed_readers.yml +10 -10
  26. data/regexes/client/libraries.yml +75 -1
  27. data/regexes/client/mediaplayers.yml +39 -3
  28. data/regexes/client/mobile_apps.yml +524 -45
  29. data/regexes/client/pim.yml +55 -2
  30. data/regexes/device/cameras.yml +6 -6
  31. data/regexes/device/car_browsers.yml +23 -3
  32. data/regexes/device/consoles.yml +9 -3
  33. data/regexes/device/mobiles.yml +16903 -3199
  34. data/regexes/device/notebooks.yml +114 -0
  35. data/regexes/device/portable_media_player.yml +20 -3
  36. data/regexes/device/shell_tv.yml +117 -0
  37. data/regexes/device/televisions.yml +440 -35
  38. data/regexes/oss.yml +603 -165
  39. data/regexes/vendorfragments.yml +6 -2
  40. data/spec/device_detector/concrete_user_agent_spec.rb +38 -51
  41. data/spec/device_detector/detector_fixtures_spec.rb +36 -37
  42. data/spec/device_detector/device_spec.rb +52 -56
  43. data/spec/device_detector/memory_cache_spec.rb +19 -19
  44. data/spec/device_detector/model_extractor_spec.rb +3 -3
  45. data/spec/device_detector/version_extractor_spec.rb +5 -6
  46. data/spec/device_detector_spec.rb +26 -26
  47. data/spec/fixtures/client/browser.yml +2617 -555
  48. data/spec/fixtures/client/feed_reader.yml +34 -52
  49. data/spec/fixtures/client/library.yml +129 -38
  50. data/spec/fixtures/client/mediaplayer.yml +59 -28
  51. data/spec/fixtures/client/mobile_app.yml +589 -20
  52. data/spec/fixtures/client/pim.yml +92 -19
  53. data/spec/fixtures/detector/bots.yml +1749 -458
  54. data/spec/fixtures/detector/camera.yml +30 -24
  55. data/spec/fixtures/detector/car_browser.yml +199 -3
  56. data/spec/fixtures/detector/console.yml +107 -45
  57. data/spec/fixtures/detector/desktop.yml +3216 -758
  58. data/spec/fixtures/detector/feature_phone.yml +935 -181
  59. data/spec/fixtures/detector/feed_reader.yml +181 -193
  60. data/spec/fixtures/detector/mediaplayer.yml +157 -60
  61. data/spec/fixtures/detector/mobile_apps.yml +914 -136
  62. data/spec/fixtures/detector/peripheral.yml +271 -0
  63. data/spec/fixtures/detector/phablet.yml +5593 -1533
  64. data/spec/fixtures/detector/portable_media_player.yml +398 -32
  65. data/spec/fixtures/detector/smart_display.yml +183 -9
  66. data/spec/fixtures/detector/smart_speaker.yml +60 -0
  67. data/spec/fixtures/detector/smartphone-1.yml +3930 -4239
  68. data/spec/fixtures/detector/smartphone-10.yml +3985 -7366
  69. data/spec/fixtures/detector/smartphone-11.yml +5083 -3784
  70. data/spec/fixtures/detector/smartphone-12.yml +8989 -0
  71. data/spec/fixtures/detector/smartphone-13.yml +9412 -0
  72. data/spec/fixtures/detector/smartphone-14.yml +9477 -0
  73. data/spec/fixtures/detector/smartphone-15.yml +9281 -0
  74. data/spec/fixtures/detector/smartphone-16.yml +9678 -0
  75. data/spec/fixtures/detector/smartphone-17.yml +9965 -0
  76. data/spec/fixtures/detector/smartphone-18.yml +9806 -0
  77. data/spec/fixtures/detector/smartphone-19.yml +9965 -0
  78. data/spec/fixtures/detector/smartphone-2.yml +6670 -4375
  79. data/spec/fixtures/detector/smartphone-20.yml +9710 -0
  80. data/spec/fixtures/detector/smartphone-21.yml +8693 -0
  81. data/spec/fixtures/detector/smartphone-22.yml +10178 -0
  82. data/spec/fixtures/detector/smartphone-23.yml +9453 -0
  83. data/spec/fixtures/detector/smartphone-24.yml +9843 -0
  84. data/spec/fixtures/detector/smartphone-25.yml +9703 -0
  85. data/spec/fixtures/detector/smartphone-26.yml +10007 -0
  86. data/spec/fixtures/detector/smartphone-27.yml +4927 -0
  87. data/spec/fixtures/detector/smartphone-3.yml +4656 -4711
  88. data/spec/fixtures/detector/smartphone-4.yml +3518 -4479
  89. data/spec/fixtures/detector/smartphone-5.yml +3805 -4803
  90. data/spec/fixtures/detector/smartphone-6.yml +3745 -4693
  91. data/spec/fixtures/detector/smartphone-7.yml +3721 -4645
  92. data/spec/fixtures/detector/smartphone-8.yml +4564 -4699
  93. data/spec/fixtures/detector/smartphone-9.yml +3897 -4888
  94. data/spec/fixtures/detector/smartphone.yml +3154 -4141
  95. data/spec/fixtures/detector/tablet-1.yml +4742 -4576
  96. data/spec/fixtures/detector/tablet-2.yml +3803 -4731
  97. data/spec/fixtures/detector/tablet-3.yml +6210 -2309
  98. data/spec/fixtures/detector/tablet-4.yml +9062 -0
  99. data/spec/fixtures/detector/tablet-5.yml +9273 -0
  100. data/spec/fixtures/detector/tablet-6.yml +4588 -0
  101. data/spec/fixtures/detector/tablet.yml +3629 -4613
  102. data/spec/fixtures/detector/tv-1.yml +2501 -0
  103. data/spec/fixtures/detector/tv.yml +8856 -2064
  104. data/spec/fixtures/detector/unknown.yml +412 -587
  105. data/spec/fixtures/detector/wearable.yml +915 -0
  106. data/spec/fixtures/device/camera.yml +4 -3
  107. data/spec/fixtures/device/car_browser.yml +9 -2
  108. data/spec/fixtures/device/console.yml +15 -14
  109. data/spec/fixtures/device/notebook.yml +7 -0
  110. data/spec/fixtures/parser/oss.yml +1392 -21
  111. data/spec/fixtures/parser/vendorfragments.yml +57 -51
  112. metadata +70 -4
@@ -1,7 +1,7 @@
1
1
  ###############
2
2
  # Device Detector - The Universal Device Detection library for parsing User Agents
3
3
  #
4
- # @link http://piwik.org
4
+ # @link https://matomo.org
5
5
  # @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
6
6
  ###############
7
7
 
@@ -19,6 +19,11 @@
19
19
  name: 'bPod'
20
20
  version: ''
21
21
 
22
+ # Facebook Messenger Lite
23
+ - regex: 'MessengerLiteForiOS.(?:FBAV)(?:[ /]([\d\.]+))?'
24
+ name: 'Facebook Messenger Lite'
25
+ version: '$1'
26
+
22
27
  # Facebook Messenger
23
28
  - regex: '(?:MessengerForiOS|MESSENGER).(?:FBAV)(?:[ /]([\d\.]+))?'
24
29
  name: 'Facebook Messenger'
@@ -28,12 +33,20 @@
28
33
  - regex: '(?:FBAV|com.facebook.katana)(?:[ /]([\d\.]+))?'
29
34
  name: 'Facebook'
30
35
  version: '$1'
36
+ - regex: '(?:FBAN|FBSV|FBID|FBBV)/'
37
+ name: 'Facebook'
38
+ version: ''
31
39
 
32
40
  # FeedR
33
41
  - regex: 'FeedR(?:/([\d\.]+))?'
34
42
  name: 'FeedR'
35
43
  version: '$1'
36
44
 
45
+ # Google Go
46
+ - regex: 'com.google.android.apps.searchlite'
47
+ name: 'Google Go'
48
+ version: ''
49
+
37
50
  # Google Play Kiosk
38
51
  - regex: 'com.google.android.apps.magazines'
39
52
  name: 'Google Play Newsstand'
@@ -45,9 +58,17 @@
45
58
  version: ''
46
59
 
47
60
  # WeChat
48
- - regex: 'MicroMessenger/([^ ]+)'
61
+ - regex: 'MicroMessenger/([^; ]+)'
49
62
  name: 'WeChat'
50
63
  version: '$1'
64
+ - regex: 'WeChatShareExtensionNew/([\d\.]+)'
65
+ name: 'WeChat Share Extension'
66
+ version: '$1'
67
+
68
+ # DingTalk
69
+ - regex: 'DingTalk/([0-9\.]+)'
70
+ name: 'DingTalk'
71
+ version: '$1'
51
72
 
52
73
  # Sina Weibo
53
74
  - regex: '.*__weibo__([0-9\.]+)__'
@@ -55,7 +76,7 @@
55
76
  version: '$1'
56
77
 
57
78
  # Pinterest
58
- - regex: 'Pinterest(?:/([\d\.]+))?'
79
+ - regex: 'Pinterest(?: for (?:Android|iOS))?(?:/([\d\.]+))?'
59
80
  name: 'Pinterest'
60
81
  version: '$1'
61
82
 
@@ -69,6 +90,16 @@
69
90
  name: 'YouTube'
70
91
  version: '$1'
71
92
 
93
+ # Netflix (https://play.google.com/store/apps/details?id=com.netflix.mediaclient)
94
+ - regex: 'com.netflix.mediaclient(?:/(\d+\.[\d\.]+))?'
95
+ name: 'Netflix'
96
+ version: '$1'
97
+
98
+ # Downcast (www.downcastapp.com | https://apps.apple.com/us/app/downcast/id393858566)
99
+ - regex: 'Downcast/(\d+\.[\d\.]+)?(?:.+(?:!Mac)|$)'
100
+ name: 'Downcast'
101
+ version: '$1'
102
+
72
103
  # AFNetworking generic
73
104
  - regex: '([^/]+)/(\d+(?:\.\d+)+) \((?:iPhone|iPad); iOS [0-9\.]+; Scale/[0-9\.]+\)'
74
105
  name: '$1'
@@ -88,81 +119,529 @@
88
119
  - regex: 'Instacast(?:HD)?/(\d\.[\d\.abc]+) CFNetwork/([\d\.]+) Darwin/([\d\.]+)'
89
120
  name: 'Instacast'
90
121
  version: '$1'
91
- -
92
- regex: 'Podcasts/([\d\.]+)'
122
+ - regex: 'Podcasts/([\d\.]+)'
93
123
  name: 'Podcasts'
94
124
  version: '$1'
95
- -
96
- regex: 'Pocket Casts(?:, (?:Android|iOS) v([\d\.]+))?'
125
+ - regex: 'Pocket Casts(?:, (?:Android|iOS) v([\d\.]+))?'
97
126
  name: 'Pocket Casts'
98
127
  version: '$1'
99
- -
100
- regex: 'Podcat/([\d\.]+)'
128
+ - regex: 'Podcat/([\d\.]+)'
101
129
  name: 'Podcat'
102
130
  version: '$1'
103
-
104
- -
105
- regex: 'BeyondPod'
131
+ - regex: 'BeyondPod'
106
132
  name: 'BeyondPod'
107
133
  version:
108
- -
109
- regex: 'AntennaPod/?([\d\.]+)?'
134
+ - regex: 'AntennaPod/?([\d\.]+)?'
110
135
  name: 'AntennaPod'
111
136
  version: '$1'
112
- -
113
- regex: 'Overcast/([\d\.]+)'
137
+ - regex: 'Overcast/([\d\.]+)'
114
138
  name: 'Overcast'
115
139
  version: '$1'
116
- -
117
- regex: 'Player FM'
140
+ - regex: '(?:CastBox|fm.castbox.audiobook.radio.podcast)/?([\d\.]+)?'
141
+ name: 'CastBox'
142
+ version: '$1'
143
+ - regex: 'Player FM'
118
144
  name: 'Player FM'
119
145
  version: ''
120
- -
121
- regex: 'Podkicker(?: Pro)?/([\d\.]+)'
122
- name: 'Podkicker'
123
- version: '$1'
124
- -
125
- regex: 'PodcastRepublic/([\d\.]+)'
146
+ - regex: 'Podkicker( (?:Pro|Classic))?/([\d\.]+)'
147
+ name: 'Podkicker$1'
148
+ version: '$2'
149
+ - regex: 'PodcastRepublic/([\d\.]+)'
126
150
  name: 'Podcast Republic'
127
151
  version: '$1'
128
- -
129
- regex: 'Castro/(\d+)'
152
+ - regex: 'Castro/(\d+)'
130
153
  name: 'Castro'
131
154
  version: '$1'
132
- -
133
- regex: 'Castro 2 ([\d\.]+)/[\d]+ Like iTunes'
155
+ - regex: 'Castro 2 ([\d\.]+)/[\d]+ Like iTunes'
134
156
  name: 'Castro 2'
135
157
  version: '$1'
136
- -
137
- regex: 'Castro 2'
158
+ - regex: 'Castro 2'
138
159
  name: 'Castro 2'
139
160
  version: ''
140
- -
141
- regex: 'DoggCatcher'
161
+ - regex: 'DoggCatcher'
142
162
  name: 'DoggCatcher'
143
163
  version:
144
- -
145
- regex: 'PodcastAddict/v([\d]+)'
164
+ - regex: 'PodcastAddict/v([\d]+)'
146
165
  name: 'Podcast & Radio Addict'
147
166
  version: '$1'
148
- -
149
- regex: 'Podcat/([\d]+) CFNetwork/([\d\.]+) Darwin/([\d\.]+)'
167
+ - regex: 'Podcat(?:%202)?/([\d]+) CFNetwork'
150
168
  name: 'Podcat'
151
169
  version: '$1'
152
- -
153
- regex: 'i[cC]atcher[^\d]+([\d\.]+)'
170
+ - regex: 'iCatcher[^\d]+([\d\.]+)'
154
171
  name: 'iCatcher'
155
172
  version: '$1'
156
- -
157
- regex: 'YelpApp/([\d\.]+)'
173
+ - regex: 'YelpApp/([\d\.]+)'
158
174
  name: 'Yelp Mobile'
159
175
  version: '$1'
160
- -
161
- regex: 'jp.co.yahoo.android.yjtop/([\d\.]+)'
176
+ - regex: 'jp.co.yahoo.android.yjtop/([\d\.]+)'
162
177
  name: 'Yahoo! Japan'
163
178
  version: '$1'
164
- -
165
- regex: 'RSSRadio/([\d]+)?'
179
+ - regex: 'RSSRadio/([\d]+)?'
166
180
  name: 'RSSRadio'
167
181
  version: '$1'
168
-
182
+ - regex: 'SogouSearch Android[\d\.]+ version([\d\.]+)?'
183
+ name: 'SogouSearch App'
184
+ version: '$1'
185
+ - regex: 'NewsArticle/([\d\.]+)?'
186
+ name: 'NewsArticle App'
187
+ version: '$1'
188
+ - regex: 'tieba/([\d\.]+)?'
189
+ name: 'tieba'
190
+ version: '$1'
191
+ - regex: 'com\.douban\.group/([\d\.]+)?'
192
+ name: 'douban App'
193
+ version: '$1'
194
+ - regex: 'BingWeb/([\d\.]+)?'
195
+ name: 'BingWebApp'
196
+ version: '$1'
197
+ - regex: '(?:com.google.GoogleMobile|GSA)/([\d\.]+)?'
198
+ name: 'Google Search App'
199
+ version: '$1'
200
+ - regex: 'Flipboard/([\d\.]+)?'
201
+ name: 'Flipboard App'
202
+ version: '$1'
203
+ - regex: 'Instagram[ /]([\d\.]+)?'
204
+ name: 'Instagram App'
205
+ version: '$1'
206
+ - regex: 'baiduboxapp/([\d\.]+)?'
207
+ name: 'Baidu Box App'
208
+ version: '$1'
209
+ - regex: 'Crosswalk(?!.*(?:Streamy|QwantMobile))/([\d\.]+)?'
210
+ name: 'CrosswalkApp'
211
+ version: '$1'
212
+ - regex: 'Twitter for iPhone[/]?([\d\.]+)?'
213
+ name: 'Twitter'
214
+ version: '$1'
215
+ - regex: 'Twitter/([\d\.]+)'
216
+ name: 'Twitter'
217
+ version: '$1'
218
+ - regex: 'TwitterAndroid[/]?([\d\.]+)?'
219
+ name: 'Twitter'
220
+ version: '$1'
221
+ # Pocket Casts (https://pocketcasts.com)
222
+ - regex: '^Pocket Casts'
223
+ name: 'Pocket Casts'
224
+ version: ''
225
+ # Gaana (https://gaana.com)
226
+ - regex: '^GaanaAndroid-([\d\.]+)'
227
+ name: 'Gaana'
228
+ version: '$1'
229
+ - regex: 'TopBuzz/([\d\.]+)'
230
+ name: 'TopBuzz'
231
+ version: '$1'
232
+ - regex: 'Snapchat/([\d\.]+)'
233
+ name: 'Snapchat'
234
+ version: '$1'
235
+ - regex: 'AhaRadio2/([\d\.]+)'
236
+ name: 'Aha Radio 2'
237
+ version: '$1'
238
+ # Unibox (https://apps.apple.com/app/id933879046)
239
+ - regex: 'Unibox/([\d\.]+)'
240
+ name: 'Unibox'
241
+ version: ''
242
+
243
+ # Strimio (https://www.strimio.com/)
244
+ - regex: 'strimio(?:-desktop)/(\d+\.(?:[\.\d]+))?'
245
+ name: 'Strimio'
246
+ version: '$1'
247
+
248
+ # UnityPlayer
249
+ - regex: 'UnityPlayer/([\d\.]+)'
250
+ name: 'UnityPlayer'
251
+ version: '$1'
252
+
253
+ # (https://play.google.com/store/apps/details?id=cl.uchile.ing.adi.ucursos)
254
+ - regex: 'UCURSOS/v([\d\.]+)'
255
+ name: 'U-Cursos'
256
+ version: '$1'
257
+
258
+ # HeyTabBrowser or HeyTabAccount
259
+ - regex: 'HeyTapBrowser/([\d\.]+)'
260
+ name: 'HeyTapBrowser'
261
+ version: '$1'
262
+
263
+ # Roblox App
264
+ - regex: 'RobloxApp/([\d\.]+)'
265
+ name: 'Roblox'
266
+ version: '$1'
267
+
268
+ - regex: 'Viber/([\d\.]+)'
269
+ name: 'Viber'
270
+ version: '$1'
271
+
272
+ - regex: 'Siri/1'
273
+ name: 'Siri'
274
+ version: '1.0'
275
+
276
+ - regex: 'LinkedIn(?:App)?(?:/([\d\.]+))?'
277
+ name: 'LinkedIn'
278
+ version: '$1'
279
+
280
+ # https://apps.apple.com/ru/app/instapaper/id288545208
281
+ - regex: 'Instapaper/([\d\.]+)'
282
+ name: 'Instapaper'
283
+ version: '$1'
284
+
285
+ # https://apps.apple.com/us/app/keeper-password-manager/id287170072
286
+ - regex: 'Keeper/([\d\.]+)'
287
+ name: 'Keeper Password Manager'
288
+ version: '$1'
289
+
290
+ # https://apps.apple.com/us/app/skyeng-teachers/id1483049537
291
+ - regex: 'Skyeng Teachers/([\d\.]+)'
292
+ name: 'Skyeng Teachers'
293
+ version: '$1'
294
+
295
+ - regex: 'Kik/([\d\.]+) \(Android'
296
+ name: 'Kik'
297
+ version: '$1'
298
+
299
+ - regex: 'Procast/?([\d\.]+)?'
300
+ name: 'Procast'
301
+ version: '$1'
302
+
303
+ # DeviantArt (https://apps.apple.com/us/app/deviantart/id925219396)
304
+ - regex: 'DeviantArt/([\d\.]+)'
305
+ name: 'DeviantArt'
306
+ version: ''
307
+
308
+ # Discord (https://apps.apple.com/us/app/discord-talk-chat-hang-out/id985746746)
309
+ - regex: 'Discord/([\d\.]+)'
310
+ name: 'Discord'
311
+ version: ''
312
+
313
+ # Covenant Eyes (https://apps.apple.com/us/app/covenant-eyes/id335318146)
314
+ - regex: 'Covenant%20Eyes/([\d\.]+)'
315
+ name: 'Covenant Eyes'
316
+ version: '$1'
317
+
318
+ # HP Smart (https://apps.apple.com/us/app/hp-smart/id469284907)
319
+ - regex: 'HP%20Smart/([\d\.]+)'
320
+ name: 'HP Smart'
321
+ version: ''
322
+
323
+ # Bitsboard (https://apps.apple.com/us/app/bitsboard-flashcards-games/id516842210)
324
+ - regex: 'Bitsboard/([\d\.]+)'
325
+ name: 'Bitsboard'
326
+ version: '$1'
327
+
328
+ # BetBull (https://apps.apple.com/us/app/betbull-sport-tips-casino/id1032680895)
329
+ - regex: 'Betbull/([\d\.]+)'
330
+ name: 'BetBull'
331
+ version: ''
332
+
333
+ # U-Cursos (https://apps.apple.com/us/app/u-cursos/id834515435)
334
+ - regex: 'U-Cursos/([\d\.]+)'
335
+ name: 'U-Cursos'
336
+ version: ''
337
+
338
+ # https://apps.apple.com/mt/app/1password-password-manager/id568903335
339
+ - regex: '1PasswordThumbs/([\d\.]+)'
340
+ name: '1Password'
341
+ version: '$1'
342
+
343
+ - regex: '(?:Microsoft Office )?(Access|Excel|OneDrive for Business|OneNote|PowerPoint|Project|Publisher|Visio|Word)[ /]([\d\.]+)'
344
+ name: 'Microsoft Office $1'
345
+ version: '$2'
346
+
347
+ # https://apps.apple.com/us/app/microsoft-onedrive/id477537958
348
+ - regex: 'OneDriveiOSApp/([\d\.]+)'
349
+ name: 'Microsoft OneDrive'
350
+ version: '$1'
351
+
352
+ - regex: 'Microsoft Office Mobile/([\d\.]+)'
353
+ name: 'Microsoft Office Mobile'
354
+ version: '$1'
355
+
356
+ - regex: 'OC/([\d\.]+) \(Skype for Business\)'
357
+ name: 'Skype for Business'
358
+ version: '$1'
359
+
360
+ # TikTok (https://apps.apple.com/app/id835599320 | https://play.google.com/store/apps/details?id=com.zhiliaoapp.musically)
361
+ - regex: '(?:TikTok[/ ]|musical_ly_|AppName/musical_ly app_version/)(\d+\.(?:[\.\d]+))?'
362
+ name: 'TikTok'
363
+ version: '$1'
364
+
365
+ # https://apps.apple.com/app/id393499958
366
+ - regex: 'NAVER/(\d+[\.\d]+) CFNetwork'
367
+ name: 'Naver'
368
+ version: '$1'
369
+
370
+ # https://apps.apple.com/app/id1026349850
371
+ - regex: 'Copied/(\d+[\.\d]+) CFNetwork'
372
+ name: 'Copied'
373
+ version: ''
374
+
375
+ # https://apps.apple.com/app/id448639966
376
+ - regex: 'Pic%20Collage/(\d+[\.\d]+) CFNetwork'
377
+ name: 'Pic Collage'
378
+ version: '$1'
379
+
380
+ # https://apps.apple.com/app/id506003812
381
+ - regex: 'Papers/(\d+[\.\d]+) CFNetwork'
382
+ name: 'Papers'
383
+ version: '$1'
384
+
385
+ # https://apps.apple.com/app/id331787573
386
+ - regex: 'RoboForm/(\d+[\.\d]+) CFNetwork'
387
+ name: 'RoboForm'
388
+ version: ''
389
+
390
+ # https://apps.apple.com/app/id618783545
391
+ - regex: 'Slack/(\d+[\.\d]+) CFNetwork'
392
+ name: 'Slack'
393
+ version: ''
394
+
395
+ # https://apps.apple.com/us/app/id362057947
396
+ - regex: 'KAKAOTALK (\d+\.(?:[\.\d]+))?'
397
+ name: 'KakaoTalk'
398
+ version: '$1'
399
+
400
+ # https://apps.apple.com/us/app/shopee-t%E1%BA%BFt-sale-27-01/id959841449
401
+ - regex: 'ShopeeVN/([\d\.]+)'
402
+ name: 'Shopee'
403
+ version: '$1'
404
+
405
+ # https://apps.apple.com/us/app/sport1/id1185932089
406
+ - regex: 'SPORT1/([\d\.]+)'
407
+ name: 'SPORT1'
408
+ version: ''
409
+
410
+ # https://apps.apple.com/us/app/clovia-lingerie-shopping-app/id1243996857
411
+ - regex: 'Clovia/([\d\.]+)'
412
+ name: 'Clovia'
413
+ version: '$1'
414
+
415
+ # https://apps.apple.com/us/app/showme-interactive-whiteboard/id445066279
416
+ - regex: 'ShowMe/([\d\.]+)'
417
+ name: 'ShowMe'
418
+ version: '$1'
419
+
420
+ # https://apps.apple.com/us/app/wattpad-read-write-stories/id306310789
421
+ - regex: 'Wattpad/([\d\.]+)'
422
+ name: 'Wattpad'
423
+ version: '$1'
424
+
425
+ # https://apps.apple.com/us/app/the-wall-street-journal/id364387007
426
+ - regex: 'WSJ/([\d\.]+)'
427
+ name: 'The Wall Street Journal'
428
+ version: ''
429
+
430
+ # https://apps.apple.com/us/app/wh-question-cards-pro-who-what-when-where-why/id544870563
431
+ - regex: 'WH%20Questions/([\d\.]+)'
432
+ name: 'WH Questions'
433
+ version: '$1'
434
+
435
+ # https://apps.apple.com/us/app/whisper-share-express-meet/id506141837
436
+ - regex: 'whisper/([\d\.]+)'
437
+ name: 'Whisper'
438
+ version: ''
439
+
440
+ # https://apps.apple.com/us/app/opal-travel/id941006607
441
+ - regex: 'Opal/([\d\.]+)'
442
+ name: 'Opal Travel'
443
+ version: '$1'
444
+
445
+ # https://apps.apple.com/us/app/zalo/id579523206
446
+ - regex: 'Zalo/([\d\.]+)'
447
+ name: 'Zalo'
448
+ version: '$1'
449
+
450
+ # https://apps.apple.com/us/app/%D1%8F%D0%BD%D0%B4%D0%B5%D0%BA%D1%81/id1050704155
451
+ - regex: 'Yandex/([\d\.]+)'
452
+ name: 'Yandex'
453
+ version: ''
454
+
455
+ - regex: 'Zoho%20Chat/([\d\.]+)'
456
+ name: 'Zoho Chat'
457
+ version: '$1'
458
+
459
+ # Thunder (https://xl11.xunlei.com/)
460
+ - regex: 'Thunder/(\d+[\.\d]+)'
461
+ name: 'Thunder'
462
+ version: '$1'
463
+
464
+ # CGN (https://www.cgn.it/)
465
+ - regex: 'CGNBrowser/(\d+[\.\d]+)'
466
+ name: 'CGN'
467
+ version: '$1'
468
+
469
+ # Podbean (http://podbean.com | https://play.google.com/store/apps/details?id=com.podbean.app.podcast)
470
+ - regex: 'Podbean/.+App (\d+[\.\d]+)'
471
+ name: 'Podbean'
472
+ version: '$1'
473
+
474
+ # Alexa Media Player
475
+ - regex: 'AlexaMediaPlayer/(\d+[\.\d]+)'
476
+ name: 'Alexa Media Player'
477
+ version: '$1'
478
+
479
+ # TuneIn Radio Pro
480
+ - regex: 'TuneIn Radio Pro(?:[^/]+)?/(\d+[\.\d]+)'
481
+ name: 'TuneIn Radio Pro'
482
+ version: '$1'
483
+ - regex: 'TuneIn(?: Radio(?:[^/]+)?)?/(\d+[\.\d]+)'
484
+ name: 'TuneIn Radio'
485
+ version: '$1'
486
+
487
+ # Podcaster
488
+ - regex: 'Podcaster/(\d+[\.\d]+)'
489
+ name: 'Podcaster'
490
+ version: '$1'
491
+
492
+ # DevCasts (https://apps.apple.com/app/id1481596184)
493
+ - regex: 'devcasts/(\d+[\.\d]+)'
494
+ name: 'DevCasts'
495
+ version: '$1'
496
+
497
+ # Swoot
498
+ - regex: 'Swoot/(\d+[\.\d]+)'
499
+ name: 'Swoot'
500
+ version: '$1'
501
+
502
+ # RadioPublic (https://play.google.com/store/apps/details?id=com.radiopublic.android)
503
+ - regex: 'RadioPublic/android-(\d+[\.\d]+)'
504
+ name: 'RadioPublic'
505
+ version: '$1'
506
+
507
+ # Podimo (https://play.google.com/store/apps/details?id=com.podimo)
508
+ - regex: 'Podimo/(\d+[\.\d]+)'
509
+ name: 'Podimo'
510
+ version: '$1'
511
+
512
+ # Evolve Podcast (https://apps.apple.com/us/app/id1199070742)
513
+ - regex: 'com.evolve.podcast/(\d+[\.\d]+)'
514
+ name: 'Evolve Podcast'
515
+ version: '$1'
516
+
517
+ - regex: ' Rocket.Chat\+?/(\d+[\.\d]+)'
518
+ name: 'Rocket Chat'
519
+ version: '$1'
520
+
521
+ # Pandora
522
+ - regex: '^Pandora Audio.+Android'
523
+ name: 'Pandora'
524
+ version: ''
525
+
526
+ # NPR One https://play.google.com/store/apps/details?id=org.npr.one
527
+ - regex: '^NPROneAndroid'
528
+ name: 'NPR One'
529
+ version: ''
530
+
531
+ # Wirtschafts Woche Nachrichte https://apps.apple.com/de/app/wirtschaftswoche-nachrichten/id1339187646
532
+ - regex: '^WirtschaftsWoche-iOS-(\d+[\.\d]+)'
533
+ name: 'Wirtschafts Woche'
534
+ version: '$1'
535
+
536
+ # Outlook https://apps.apple.com/ru/app/microsoft-outlook/id951937596
537
+ - regex: '^Outlook-iOS/.+\((\d+[\.\d]+)\)$'
538
+ name: 'Microsoft Outlook'
539
+ version: '$1'
540
+
541
+ - regex: '^TVirl/(\d+[\.\d]+)'
542
+ name: 'TVirl'
543
+ version: '$1'
544
+
545
+ # ChMate https://play.google.com/store/apps/details?id=jp.co.airfront.android.a2chMate
546
+ - regex: '2?chMate/(\d+[\.\d]+)'
547
+ name: 'ChMate'
548
+ version: '$1'
549
+
550
+ # 2tch https://apps.apple.com/jp/app/2tch/id305982914
551
+ - regex: '2tch/(\d+[\.\d]+)'
552
+ name: '2tch'
553
+ version: '$1'
554
+
555
+ # Ciisaa https://play.google.com/store/apps/details?id=com.gmail.aosoan.ciisaa
556
+ - regex: 'Ciisaa/(\d+[\.\d]+)'
557
+ name: 'Ciisaa'
558
+ version: '$1'
559
+
560
+ # BB2C https://itunes.apple.com/us/app/bb2c/id298820042?mt=8
561
+ - regex: 'BB2C (\d+[\.\d]+)'
562
+ name: 'BB2C'
563
+ version: '$1'
564
+
565
+ # twinkle https://itunes.apple.com/app/twinkle/id463142843
566
+ - regex: 'twinkle/(\d+[\.\d]+)'
567
+ name: 'twinkle'
568
+ version: '$1'
569
+
570
+ # JaneStyle https://apps.apple.com/app/id1157926535
571
+ - regex: 'JaneStyle_iOS/(\d+[\.\d]+)'
572
+ name: 'JaneStyle'
573
+ version: '$1'
574
+
575
+ # Binance https://play.google.com/store/apps/details?id=com.binance.dev
576
+ - regex: 'BNC/.+\(Android (\d+[\.\d]+)\)'
577
+ name: 'Binance'
578
+ version: '$1'
579
+
580
+ # My World https://apps.apple.com/app/id598556821
581
+ - regex: 'ru\.mail\.my/(\d+[\.\d]+)'
582
+ name: 'My World'
583
+ version: '$1'
584
+
585
+ # Odnoklassniki https://play.google.com/store/apps/details?id=ru.ok.android https://apps.apple.com/app/id398465290
586
+ - regex: 'OK(?:Android|iOS)/([\d\.]+)'
587
+ name: 'Odnoklassniki'
588
+ version: '$1'
589
+
590
+ # YakYak https://github.com/yakyak/yakyak
591
+ - regex: 'yakyak/(\d+[\.\d]+)'
592
+ name: 'YakYak'
593
+ version: '$1'
594
+
595
+ # Microsoft Teams (https://www.microsoft.com/en/microsoft-teams/group-chat-software)
596
+ - regex: 'Teams/(\d+[\.\d]+)'
597
+ name: 'Teams'
598
+ version: '$1'
599
+
600
+ # Streamlabs OBS (https://streamlabs.com/)
601
+ - regex: 'StreamlabsOBS/(\d+[\.\d]+)'
602
+ name: 'Streamlabs OBS'
603
+ version: '$1'
604
+
605
+ # Blitz (https://blitz.gg/)
606
+ - regex: 'Blitz/([\d\.]+)'
607
+ name: 'Blitz'
608
+ version: '$1'
609
+
610
+ # OfferUp (https://play.google.com/store/apps/details?id=com.offerup)
611
+ - regex: 'OfferUp/([\d\.]+)'
612
+ name: 'OfferUp'
613
+ version: '$1'
614
+
615
+ # Vuhuv (https://play.google.com/store/apps/details?id=com.vuhuv)
616
+ - regex: 'Vuhuv/([\d\.]+)'
617
+ name: 'Vuhuv'
618
+ version: '$1'
619
+
620
+ - regex: '.+/(?:gfibertv|gftv200)-([\d]+)-'
621
+ name: 'Google Fiber TV'
622
+ version: '$1'
623
+
624
+ # QuickCast (https://play.google.com/store/apps/details?id=com.wukongtv.wkcast.intl)
625
+ - regex: 'QuickCast$'
626
+ name: 'QuickCast'
627
+ version: ''
628
+
629
+ # AliExpress (https://play.google.com/store/apps/details?id=com.alibaba.aliexpresshd)
630
+ - regex: 'Aliexpress(?:Android)?/([\d\.]+)'
631
+ name: 'AliExpress'
632
+ version: '$1'
633
+
634
+ # Blue Proxy (https://play.google.com/store/apps/details?id=com.udicorn.proxy)
635
+ - regex: 'Blue Proxy/([\d\.]+)'
636
+ name: 'Blue Proxy'
637
+ version: '$1'
638
+
639
+ # https://www.n-tv.de/
640
+ - regex: 'ntvmobil/'
641
+ name: 'NTV Mobil'
642
+ version: ''
643
+
644
+ # COAF SMART Citizen (https://apps.apple.com/app/id1478339047)
645
+ - regex: 'COAF%20SMART%20Citizen/'
646
+ name: 'COAF SMART Citizen'
647
+ version: ''