Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Write once, run everywhere? Cross-Platform Mobile mit .NET

799 views

Published on

Write once, run everywhere? Für Mobilgeräte gibt es unterschiedliche Ansätze, dieses Ziel zu erreichen. Für .NET-Entwickler besonders spannend ist der Cross-Compile-Ansatz von Xamarin, der es ermöglicht, eine gemeinsame C#-Codebasis für die wichtigsten Plattformen zu pflegen und trotzdem native Oberflächen zu verwenden. Mit Hilfe des MvvmCross-Frameworks soll während des Vortrags in Visual Studio eine App erstellt werden, die Code Sharing bis einschließlich ViewModel ermöglicht und native Oberflächen für Android, iOS und Windows Phone umsetzt.

Published in: Software
  • Be the first to comment

  • Be the first to like this

Write once, run everywhere? Cross-Platform Mobile mit .NET

  1. 1. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Cross-Platform Mobile mit .NET
  2. 2. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Mobile Entwicklungslandschaft Nativ Cross- compiled Hybrid Web Beste Usability? Überschaubare Kosten?
  3. 3. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Was ist Xamarin?
  4. 4. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016
  5. 5. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Was ist Xamarin? • 2011 Gegründet • aus dem Ximian, Novell und dem Mono-Projekt hervorgegangen • wichtigste Produkte: – Xamarin Platform, ein Cross-Compiler auf Basis von Mono – Xamarin.Forms, eine plattformübergreifende XAML-basierte UI-Bibliothek – Xamarin Test Cloud, eine Lösung für UI-Tests auf einer Vielzahl von Geräten • Februar 2016 von Microsoft aufgekauft
  6. 6. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Was ist Xamarin Platform? • Cross-Compiler • Wrapper-Libraries um native Bibliotheken • Plattformen – iOS – Android – Mac OS X
  7. 7. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Warum Xamarin Platform? • Cross-Platform – Gemeinsame Codebasis – Eine moderne Sprache (C#) für alle Plattformen • Nativ – Performance – User Interface – API • Wiederverwendung von Code und Know-How
  8. 8. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Cross-compiling • Kompilieren aus C# (oder F#) in nativen, plattformabhängigen Code • (Fast) vollständiger Funktionsumfang von .NET 4.6 und C# 6 • Durch Integration von Teilen des Frameworks steigt die Paketgröße
  9. 9. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Xamarin.iOS (früher MonoTouch) • Ahead-of-time-Compiler direkt in ARM-Assembler-Code • Keine dynamische Codegenerierung – System.Reflection.Emit fehlt – Keine Dynamic Language Runtime .NET C# AOT iOS-API .ap p ARM binary läuft nativ
  10. 10. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Xamarin.Android (früher Mono for Android) • IL (Intermediate Language) und Mono-Runtime werden auf das Gerät deployed • Just-in-time compiler • Mono-Runtime läuft parallel zur Dalvik-VM • Ahead-of-time-Kompilierung als Option möglich .NET C# Android-API .ap k IL + JIT läuft nativ kompilieren linken
  11. 11. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Native Libraries verwenden Bindings unter iOS und Android
  12. 12. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Bindings iOS •Tool: Objective Sharpie •Nacharbeit meist nötig .h [BaseType(typeof(NSObject))] interface MyClass { // Method [Export("draw:atColumn:andRow:")] void Draw(string text, int column, int row); // Property [Export("menuVisible")] bool MenuVisible { [Bind("isMenuVisible")] get; set; } } .cs
  13. 13. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Bindings Android •*.jar einfügen •C# wird automatisch generiert (JNI) •Transformationen müssen u.U. manuell ergänzt werden <metadata> <attr path="/api/package[@name='com.nostra13.universalimageloader.cache.memory.impl'] /class[@name='FIFOLimitedMemoryCache'] /method[@name='removeNext']" name="managedReturn"> Java.Lang.Object </attr> <attr path="/api/package[@name='com.nostra13.universalimageloader.core.imageaware'] /class[@name='ImageViewAware'] /method[@name='getWrappedView']" name="managedReturn"> Android.Views.View </attr> </metadata>
  14. 14. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Bindings C/C++ •Aus Android und iOS möglich public static class MyClass { [DllImport("myLib")] int Calculate(int oneValue, int anotherValue); }
  15. 15. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Entwicklungsumgebung MacBook Windows 10 (VM)  Visual Studio 2015  ReSharper  Xamarin (iOS & Android) OS X  Xcode (SDK, Simulatoren)  Xamarin.iOS
  16. 16. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Code Sharing
  17. 17. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Code Sharing Portable Class Libraries • Sharing auf Binary-Ebene • Eingeschränkter Funktionsumfang • Nur andere PCLs als Referenzen
  18. 18. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Code Sharing Shared Projects • Sharing auf Code-Ebene • Compiler-Direktiven möglich (#if)
  19. 19. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Architektur
  20. 20. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Architektur MVC View Model Controller
  21. 21. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 View Architektur MVVM View Android Model ViewModel plattformunabhängig data binding View iOS View Windows Phone
  22. 22. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 MvvmCross
  23. 23. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 MvvmCross Projekt • Open Source MVVM Framework • Data Binding • Dependency Injection • Lokalisierung • Navigation • Messenger • Portable Class Libraries • Plugins • NuGet • NinjaCoder
  24. 24. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 MvvmCross Plattformen
  25. 25. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 MvvmCross Erweiterbarkeit View Android Model ViewModel View iOS View Windows Phone plattform- spezifischer Dienst
  26. 26. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 MvvmCross Erweiterbarkeit interface IMvxPhoneCallTask { void MakePhoneCall( string name, string number); } View Android Model ViewModel View iOS View Windows Phone Windows- Phone-Dienst Android- Dienst iOS-Dienst
  27. 27. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 MvvmCross Plugins
  28. 28. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Demonstration
  29. 29. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Was gibt es noch?
  30. 30. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 User Interface Xamarin.Forms • Code-Sharing für den UI-Code • XAML • Native User-Interfaces • Mischen von Xamarin.Forms und plattformspezifischen Views möglich <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="ButtonXaml.ButtonXamlPage"> <Button Text="Tap for click count!" Clicked="OnButtonClicked" /> </ContentPage>
  31. 31. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 User Interface Xamarin Inspector
  32. 32. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 User Interface Xamarin Test Cloud
  33. 33. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Zusammenfassung
  34. 34. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Mobile Entwicklungslandschaft Nativ Cross- compiled Hybrid Web Beste Usability? Überschaubare Kosten?
  35. 35. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Zusammenfassung • Cross-Platform für alle wichtigen Endgeräte ohne JavaScript • Native Performance und Möglichkeiten • Mit bekannten Tools mehr Plattformen erreichen • Die jeweilige plattformspezifische UI-Technologie muss trotzdem erlernt werden • Ein breites Tooling unterstützt die Entwicklung
  36. 36. © Zühlke 2016Cross-Platform | Kerry W. Lothrop 10. März 2016 Fragen Kerry W. Lothrop kerry.lothrop.de @kwlothrop

×