{"id":23929,"date":"2016-01-18T09:31:34","date_gmt":"2016-01-18T17:31:34","guid":{"rendered":"https:\/\/blog.xamarin.com\/?p=23929"},"modified":"2019-04-03T16:02:27","modified_gmt":"2019-04-03T23:02:27","slug":"sport-a-beautiful-open-source-consumer-app","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/xamarin\/sport-a-beautiful-open-source-consumer-app\/","title":{"rendered":"Sport: A Beautiful Open Source Consumer App"},"content":{"rendered":"<p>Xamarin employees love a good competition! During breaks, we love to challenge each other to a few games of ping-pong or darts. We needed a way to track the best players for each game in our office, so we thought it would be a great opportunity to develop an app to solve the issue.\u00a0Sport is a leaderboard tracking app built with Xamarin.Forms and Microsoft Azure that showcases beautiful, animated modern design. Athletes can join leagues, get ranked, and challenge other athletes to move up the ladder.\u00a0Sport is completely open-source, so you can get started\u00a0<a href=\"https:\/\/github.com\/xamarin\/sport#keys\">creating your own office leagues today<\/a>!<\/p>\n<p><center>\n<iframe width=\"420\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/GmdvxDVluRA\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/center><\/p>\n<h2>Beautiful UIs with Xamarin.Forms<\/h2>\n<p>Sport was built\u00a0using Xamarin.Forms, which allows you to <a href=\"http:\/\/xamarin.com\/forms\">create native UIs from a single, shared codebase<\/a>. I was able to\u00a0share an amazing\u00a093% of my code between iOS and Android, massively increasing my productivity as a developer.\u00a0<span style=\"line-height: 1.5\">Sport also takes advantage of one of the most popular features of Xamarin.Forms, the ability\u00a0use your existing XAML experience to construct UIs, to build a beautiful, cross-platform user interface. To provide further customization, I also took advantage of Xamarin.Forms&#8217; <a href=\"https:\/\/developer.xamarin.com\/guides\/xamarin-forms\/working-with\/styles\/\">styling engine<\/a> to enforce a consistent visual theme throughout the application; leagues are randomly assigned a themed color at runtime.<\/span><\/p>\n<p>While Xamarin.Forms allows you to share tons of code and create cross-platform UIs,\u00a0you still have full access to each platform to <a href=\"https:\/\/developer.xamarin.com\/guides\/xamarin-forms\/custom-renderer\/\">render native views<\/a> and <a href=\"https:\/\/developer.xamarin.com\/guides\/xamarin-forms\/dependency-service\/\">expose platform-specific functionality<\/a>. One of my favorite features of Sport is its use of animations to create a delightful, playful (get it!?) user experience.\u00a0Xamarin.Forms has many other features that made developing Sport a breeze, such as\u00a0built-in support for the MVVM pattern, a MessagingCenter, and a DependencyService.\n<img decoding=\"async\" class=\"aligncenter wp-image-23975\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/44\/2019\/03\/Sport-apps-for-iOS-and-Android.png\" alt=\"Example of a Xamarin.Forms app built with Azure App Service and Xamarin.Forms\" width=\"450\" height=\"402\" \/><\/p>\n<h2>Powerful Backends with\u00a0Azure App Service<\/h2>\n<p>It&#8217;s 2016, and C# is everywhere &#8211; the client and server. Sport is powered using\u00a0<a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/app-service\/\">Azure App Service<\/a>, which provides a C# backend with authentication, cloud\u00a0storage, push notifications, and more. App Service makes it very easy to integrate with existing OAuth services, such as Google (which Sport uses), Microsoft, Facebook,\u00a0and Twitter. League data is stored in the cloud and synced across user devices to ensure a seamless experience, regardless of device. Finally, Sport uses Azure Notification Hubs to provide templated push notifications for both\u00a0iOS and Android. Sport&#8217;s backend is completely open source, so you can dive into and see just how easy it is to add a powerful backend to your Xamarin apps.<\/p>\n<h2>Start Challenging Coworkers Today<\/h2>\n<p>To\u00a0bring Sport to your office, simply <a href=\"https:\/\/github.com\/xamarin\/sport\">download the source<\/a>, compile, and run. It&#8217;s that easy!\u00a0We have provided keys to an existing backend, though\u00a0the backend is also completely open-source if you wish to roll-your-own as well. If you love Sport, you may also be interested in other <a href=\"https:\/\/xamarin.com\/prebuilt\">great open source apps built with Xamarin.Forms<\/a>, such as\u00a0the XamarinCRM and MyShoppe.\t\t<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Xamarin employees love a good competition! During breaks, we love to challenge each other to a few games of ping-pong or darts. We needed a way to track the best players for each game in our office, so we thought it would be a great opportunity to develop an app to solve the issue.\u00a0Sport is [&hellip;]<\/p>\n","protected":false},"author":1950,"featured_media":23975,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2],"tags":[4],"class_list":["post-23929","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developers","tag-xamarin-platform"],"acf":[],"blog_post_summary":"<p>Xamarin employees love a good competition! During breaks, we love to challenge each other to a few games of ping-pong or darts. We needed a way to track the best players for each game in our office, so we thought it would be a great opportunity to develop an app to solve the issue.\u00a0Sport is [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/posts\/23929","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/users\/1950"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/comments?post=23929"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/posts\/23929\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/media?parent=23929"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/categories?post=23929"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/tags?post=23929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}