{"id":3119,"date":"2017-02-21T12:55:27","date_gmt":"2017-02-21T12:55:27","guid":{"rendered":"http:\/\/www.nikola-breznjak.com\/blog\/?p=3119"},"modified":"2017-02-21T13:00:18","modified_gmt":"2017-02-21T13:00:18","slug":"64th-sqldev-user-group-meeting-xamarin","status":"publish","type":"post","link":"https:\/\/nikola-breznjak.com\/blog\/meetups\/64th-sqldev-user-group-meeting-xamarin\/","title":{"rendered":"64th SQL\/DEV user group meeting about Xamarin"},"content":{"rendered":"<p>Yesterday I attended our local Microsoft community user group meeting which was the 64th meeting in a row, and the presenter <a href=\"https:\/\/twitter.com\/andrejrad\">Andrej Radinger<\/a>, CEO of <a href=\"http:\/\/mobendo.com\/\">Mobendo<\/a> and <a href=\"https:\/\/mogy.me\/\">Mogy<\/a>, talked about two topics:<\/p>\n<ul>\n<li>Transfering the existing native iOS\/Android app to Xamarin<\/li>\n<li>How to start a start-up<\/li>\n<\/ul>\n<p>I took extensive notes and screenshots of the presentation about Xamarin, and this is what I&#8217;m going to share with you in this post. I&#8217;m not going to cover the stuff about start-ups in this post; I&#8217;m only going to leave you with <a href=\"http:\/\/www.nikola-breznjak.com\/blog\/books\/the-lean-startup-eric-ries\/\">The Lean Startup<\/a> and one quote:<\/p>\n<blockquote><p>\n  Done is better than perfect. So start doing something already!\n<\/p><\/blockquote>\n<h2>Presentation notes<\/h2>\n<p><img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0109_1024.jpg\" alt=\"\" \/><\/p>\n<p>Some random facts:<\/p>\n<ul>\n<li>Bought by Microsoft<\/li>\n<li>Integral part of Visual Studio 2015<\/li>\n<li>Xamarin University (approx. 1k$\/year)<\/li>\n<li>It&#8217;s good to know each platform and its specifics. For example, to know the application lifecycle, how the app behaves when it goes to background mode, etc.<\/li>\n<li>They needed four months to port their <a href=\"https:\/\/mogy.me\/\">Mogy app<\/a> to Xamarin iOS and then additional 2 to do it for Android<\/li>\n<\/ul>\n<p>Good stuff is that you have Native access:<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0110_1024.jpg\" alt=\"\" \/><\/p>\n<p>Three different ways to develop apps these days:<\/p>\n<ul>\n<li><img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0111_1024.jpg\" alt=\"\" \/><\/li>\n<li><img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0112_1024.jpg\" alt=\"\" \/><\/li>\n<li><img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0113_1024.jpg\" alt=\"\" \/><\/li>\n<\/ul>\n<p>The difference between Traditional Xamarin Approach and Xamarin.Forms<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0114_1024.jpg\" alt=\"\" \/><\/p>\n<p>Before going into the web dev, I was working with C#, and the following slide is indeed true. Pair that with the ever so slightly awesome Visual Studio and you&#8217;re golden \ud83d\ude42<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0116_1024.jpg\" alt=\"\" \/><\/p>\n<p>I&#8217;ve learned that everyone gets accustomed to the tool\/language that they&#8217;re working in so some hardcore ObjectiveC devs may not agree with the following:<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0121_1024.jpg\" alt=\"\" \/><\/p>\n<p>IMHO, if you&#8217;re a .NET developer and you want to build Android\/iOS apps you really have a no-brainer choice.<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0124_1024.jpg\" alt=\"\" \/><\/p>\n<p>100% API coverage:<\/p>\n<ul>\n<li><img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0127_1024.jpg\" alt=\"\" \/><\/li>\n<li><img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0128_1024.jpg\" alt=\"\" \/><\/li>\n<li><img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0129_1024.jpg\" alt=\"\" \/><\/li>\n<\/ul>\n<p>Native performance (something that we from the hybrid dev world yarn for):<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0130_1024.jpg\" alt=\"\" \/><\/p>\n<p>You have all your projects in one Visual Studio solution:<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0133_1024.jpg\" alt=\"\" \/><\/p>\n<p>Some code sharing stats:<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0135_1024.jpg\" alt=\"\" \/><\/p>\n<p>You can buy\/sell components which can really help if you&#8217;re trying to get some product fast to the market:<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0136_1024.jpg\" alt=\"\" \/><\/p>\n<p>Prebuilt app template examples:<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0137_1024.jpg\" alt=\"\" \/><\/p>\n<p>An example of the native UI from the shared code (it changes based on the deployed platform). Shared UI code is defined in XAML.<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0139_1024.jpg\" alt=\"\" \/><\/p>\n<p>Two aforementioned Xamarin approaches (Traditional and Forms):<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0140_1024.jpg\" alt=\"\" \/><\/p>\n<p>Available controls:<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0141_1024.jpg\" alt=\"\" \/><\/p>\n<p>Some third party vendors that are developing additional controls:<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0142_1024.jpg\" alt=\"\" \/><\/p>\n<p>How to extend:<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0143_1024.jpg\" alt=\"\" \/><\/p>\n<p>How they manage platform specific code and unify it in one function:<\/p>\n<ul>\n<li><img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0144_1024.jpg\" alt=\"\" \/><\/li>\n<li><img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0146_1024.jpg\" alt=\"\" \/><\/li>\n<li><img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0147_1024.jpg\" alt=\"\" \/><\/li>\n<\/ul>\n<p>Some challenges:<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0148_1024.jpg\" alt=\"\" \/><br \/>\nAdditional notes to these:<\/p>\n<ul>\n<li>Some of the problems are related to setting up assets per platform<\/li>\n<li>You need to take care of the back button in your designs on iOS<\/li>\n<li>Had few problems with push notification debugging<\/li>\n<li>The main problem with Android is its segmentation (meaning, too many different devices with different screen sizes and hardware)<\/li>\n<\/ul>\n<p>Supported gestures:<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0153_1024.jpg\" alt=\"\" \/><\/p>\n<p>Xamarin Test Cloud seems cool as you can test your app on actual devices. I&#8217;ve tested this in <a href=\"http:\/\/www.nikola-breznjak.com\/blog\/miscellaneou\/automated-mobile-testing-tools-services\/\">this blog post<\/a>:<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0154_1024-1.jpg\" alt=\"\" \/><\/p>\n<p>Analytics:<br \/>\n<img decoding=\"async\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2017\/02\/thumb_IMG_0155_1024.jpg\" alt=\"\" \/><\/p>\n<h2>Questions<\/h2>\n<blockquote><p>\n  Does Xamarin help, hurt, or remain neutral in terms of debugging ease compared to each native platform\u2019s tools\/helpers?\n<\/p><\/blockquote>\n<ul>\n<li>Neutral, as if something breaks you can go to the exact line in the source code. However, we had quite a hard time debugging push notifications.<\/li>\n<\/ul>\n<blockquote><p>\n  Do you ship a Windows Phone app now that you have that available?\n<\/p><\/blockquote>\n<ul>\n<li>No.<\/li>\n<\/ul>\n<blockquote><p>\n  What sacrifices in terms of UX did you have to make?\n<\/p><\/blockquote>\n<ul>\n<li>&#8230;at some point we were cursing ourselves not to have taken the Traditional Xamarin Approach opposed to the Xamarin.Forms, as that would then give us more leverage in terms of UI tweaking, but we eventually managed to deal with it.<\/li>\n<\/ul>\n<blockquote><p>\n  Did you evaluate React Native as well? How about hybrid (Cordova\/Ionic)?\n<\/p><\/blockquote>\n<ul>\n<li>We started some two years ago, and at the time hybrid approaches weren\u2019t so \u2018cool\u2019 (we looked at PhoneGap), so we opted for Xamarin. Plus, we were .NET devs to begin with, so it was practically a no-brainer choice for us.<\/li>\n<\/ul>\n<blockquote class=\"twitter-tweet\" data-width=\"550\">\n<p lang=\"en\" dir=\"ltr\">64th SQL\/DEV user group meeting about Xamarin presented by <a href=\"https:\/\/twitter.com\/andrejrad\">@andrejrad<\/a> <a href=\"https:\/\/t.co\/Kvw5qezaUE\">https:\/\/t.co\/Kvw5qezaUE<\/a><\/p>\n<p>&mdash; Nikola Bre\u017enjak (@HitmanHR) <a href=\"https:\/\/twitter.com\/HitmanHR\/status\/834024166844198913\">February 21, 2017<\/a><\/p><\/blockquote>\n<p><script async src=\"\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Yesterday I attended our local Microsoft community user group meeting which was the 64th meeting in a row, and the presenter Andrej Radinger, CEO of Mobendo and Mogy,&hellip;<\/p>\n","protected":false},"author":1,"featured_media":3154,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[54],"tags":[],"class_list":["post-3119","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-meetups"],"_links":{"self":[{"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/posts\/3119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/comments?post=3119"}],"version-history":[{"count":3,"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/posts\/3119\/revisions"}],"predecessor-version":[{"id":3157,"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/posts\/3119\/revisions\/3157"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/media\/3154"}],"wp:attachment":[{"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/media?parent=3119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/categories?post=3119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/tags?post=3119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}