1<!DOCTYPE html> 2<html lang="en" ng-app="RoaringApps"> 3 <head> 4 <meta charset="utf-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 6 <meta name="viewport" content="width=device-width, initial-scale=1"> 7 <meta name="description" content="Contact information for RoaringApps."> 8 <meta name="keywords" content="mac,macos,mac os x,mojave,catalina,big sur,monterey,apple silicon,arm macs,m1 macs,catalyst apps,32-bit apps,app,application,application compatibility,apple,roaringapps,mac app store,table,windows,ios,ios 14,ios 15"> 9 10 <title> 11 Contact â RoaringApps 12 </title> 13 14 15 16 17 <!-- Stylesheets --> 18 <link rel="stylesheet" href="/assets/css/site-2131.css"> 19 20 <!-- Webfonts --> 21 <link href='https://fonts.googleapis.com/css?family=Lato:100,400,700,100italic,400italic,700italic|Rancho|Merriweather+Sans:400,300,300italic,400italic,700,700italic|Cookie' rel='stylesheet' type='text/css'> 22 23 <!--[if lt IE 9]> 24
24<script src="/assets/js/ie8-responsive-file-warning.js"></script>
24 25 <![endif]--> 26 27 <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --> 28 <!--[if lt IE 9]> 29
29<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
29 30
30<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
30 31 <![endif]--> 32 33 <!-- Favicons --> 34 <link rel="shortcut icon" href="/assets/ico/favicon.png"> 35 <link rel="shortcut icon" href="/favicon.ico"> 36 37 <!-- Angular $location.html5Mode = true requires this --> 38 <base href="/">
vendor: 75 bytes, lines 38-40
38 39 40 <script async src="https://www.googletagmanager.com/gtag/js?id=
40G-3G6DX7LY1W
vendor: 18 bytes, lines 40-41
40"></script> 41
41<script> 42
vendor: 158 bytes, lines 42-46
42window.dataLayer = window.dataLayer || []; 43 function gtag(){dataLayer.push(arguments);} 44 gtag('js', new Date()); 45 46 gtag('config', '
46G-3G6DX7LY1W
vendor: 10 bytes, lines 46-47
46'); 47
47</script>
47 48
48<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
48 49
49<script type="text/javascript"> 50 (adsbygoogle = window.adsbygoogle || []).push({ 51 google_ad_client: "ca-pub-4932023458712014", 52 enable_page_level_ads: true 53 }); 54 </script>
54 55
55<script src="/assets/js/vendor/modernizr.js" data-cfasync='true'></script>
55 56 57 <!-- First input delay polyfill - used by Firebase Performance Monitoring. 58 Ref: https://firebase.google.com/docs/perf-mon/get-started-web 59 Ref2: https://github.com/GoogleChromeLabs/first-input-delay 60 --> 61
61<script type="text/javascript"> 62 !function(n,e){var t,o,i,c=[],f={passive:!0,capture:!0},r=new Date,a="pointerup",u="pointercancel";function p(n,c){t||(t=c,o=n,i=new Date,w(e),s())}function s(){o>=0&&o<i-r&&(c.forEach(function(n){n(o,t)}),c=[])}function l(t){if(t.cancelable){var o=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;"pointerdown"==t.type?function(t,o){function i(){p(t,o),r()}function c(){r()}function r(){e(a,i,f),e(u,c,f)}n(a,i,f),n(u,c,f)}(o,t):p(o,t)}}function w(n){["click","mousedown","keydown","touchstart","pointerdown"].forEach(function(e){n(e,l,f)})}w(n),self.perfMetrics=self.perfMetrics||{},self.perfMetrics.onFirstInputDelay=function(n){c.push(n),s()}}(addEventListener,removeEventListener); 63 </script>
63 64 65 <!-- Sentry.io error monitoring --> 66
66<script src="https://js.sentry-cdn.com/9bccfd17b53521da4d6c21b201931d8c.min.js" crossorigin="anonymous"></script>
66 67 68
68<script> 69 window.ENVIRONMENT = 'production'; 70 </script>
70 71 </head> 72 <body class="{{bodyClass}}" ng-cloak> 73 <a class="sr-only" href="#content">Skip to main content</a> 74 75 <div class="wrapper"> 76 77 <!-- Navigation component --> 78 <header class="navbar navbar-fixed-top " role="banner" ng-controller="HeaderCtrl"> 79 <div class="container"> 80 81 <div class="navbar-header"> 82 <button class="navbar-toggle collapsed" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse"> 83 <span class="sr-only">Toggle navigation</span> 84 <svg class="icon"> 85 <use xlink:href="/assets/svg/icons.svg#shape-chevron-down" /> 86 </svg> 87 </button> 88 <a href="/" class="navbar-brand">RoaringApps</a> 89 </div> 90 91 <nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation"> 92 <ul class="nav navbar-nav navbar-centre"> 93 <li> <a href="/apps">Apps</a> </li> 94 95 <li class="dropdown main-dropdown"> 96 <a href="#" class="dropdown-toggle" data-toggle="dropdown">Collections</a> 97 <ul class="dropdown-menu" role="menu"> 98 <li><a href="/collections/list-of-apple-silicon-native-apps">Apps ready for Apple Silicon</a></li> 99 <li><a href="/collections/list-of-native-windows-arm-apps">Apps native on Windows ARM</a></li> 100 <li><a href="/collections/list-of-32-bit-macos-apps">macOS 32-bit apps</a></li> 101 <li><a href="/collections/discontinued-macos-ios-apps">Discontinued apps</a></li> 102 <li><a href="/app-collection/ios-carplay-apps">iOS CarPlay apps</a></li> 103 <li><a href="/app-collections">More collections...</a></li> 104 </ul> 105 </li> 106 107 <li> <a href="/mac-app">Download</a> </li> 108 109 <li> <a href="/about" class="hidden-sm">About</a> </li> 110 <li> <a href="/app/+">Add App</a> </li> 111 </ul> 112 <ul class="nav navbar-nav navbar-right"> 113 <li> <a href="#" data-toggle="modal" data-target="#modal-search" class="with-icon"> 114 <span class="sr-only">Search applications</span> 115 <svg class="icon fav-icon-outline"> 116 <use xlink:href="/assets/svg/icons.svg#shape-magnifying-glass" /> 117 </svg> 118 </a> </li> 119 <li class="hidden-sm"> <a href="#" data-toggle="modal" data-target="#modal-feedback">Feedback</a> </li> 120 121 <li class="dropdown account-dropdown" ng-if="user"> 122 <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{user.username}}</a> 123 <ul class="dropdown-menu pull-right" role="menu"> 124 <li><a href="/account">Account</a></li> 125 <li><a href="/account/watching">Notifications</a></li> 126 127 <li ng-if="user.role == 'admin'" class="divider"></li> 128 <li ng-if="user.role == 'admin'"><a href="/admin/dashboard">Admin dashboard</a></li> 129 <li ng-if="user.role == 'admin'"><a href="/admin/mac-app-stats">Mac app stats</a></li> 130 <li ng-if="user.role == 'admin'"><a href="/admin/comments">Comments review</a></li> 131 <li ng-if="user.role == 'admin'"><a href="/admin/screenshots">Screenshot review</a></li> 132 <li ng-if="user.role == 'admin'"><a href="/admin/tags">Tag manager</a></li> 133 <li ng-if="user.role == 'admin'"><a href="/admin/itunes-importer">iTunes Importer</a></li> 134 <li ng-if="user.role == 'admin'" class="divider"></li> 135 136 <li><a href="{{getLogoutUrl()}}" ng-click="logout($event)">Log out</a></li> 137 </ul> 138 </li> 139 140 <li ng-if="!user"> <a href="{{getRegisterUrl()}}" class="account-register">Register</a> </li> 141 <li ng-if="!user"> <a href="{{getLoginUrl()}}" class="account-signin">Sign in</a> </li> 142 </ul> 143 </nav> 144 145 </div> 146 </header> 147 <section id="main"> 148 149 <div class="container"> 150 <div class="row"> 151 <div class="col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2"> 152 <div class="page-header underline transparent"> 153 <h1>Contact</h1> 154 </div> 155 </div> 156 </div> 157 158 159 <div class="row"> 160 <div class="col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2"> 161 <div class="border-box"> 162 <p>RoaringApps is maintained by Bryce Cameron.</p> 163<p>Iâm always looking for feedback, so if youâve come across a bug, have an idea or a feature youâd like to see, or just want to have a chat, you can email me at <a href="/cdn-cgi/l/email-protection#b0d8d5dcdcdff0c2dfd1c2d9ded
1637d1c0c0c39ed3dfdd"><span class="__cf_email__" data-cfemail="89e1ece5e5e6c9fbe6e8fbe0e7eee8f9f9faa7eae6e4">[email protected]</span></a>.</p> 164<p>If the social scene is more your thing, contact me on Mastodon <a href="https://mastodon.social/@roaringapps">@<span class="__cf_email__" data-cfemail="b8ead7d9cad1d6dff9c8c8cbf8d5d9cbccd7dcd7d696cbd7dbd1d9d4">[email protected]</span></a>.</p> 165<p>RoaringApps is a one-man operation - if youâve found the website or Mac app useful, Iâd love you to <a href="https://www.buymeacoffee.com/roaringapps?ref=racf" target="_blank">shout me a coffee</a> as a token of appreciation.</p> 166 167 </div> 168 </div> 169 </div> 170 171</div> 172 173 174 175 176 </section> 177 178 <!-- Footer --> 179 <footer role="contentinfo"> 180 <div class="container"> 181 182 <div class="row"> 183 <div class="col-md-6"> 184 <p><i>â</i> by Bryce Cameron since 10.7. 185 186 <!-- <a class="bmc-button" target="_blank" href="https://www.buymeacoffee.com/roaringapps?ref=rawf" style="align-items: center;"><span>Buy me a coffee</span><img src="https://cdn.buymeacoffee.com/buttons/bmc-new-btn-logo.svg" alt="Buy me a coffee"></a> --> 187 188 <a class="bmc-button" target="_blank" href="https://www.buymeacoffee.com/roaringapps"> 189 <img src="https://cdn.buymeacoffee.com/widget/assets/coffee%20cup.svg" alt="Support RoaringApps"> 190 <span>Buy me a coffee</span> 191 </a> 192 </p> 193 </div> 194 <div class="col-md-6"> 195 <p class="pull-right"><a href="/">Home</a> · <a href="/about">About</a> · <a href="/newsletter/join">Newsletter</a> · <a href="/help/contribute-to-roaringapps">Contribute</a> · <a href="/contact">Contact</a> · <a href="/account">Account</a> · <a href="/legal">Legal</a></p> 196 </div> 197 </div> <!-- /.row --> 198 199 </div> 200 </footer> 201 202 <!--
202<script data-name="BMC-Widget" data-cfasync="false" src="https://cdnjs.buymeacoffee.com/1.0.0/widget.prod.min.js" data-id="roaringapps" data-description="Support me on Buy me a coffee!" data-message="" data-color="#FF5F5F" data-position="Right" data-x_margin="18" data-y_margin="18"></script>
202 --> 203 </div> 204 205 <!-- Modals --> 206 <section class="the-modals" ng-controller="ModalCtrl"> 207 <!-- Sign In --> 208 <div class="modal fade narrow" id="modal-signin" tabindex="-1" role="dialog" aria-labelledby="modal-label-signin" aria-hidden="true"> 209 <div class="modal-dialog"> 210 <p class="modal-outside-meta modal-msg" ng-if="signinModalMsg">{{signinModalMsg}}</p> 211 <div class="modal-content"> 212 <div class="modal-body"> 213 214 <form id="form-signin" ng-submit="login.submit()"> 215 <div class="gravatar"></div> 216 217 <input type="email" name="signin-email" ng-model="form.login.email" placeholder="Email address" /> 218 <input type="password" name="signin-password" ng-model="form.login.password" placeholder="Password" /> 219 220 <button class="btn btn-action" action="submit" name="signin-submit" ng-hide="login.submitting"><span>Sign in</span></button> 221 <div class="btn btn-action modal-button-loader" ng-show="login.submitting"> 222 <div class="spinner spinner-three-dots faster"> 223 <div class="bounce1"></div> 224 <div class="bounce2"></div> 225 <div class="bounce3"></div> 226 </div> 227 </div> 228 </form> 229 </div> 230 </div> <!-- /.modal-content --> 231 <p class="modal-outside-meta"><a href="/account/forgot">Forgot?</a> <a class="pull-right" ng-href="{{getRegisterUrl()}}"><strong>Create an account</strong></a></p> 232 </div> 233 </div> 234 235 <!-- Register / Create account --> 236 <div class="modal fade narrow" id="modal-register" tabindex="-1" role="dialog" aria-labelledby="modal-label-register" aria-hidden="true"> 237 <div class="modal-dialog"> 238 <div class="modal-content"> 239 <div class="modal-body"> 240 241 <form id="form-register" ng-submit="register.submit()"> 242 <div class="gravatar"></div> 243 244 <input type="email" name="register-email" ng-model="form.register.email" placeholder="Email address" /> 245 <input type="text" name="register-username" ng-model="form.register.username" placeholder="Username" /> 246 <input type="password" name="register-password" ng-model="form.register.password" placeholder="Password" /> 247 248 <button class="btn btn-action" action="submit" name="register-submit" ng-hide="register.submitting"><span>Create account</span></button> 249 <div class="btn btn-action modal-button-loader" ng-show="register.submitting"> 250 <div class="spinner spinner-three-dots faster"> 251 <div class="bounce1"></div> 252 <div class="bounce2"></div> 253 <div class="bounce3"></div> 254 </div> 255 </div> 256 </form> 257 </div> 258 </div> <!-- /.modal-content --> 259 <p class="modal-outside-meta">{{register.errors.join(' ')}}</p> 260 </div> 261 </div> 262 263 <!-- Search --> 264 <div class="modal fade search-modal" id="modal-search" tabindex="-1" role="dialog" aria-labelledby="modal-label-search" aria-hidden="true"> 265 <div class="modal-dialog"> 266 <div class="modal-content"> 267 <div class="modal-body"> 268 269 <form id="form-search"> 270 <input type="search" id="search-input" name="search" ng-model="form.search.query" placeholder="Search applications" autocomplete="off" /> 271 <span class="search-result-count" ng-show="search.results.length > 0">{{search.results.length}} apps</span> 272 </form> 273 274 <p class="search-msg" ng-show="search.searching">Searching...</p> 275 <p class="search-msg" ng-show="search.empty">No results</p> 276 277 <ul class="search-results"> 278 <li class="result" ng-repeat="app in search.results | orderBy:'-_searchRank'"> 279 <a href="/app/{{app.slug}}"> 280 <img ng-src="{{app.icon}}" alt="{{app.icon ? app.name + ' icon' : 'No icon'}}" class="{{app.icon ? 'search-result-has-icon' : 'search-result-no-icon'}}" onerror="this.style.display='none'" /> 281 <strong>{{app.name}}</strong> 282 <span class="dev">{{app.developer}}</span> 283 </a> 284 </li> 285 </ul> 286 287 </div> 288 </div> <!-- /.modal-content --> 289 <p class="modal-outside-meta">{{register.errors.join(' ')}}</p> 290 </div> 291 </div> 292 293 <!-- Moderate --> 294 <div class="modal fade" id="modal-moderate" tabindex="-1" role="dialog" aria-labelledby="modal-label-moderate" aria-hidden="true"> 295 <div class="modal-dialog"> 296 <div class="modal-content"> 297 <div class="modal-header"> 298 <h4>Moderator control panel</h4> 299 </div> 300 <div class="modal-body"> 301 302 <form id="form-moderate"> 303 <div class="row"> 304 <div class="col-xs-12 col-sm-6"> 305 <div class="form-group"> 306 <label for="moderate-app-name">Application</label> 307 <input type="text" name="moderate-app-name" id="moderate-app-name" ng-model="selectedApp.name" disabled /> 308 </div> 309 </div> 310 <div class="col-xs-12 col-sm-6"> 311 <div class="form-group"> 312 <label for="moderate-app-slug">Slug</label> 313 <input type="text" name="moderate-app-slug" id="moderate-app-slug" ng-model="selectedApp.slug" disabled /> 314 </div> 315 </div> 316 <div class="col-xs-12 col-sm-6"> 317 <div class="form-group"> 318 <label for="moderate-app-developer">Developer</label> 319 <input type="text" name="moderate-app-developer" id="moderate-app-developer" ng-model="selectedApp.developer" disabled /> 320 </div> 321 </div> 322 <div class="col-xs-12 col-sm-6"> 323 <div class="form-group"> 324 <label for="moderate-app-url">URL</label> 325 <input type="text" name="moderate-app-url" id="moderate-app-url" ng-model="selectedApp.url" disabled /> 326 </div> 327 </div> 328 </div> 329 330 <div class="form-group"> 331 <p ng-if="!selectedApp.statuses">This application has no status reports.</p> 332 </div> 333 334 335 336 337 <div class="form-group"> 338 <button class="btn btn-outline btn-danger" ng-click="moderate.delete(selectedApp.slug)">Delete app</button> 339 <button class="btn btn-outline" ng-click="moderate.merge.chooseTo(selectedApp.slug)">Merge with...</button> 340 <button class="btn btn-outline" ng-click="moderate.appCollection.add(selectedApp.slug)">Add to collection...</button> 341 <button class="btn btn-outline">Update</button> 342 </div> 343 </form> 344 345 346 </div> 347 </div> <!-- /.modal-content --> 348 <p class="modal-outside-meta">For use only by approved RoaringApps moderators.</p> 349 </div> 350 </div> 351 352 <!-- Feedback --> 353 <div class="modal fade" id="modal-feedback" tabindex="-1" role="dialog" aria-labelledby="modal-label-feedback" aria-hidden="true"> 354 <div class="modal-dialog"> 355 <div class="modal-content"> 356 <div class="modal-header"> 357 <h4>Submit Feedback</h4> 358 </div> 359 <div class="modal-body"> 360 <p>I develop RoaringApps in my (rather limited) spare time, so sometimes I miss bugs here and there. If you notice something not quite working properly, or have an idea for the site, I'd love to hear from you.</p> 361 <form id="form-feedback" name="feedbackForm" ng-submit="feedback.submit(feedbackForm.$valid)" novalidate> <!-- novalidate disables HTML5 validation, so we can use the angular val
361idation --> 362 <div class="row"> 363 <div class="col-xs-12 col-sm-6"> 364 <div class="form-group"> 365 <label for="feedback-name">Name</label> 366 <input type="text" name="feedback-name" id="feedback-name" ng-model="form.feedback.name" required /> 367 </div> 368 </div> 369 <div class="col-xs-12 col-sm-6"> 370 <div class="form-group"> 371 <label for="feedback-email">Email (optional)</label> 372 <input type="email" name="feedback-email" id="feedback-email" ng-model="form.feedback.email" /> 373 </div> 374 </div> 375 </div> 376 <div class="form-group" style="position: absolute; left: -5000px;" aria-hidden="true"> 377 <label for="feedback-website">Website</label> 378 <input type="text" name="feedback-website" id="feedback-website" ng-model="form.feedback.website" tabindex="-1" autocomplete="off" /> 379 </div> 380 <div class="form-group"> 381 <label for="feedback-comment">Comment</label> 382 <textarea id="feedback-comment" ng-model="form.feedback.comment" required></textarea> 383 </div> 384 <div class="form-group form-action-area"> 385 <input type="submit" value="Send feedback" class="btn btn-outline" ng-disabled="feedbackForm.$invalid" /> 386 </div> 387 <div class="form-group"> 388 <p class="msg error" ng-if="feedback.errorMsg">{{feedback.errorMsg}}</p> 389 <p class="msg success" ng-if="feedback.successMsg">{{feedback.successMsg}}</p> 390 </div> 391 </form> 392 393 394 </div> 395 </div> <!-- /.modal-content --> 396 </div> 397 </div> 398 399 <!-- Report comment --> 400 <div class="modal fade" id="modal-report-comment" tabindex="-1" role="dialog" aria-labelledby="modal-label-report-comment" aria-hidden="true"> 401 <div class="modal-dialog"> 402 <div class="modal-content"> 403 <div class="modal-header"> 404 <h4>Report comment</h4> 405 </div> 406 <div class="modal-body"> 407 <p>Report this comment to help the moderators identify items that require attention.</p> 408 <form id="form-report-comment" name="reportCommentForm" ng-submit="reportComment.submit(reportCommentForm.$valid)" novalidate> 409 <!-- novalidate disables HTML5 validation, so we can use the angular validation --> 410 <div class="row"> 411 <div class="col-xs-12"> 412 <div class="form-group"> 413 <label for="report-comment-reason">Reason</label> 414 <select name="report-comment-reason" id="report-comment-reason" ng-model="form.reportComment.reason" required> 415 <option>Invalid advice</option> 416 <option>Illegal/inappropriate</option> 417 <option>Off-topic</option> 418 <option>Personal attack</option> 419 <option>Spam</option> 420 <option>Other</option> 421 </select> 422 </div> 423 </div> 424 <div class="col-xs-12"> 425 <div class="form-group"> 426 <label for="report-comment-description">Description (optional)</label> 427 <textarea id="report-comment-description" ng-model="form.reportComment.description"></textarea> 428 </div> 429 </div> 430 431 <div class="col-xs-12"> 432 <div class="form-group form-action-area"> 433 <input type="submit" value="Submit report" class="btn btn-outline" ng-disabled="reportCommentForm.$invalid" /> 434 </div> 435 <div class="form-group"> 436 <p class="msg error" ng-if="reportComment.errorMsg">{{reportComment.errorMsg}}</p> 437 <p class="msg success" ng-if="reportComment.successMsg">{{reportComment.successMsg}}</p> 438 </div> 439 </div> 440 </div> <!-- /.row --> 441 442 </form> 443 444 445 </div> 446 </div> <!-- /.modal-content --> 447 </div> 448 </div> <!-- /.modal (report comment) --> 449 450 451 </section> 452 <!-- JS and analytics only. -->
vendor: 119 bytes, lines 452-454
452 453 454 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
454<script src="/assets/js/production-2131.js"></script>
454 455 456
456<script> 457 if(typeof lucide !== undefined) lucide.createIcons(); 458 </script>
458
458<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"cf8706b74b324e67b083263fb22c492a","r":1,"spa":2}' crossorigin="anonymous"></script>
458 459</body> 460</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.