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
Tweet

More Decks by Aleksander Piotrowski

Other Decks in Programming

Transcript

  1. 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
  2. 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
  3. 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
  4. 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: -
  5. 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”
  6. 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
  7. 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
  8. 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/
  9. 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
  10. 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
  11. 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
  12. Solution structure • References - base .Net classes • Components

    • Packages • Assets • Properties • Resources • our code • and even maybe tests...
  13. 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
  14. 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”
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. Xamarin Player • x86 virtual machine with HW acceleration •

    VT-x AMD-V • OpenGL 2.0 • uses VirtualBox 5.0.4
  21. 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
  22. 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
  23. 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”
  24. 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
  25. 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
  26. Third-party libraries • components via Xamarin Components Store • packages

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

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

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

    • Android Picasso by jacksierkstra • iOS SVProgressHUD (wrapper) • iOS FloatLabelEntry (native) • Parse.com in 6 versions
  30. 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
  31. 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
  32. 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
  33. Calabash • automated UI tests • using Behavior Driven Development

    approach • written in Ruby, or Cucumber, or Gherkin
  34. 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/
  35. 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/
  36. 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