{"id":3375,"date":"2018-02-28T13:11:05","date_gmt":"2018-02-28T21:11:05","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vsappcenter\/?p=3375"},"modified":"2019-02-16T15:30:26","modified_gmt":"2019-02-16T22:30:26","slug":"how-and-why-we-built-our-new-visual-studio-app-center-tester-apps-preview-now-available","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/appcenter\/how-and-why-we-built-our-new-visual-studio-app-center-tester-apps-preview-now-available\/","title":{"rendered":"How (and Why) We Built Our New Visual Studio App Center Tester Apps: Preview Now Available!"},"content":{"rendered":"<p>We\u2019re excited to announce that <em>HockeyApp for App Center<\/em>, our native iOS and Android apps, are now available! <em>HockeyApp for App Center<\/em> brings the functionality of the App Center install website to a native app experience, making it even easier for you and your beta testers to get the latest and greatest builds as soon as they\u2019re available. We call the app &#8220;HockeyApp&#8221; because we want to welcome our HockeyApp users to using this app; all the apps you distribute through HockeyApp are also visible and downloadable with this app!<\/p>\n<p><img decoding=\"async\" src=\"\" alt=\"\" width=\"1080\" class=\"aligncenter size-full wp-image-3435\" \/><\/p>\n<h2>Why You, Your Team, and Your Users Will Love <em>HockeyApp for App Center<\/em><\/h2>\n<p>The native apps give you all of the features of the App Center install website, plus:  <\/p>\n<ol>\n<li>Download and install apps (and app updates!) faster, and with fewer clicks, so you and your testers can focus on testing and improving user experience.<\/li>\n<li>Find apps with ease, searching by name or filtering by organization. We know a lot of developers and beta users are in several distribution groups or multiple organizations; now, it\u2019s easier to sort and find the apps you\u2019re looking for.<\/li>\n<li>Snappier and faster load times. We use data caching, so you get prompt, performant, and responsive apps.<\/li>\n<li>A better iOS experience by allowing iOS users to register devices via a dedicated profile page. If you\u2019re distributing iOS builds, this makes it easy to add your testers\u2019 UDID to your provisioning profile, so users can install new builds. As a tester, you\u2019ll be able access your device details. If you\u2019re not provisioned for a build you\u2019d like to install, you\u2019ll see a notification that the developer needs to add your device, so you can contact the team to request access.<\/li>\n<\/ol>\n<h2>Get Started in a Few Easy Steps<\/h2>\n<p>We\u2019ll submit both apps to the public app stores in the coming weeks, but we wanted to share this public preview with you immediately to give you and your testers more choice in how you distribute and download releases. As always, we&#8217;re also looking forward to hearing and incorporating your feedback. <\/p>\n<p>If you&#8217;re an Android user, visit the <a href=\"https:\/\/aka.ms\/achockeyappandroid\" rel=\"noopener\" target=\"_blank\">App Center public distribution group page<\/a> from your Android device to download and install the app. <\/p>\n<p>If you&#8217;re an iOS user, visit our <a href=\"https:\/\/aka.ms\/achockeyappios\" rel=\"noopener\" target=\"_blank\">TestFlight sign up list<\/a>, and we&#8217;ll respond and give you access ASAP. One to two business days after you sign up, you&#8217;ll receive an email invite from us with TestFlight. <\/p>\n<p>After you&#8217;ve downloaded the app on your device, sign in with your existing App Center or HockeyApp account credentials. You&#8217;ll see all of your apps, both your releases and apps you&#8217;ve been added to as a tester or collaborator, and can start searching and downloading the latest or previous releases at the tap of a button.  <\/p>\n<p><img decoding=\"async\" src=\"\" alt=\"\" width=\"850\" class=\"aligncenter size-full wp-image-3445\" \/><\/p>\n<p>Don\u2019t have an App Center account? <a href=\"http:\/\/appcenter.ms\/signup\" rel=\"noopener\" target=\"_blank\">Create your free account today<\/a>.<\/p>\n<p><strong>Important tip for developers<\/strong>: To allow testers to enable in-app updates to your builds straight from <em>HockeyApp for App Center<\/em>, make sure you have the latest App Center iOS and Android SDKs installed in your apps. Get the latest: <a href=\"https:\/\/cocoapods.org\/pods\/AppCenter\" rel=\"noopener\" target=\"_blank\">iOS<\/a> | <a href=\"https:\/\/bintray.com\/vsappcenter\/appcenter\" rel=\"noopener\" target=\"_blank\">Android<\/a> | <a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.AppCenter\" rel=\"noopener\" target=\"_blank\">Xamarin<\/a>. <\/p>\n<h2>How We (the App Center Team) Use App Center<\/h2>\n<p>We believe in using our own products and services to help us understand what\u2019s working well and where we can improve the experience for all users, from developers and product managers to QA and designers.  <\/p>\n<p>To build both <em>HockeyApp for App Center<\/em> apps, we used Xamarin.Forms and set up automated CI\/CD with App Center, including Build, Test, Distribute, Crashes, and Analytics services.  <\/p>\n<h3>Build<\/h3>\n<p>We host our project on GitHub, and we\u2019ve configured our repo to compile with App Center Build service with every git push. We\u2019ve created two separate apps in App Center to have two separate app secrets (one for iOS and Android), connected to the same GitHub repo, and the Build service automatically picks up the correct project solution in the repo based on the platform we\u2019re pushing. <\/p>\n<p>Like many teams, we have multiple developers working on the native tester apps at any given time, so seeing success\/failure status for each build is extremely useful. As we collaborate, we run into instances where the project will build locally for one person, but fails to build via the Build service (and for other collaborators). Clearly seeing a \u201cbuilt\u201d v. \u201cfailed\u201d status makes is easy for everyone to spot issues and fix them quickly, before they snowball and become more difficult to correct.  <\/p>\n<p>Everyone on the team also receives emails for successful distribution of builds. Usually, the first person who notices the \u201csuccess!\u201d email is missing investigates and notifies the developer whose commit failed.\n&nbsp;\n<img decoding=\"async\" src=\"\" alt=\"\" width=\"1080\" class=\"aligncenter size-full wp-image-3455\" \/>\n&nbsp;<\/p>\n<h3>Test<\/h3>\n<p>Using App Center Test service, we automate the majority of our quality control. We have hundreds of real Android and iOS device models, with different screen sizes and operating system versions, at our disposal. This allows us to author and run automated tests across various configurations to verify both functionality and that visual elements look and behave as expected.\n&nbsp;\n<img decoding=\"async\" src=\"\" alt=\"\" width=\"1080\" class=\"aligncenter size-full wp-image-3465\" \/>\n&nbsp;\nAutomated testing helps us catch important issues that we might easily miss with manual testing, so we\u2019re more confident in our releases.<\/p>\n<p>For example, we include an \u201cin-app rating \/ feedback\u201d modal, inviting users to tell us how we\u2019re doing on a scale of 1-10. On devices with smaller screens (like Nexus 5), the \u201c5\u201d and \u201c10\u201d were cut off (see below). Not only is this an obvious UI error for users, we also could have missed critical user feedback.\n&nbsp;\n<img decoding=\"async\" src=\"\" alt=\"\" width=\"300\" class=\"aligncenter size-full wp-image-3475\" \/>\n&nbsp;\nWe\u2019re committed to continuing to improve and to providing high-quality UX for all users, regardless of device or operating system, and we want to make sure we\u2019re making this an easy and clear process, so we seek out as much feedback as possible. For more info, read Glenn Wester\u2019s blog post on how to <a href=\"https:\/\/devblogs.microsoft.com\/appcenter\/continuous-quality-ship-better-apps-faster-with-visual-studio-app-center\/\" rel=\"noopener\" target=\"_blank\"><em>Ship Better Apps Faster with App Center Test<\/em><\/a>). <\/p>\n<h3>Distribution<\/h3>\n<p>We automatically distribute successful builds to our App Center internal testing group, so everyone always has the latest version, can dogfood the app, and provide feedback. We save time, since we don\u2019t need to manually archive releases, distribute new builds, or send update notification emails, and our testers receive an in-app update prompt and click to update with no other action required. <\/p>\n<p>For the iOS version, we\u2019ve configured two specific branches: the development branch (master) and the TestFlight branch (for distributing to external users, as noted in the \u201cget started\u201d section).  <\/p>\n<ul>\n<li>We sign the development branch builds with Microsoft\u2019s enterprise provisioning profile, so all internal teams have access and can install the app immediately.<\/li>\n<li>TestFlight submissions require a different provisioning profile, so whenever we\u2019re ready to submit a new build, we merge changes from the development branch to the TestFlight branch, automatically creating a build that we can download and publish to TestFlight.<\/li>\n<\/ul>\n<h3>Crashes<\/h3>\n<p>Crashes are unavoidable. Just like all teams, we want to know what, when, where, how, and why crashes occur. We\u2019ve integrated <em>HockeyApp for App Center<\/em> with the App Center Crashes SDK to automatically collect crash reports to identify and fix crashes. <\/p>\n<p>App Center Crashes service groups crashes, which allows us to get a quick view and drill into groups to get specifics, from the method and class the crash occurs on to exception types, error messages and full stack traces. This level of detail helps us see exactly what\u2019s going wrong and implement a solution.  <\/p>\n<p>After fixing an issue, we simply close the crash group to ensure we\u2019re only focusing on active crashes. <\/p>\n<p>To learn more about getting started with the Crashes service, check out our guest post from Payit\u2019s CTO on <a href=\"https:\/\/blogs.msdn.microsoft.com\/vsappcenter\/guest-blog-solving-what-the-bug-with-the-visual-studio-app-center-crashes-service\/\" rel=\"noopener\" target=\"_blank\"><em>Solving &#8220;What the Bug?&#8221; with the Visual Studio App Center Crashes Service<\/em><\/a>.\n&nbsp;\n<img decoding=\"async\" src=\"\" alt=\"\" width=\"1080\" class=\"aligncenter size-full wp-image-3485\" \/>\n&nbsp;<\/p>\n<h3>Analytics<\/h3>\n<p>After we ship or release to testers, we need to know how our apps behave in the wild, so we can identify trends, prioritize improvements, and continually improve users\u2019 experience.<\/p>\n<p>The App Center Analytics SDK automatically collects session information, and we also <a href=\"https:\/\/docs.microsoft.com\/en-us\/appcenter\/analytics\/\" rel=\"noopener\" target=\"_blank\">record custom events<\/a> for more detailed analytics. For example, we track how many times various release versions are installed, so we can nudge users to get the latest versions and\/or identify if we need to recruit more testers. <\/p>\n<p>Since we want our apps to be as performant as possible, page load times are another important metric for us. We use App Center Analytics to collect page load times, tracking custom events with the duration as a property, and export the data to Application Insights, where we can do more robust analysis and generate Power BI charts. Read our blog post on <a href=\"https:\/\/blogs.msdn.microsoft.com\/vsappcenter\/better-decisions-through-better-analytics-visual-studio-app-center-with-azure-application-insights\/\" rel=\"noopener\" target=\"_blank\"><em>Better Decisions Through Better Analytics: Visual Studio App Center with Azure Application Insights<\/em><\/a> to learn how to get in-depth insights and make data-driven decisions.<\/p>\n<p>After you use <em>HockeyApp for App Center<\/em> a few times, you may notice a pop-up asking you to rate the app and share your feedback (the 1-10 rating modal mentioned earlier). We use App Center Analytics custom events here, too. After you submit your feedback, we send a custom event with properties containing the rating and comment to the Analytics service, and use the Application Insights export feature to query the data set and do more detailed analysis.<\/p>\n<h2>What\u2019s Next<\/h2>\n<p>In addition to submitting the public app stores and making the source code publicly available so everyone can contribute, we\u2019ll continue to improve the apps to give you and your testers the best experience possible.<\/p>\n<p>Your feedback and suggestions for what we work on next are important to us, and we\u2019re available on all channels. We invite you to share your thoughts with us in the app feedback modal, by tweeting @VSAppCenter, or from your <a href=\"http:\/\/appcenter.ms\/login\" rel=\"noopener\" target=\"_blank\">App Center portal<\/a> by clicking on the blue chat icon.\n&nbsp;\n&nbsp;\n<a href=\"https:\/\/appcenter.ms\/signup\"><img decoding=\"async\" src=\"\" alt=\"Get started now button\" width=\"200\" class=\"aligncenter size-full wp-image-2585\" \/><\/a>\n&nbsp;\n&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We\u2019re excited to announce that HockeyApp for App Center, our native iOS and Android apps, are now available! HockeyApp for App Center brings the functionality of the App Center install website to a native app experience, making it even easier for you and your beta testers to get the latest and greatest builds as soon [&hellip;]<\/p>\n","protected":false},"author":52,"featured_media":38034,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[16],"tags":[],"class_list":["post-3375","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mobiledev"],"acf":[],"blog_post_summary":"<p>We\u2019re excited to announce that HockeyApp for App Center, our native iOS and Android apps, are now available! HockeyApp for App Center brings the functionality of the App Center install website to a native app experience, making it even easier for you and your beta testers to get the latest and greatest builds as soon [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/appcenter\/wp-json\/wp\/v2\/posts\/3375","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/appcenter\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/appcenter\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/appcenter\/wp-json\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/appcenter\/wp-json\/wp\/v2\/comments?post=3375"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/appcenter\/wp-json\/wp\/v2\/posts\/3375\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/appcenter\/wp-json\/wp\/v2\/media\/38034"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/appcenter\/wp-json\/wp\/v2\/media?parent=3375"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/appcenter\/wp-json\/wp\/v2\/categories?post=3375"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/appcenter\/wp-json\/wp\/v2\/tags?post=3375"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}