Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Xamarin for (not only) Android developers

Xamarin for (not only) Android developers

Going through Xamarin platform features from Android and iOS developer perspective and trying to answer if Xamarin is a rockstart platform ;-) #xamarin #android #ios #csharp


Aleksander Piotrowski

October 19, 2015


  1. Xamarin for not only Android developers Aleksander Piotrowski @pelotasplus

  2. What platform needs to be a rockstar platform

  3. IDE Visionary Documentation Jake Wharton Testing tools/services Emulator Third-party components

    Library Events Blogs/podcasts Programing Language
  4. History a rising star

  5. 2000 Microsoft announces .NET Framework 2001 Mono project launched by

    Ximian 2003 Ximian bought by Novell 2004 Mono first release 2009 MonoTouch 1.0 2011 MonoAndroid first release 2011 Novell acquired by Attachmate 0000 Xamarin is founded 2012 Xamarin.Mac 2013 Xamarin Studio .NET is 15 years old mono is 11 years old Xamarin.iOS is 7 years old Xamarin.Android is 4 years old modern Xamarin is 2 years old
  6. Miguel de Icaza • never received a degree • free

    software developer since 1992 • Midnight Commander • early Wine contributor • worked on Linux Sun SPARC • later on Linux for SGI Indy • almost did Internet Explorer port to SPARC • started GNOME project and created Gnumeric • started Mono project to implement .NET on Linux source: wikipedia
  7. source: wikipedia

  8. Pricing not free for personal use

  9. command line support good IDE x2 if targeting both iOS

    and Android
  10. Write once run everywhere* * that to run your app

    on every device make sure it contains nothing else but white background without any other UI elements
  11. Supported platforms • target: ◦ Android, iOS, Mac ◦ Windows

    Phone by sharing C# code between projects • development: ◦ Mac: for all platforms excluding Windows ◦ Windows: for all platforms by using remote Mac ◦ Linux: -
  12. What is • single language for all platforms - C#

    • single base library - .NET Base Class Library plus specific libraries for target platforms MonoTouch or Mono.Android • single runtime for all targeted platforms iOS, Android, Windows Phone • “performant enough even for demanding games”
  13. What is not • write once and run anywhere •

    use one one platform (Mac or Windows) to target them all (iOS, Android, Windows) • one UI for all target platforms
  14. Native vs non-native iOS • native code at the end

    • AOT compiler converts Xamarin app to native ARM code Android • no final native code • Xamarin compiler creates IL (Intermediate Language) which is executed at runtime on the device
  15. Fat binary vs slim debug build • Hello world +

    Base Class Library: 15.8MB • Hello world + BCL after Linking: 2.9MB • Hello world debug release: 6KB + Mono Shared components: 10MB source: used to be here http://developer.xamarin.com/guides/android/advanced_topics/linking/
  16. IDE one to rule them all

  17. None
  18. IDE • have to switch manually between iOS and Android

    in multiplatform projects • ultra annoying “app is running, are you sure you want to stop it and install new version?” • cannot compare to IntelliJ aka IDEA • Visual Studio to the rescue • overriding methods CMD-I
  19. Let’s code and have fun hopefully

  20. Let’s code in C# and F# var i = 10;

    // implicitly typed int i = 10; // explicitly typed #define preprocessor directive ulong, ushort unsigned types async/await for asynchronous programming mandatory break in switch Lambda expression Generics with runtime type support namespaces properties
  21. None
  22. None
  23. Let’s code in Java or Objective-C • using Java Native

    Interface (JNI), or • using bindings for Java code • with Objective-C creating binding • straightforward process, for the second time
  24. None
  25. Project^wSolution structure

  26. Solution structure • References - base .Net classes • Components

    • Packages • Assets • Properties • Resources • our code • and even maybe tests...
  27. None
  28. Code sharing

  29. Layers • Data Layer SQLite • Data Access Layer create,

    read, update, delete • Business Logic data model and business logic • Service Access Layer access REST, parsing JSON • Application Layer platform specific code but not UI-related • User Interface Layer UI-related code shared not shared shared shared shared not shared
  30. source: https://xamarin.com/forms

  31. Code Sharing • Shared Project • Portable Class Library

  32. Shared Project • no .dll as an output • “compiled

    into” referencing project • not compiled, if not used • platform specific code via #if statements ◦ #if __MOBILE__ ◦ #if __ANDROID__ • “for personal use only”
  33. source: http://developer.xamarin.com/guides/cross-platform/application_fundamentals/shared_projects/

  34. Portable Class Library • using a subset of BCL called

    Profile • targets many different (supported) platforms • no platform-specific libraries allowed • refactoring of PCL affects all referencing projects • good for sharing with others
  35. source: http://developer.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/sharing_code_options/

  36. source: http://developer.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/sharing_code_options/

  37. UI design

  38. None
  39. None
  40. Xamarin Forms

  41. source: https://xamarin.com/forms

  42. source: video @ https://xamarin.com/forms

  43. Forms • single app screen called a Page • Page

    contains layouts (StackLayout, GridLayout) and UI elements (Button, Image, SearchBar, WebView) • connect actions (click event, long press event) to code which is shared across all platforms • at the end at run-time all UI elements are mapped to native platform- specific UI components
  44. Forms • can be written in pure code ◦ sounds

    a bit like old school iOS style • or in XAML layout files ◦ sounds more like Android style ◦ not supporting existing XAML editor :-/ ◦ layouts have supporting class, so called CodeBehind class • using MVVM pattern
  45. source: https://xamarin.com/forms

  46. source: https://xamarin.com/forms

  47. source: https://xamarin.com/forms

  48. source: https://xamarin.com/forms

  49. Pros • data entry apps • prototypes & proof-of- concept

    apps • little platform-specific APIs • code sharing over custom UI Cons • specialized interaction required • highly polished design • many platform- specific APIs • custom UI above code sharing
  50. Emulator or is it simulator

  51. None
  52. None
  53. None
  54. Xamarin Player • simulate, debug, demo or run Android apps

    in our fast and hassle-free environment. only Android apps • integrated with Xamarin Studio and Visual Studio • native UI on Windows and Mac • widgets for location and battery • easy screenshot taking
  55. Xamarin Player • x86 virtual machine with HW acceleration •

    VT-x AMD-V • OpenGL 2.0 • uses VirtualBox 5.0.4
  56. Xamarin Player • can install non-Xamarin native Android APKs? YES

    • supports Google Play Services? YES via installing third-party provided ZIP file • hmm, sounds like a Genymotion clone? YES indeed
  57. Xamarin Player • free • less widgets • better drag

    & drop • fixed aspect window scaling • couple of device configurations • paid • more widgets • drag & drop • window scaling • lots of device configurations
  58. Documentation for C#, Android, iOS, and ...

  59. Documentation • for all targeted platforms Xamarin.Android, Xamarin.iOS, Xamarin.Forms, Xamarin.Mac

    and Windows • Android developer could learn iOS app architecture • explains not only C# or Xamarin-related aspects but also basics of the platforms • always with “download as PDF”
  60. Documentation • iOS app fundamentals http://developer.xamarin.com/guides/ios/application_fundamentals/ Protocols, Events, and Delegates

    • iOS user interface http://developer.xamarin.com/guides/ios/user_interface/ UIKit, Tables and cells, Storyboards • platform features http://developer.xamarin.com/guides/ios/platform_features/ Newsstand, HealthKit, and iOS 9 introduction
  61. Documentation • Android app fundamentals http://developer.xamarin.com/guides/android/application_fundamentals/ API levels, Activity lifecycle,

    Handling rotation • Android user interface http://developer.xamarin.com/guides/android/user_interface/ Actionbar, Splash screen, List view & adapters, RecyclerView • platform features http://developer.xamarin.com/guides/android/platform_features/ Fragments, ContentProvider, new Android versions
  62. Third-party libraries maven, pip, apt, cocoapods, npm, we want more!

  63. Third-party libraries • components via Xamarin Components Store • packages

    via NuGet package manager • libraries & UI components • easily to be added to a project
  64. None
  65. Components • HockeyApp • Crittercism • SQLCipher 499$ • Facebook

    SDK by Xamarin Inc. • Parse SDK by Parse Inc. • Tip of the Day
  66. None
  67. Packages • for Android, iOS, or both • native C#

    • via NuGet packages by .NET Foundation • 44,015 packages
  68. Packages • Android Support Library, Design Library, RecyclerView by Xamarin

    • Android Picasso by jacksierkstra • iOS SVProgressHUD (wrapper) • iOS FloatLabelEntry (native) • Parse.com in 6 versions
  69. Packages • get data from RESTful API and store it

    in data model • refit by paulcbetts • one C# code for Android, iOS and .NET RESTful API data model network service in our app AFNetworking Retrofit Retrofit manually as a dict
  70. Packages • get data from network • iOS AFNetworking •

    Android OkHttp latest is 2.5.0 • Xamarin ModernHttpClient on iOS NSURLSession on Android OkHttp 2.4.0
  71. Testing in case you have time for that

  72. Testing • Xamarin Test Cloud • Calabash

  73. Xamarin Test Cloud • 1,800 devices and adding 100 monthly

    • stars at 1,000 USD/month paid annualy … for 2 apps • 5,000 USD for 5 apps • NUnit or Calabash tests • screenshots, device performance for every step of every test
  74. source: https://xamarin.com/test-cloud

  75. source: https://xamarin.com/test-cloud

  76. Calabash • automated UI tests • using Behavior Driven Development

    approach • written in Ruby, or Cucumber, or Gherkin
  77. source: http://developer.xamarin.com/guides/testcloud/introduction-to-test-cloud/

  78. Scenario: Credit card number too short Given I am on

    the Credit Card Validation Screen When I enter a credit card number that's 16 digits long And I click on the Validate button Then I should see a validation error source: http://developer.xamarin.com/guides/testcloud/calabash/introduction-to-calabash/
  79. Community and expensive conference

  80. Community • blogs • developer advocates and their apps James

    Montemagno https://github.com/jamesmontemagno • podcast - Xamarin Podcast http://pca.st/9cXF • their own WWDC, also quite pricey 1,499$ Xamarin Evolve • Paul C. Betts and his libraries https://github.com/paulcbetts/
  81. IDE Visionary Documentation Jake Wharton Testing tools/services Emulator Third-party components

    Library Events Blogs/podcasts Programing Language
  82. IDE Visionary Documentation Jake Wharton Testing tools/services Emulator Blogs/podcasts Third-party

    components Library Events Paul C Betts Xamarin Studio Xamarin Podcast Miguel de Icaza Documentation Evolve Xamarin Android Player Components & packages Test Cloud & Calabash Programing Language C#, F#, support native
  83. None