Cross-Platform Mobile mit.net
Mobile Entwicklungslandschaft Nativ Crosscompiled Hybrid Web Beste Usability? Überschaubare Kosten?
Was ist Xamarin?
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
Was ist Xamarin Platform? Cross-Compiler Wrapper-Libraries um native Bibliotheken Plattformen ios Android Mac OS X
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
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
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.app ARM binary läuft nativ Cross-Platform Mobile mit C# 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 kompilieren linken.apk IL + JIT läuft nativ Cross-Platform Mobile mit C# Kerry W. Lothrop 10. März 2016
Native Libraries verwenden Bindings unter ios und Android
Bindings ios Tool: Objective Sharpie Nacharbeit meist nötig.h.cs [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; }
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>
Bindings C/C++ Aus Android und ios möglich public static class MyClass { [DllImport("myLib")] int Calculate(int onevalue, int anothervalue); }
Entwicklungsumgebung MacBook OS X Xcode (SDK, Simulatoren) Xamarin.iOS Windows 10 (VM) Visual Studio 2015 ReSharper Xamarin (ios & Android)
Code Sharing
Code Sharing Portable Class Libraries Sharing auf Binary-Ebene Eingeschränkter Funktionsumfang Nur andere PCLs als Referenzen
Code Sharing Shared Projects Sharing auf Code-Ebene Compiler-Direktiven möglich (#if)
Architektur
Architektur MVC View Model Controller
Architektur MVVM View ios View View Android View Windows Phone ViewModel data binding plattformunabhängig Model
MvvmCross
MvvmCross Projekt Open Source MVVM Framework Data Binding Dependency Injection Lokalisierung Navigation Messenger Portable Class Libraries Plugins NuGet NinjaCoder
MvvmCross Plattformen
MvvmCross Erweiterbarkeit View ios View Android View Windows Phone ViewModel interface IMvxPhoneCallTask { void MakePhoneCall( string name, string number); } ios-dienst plattformspezifischer Dienst Windows-Phone- Android-Dienst Model Dienst
MvvmCross Plugins
Demonstration
Was gibt es noch?
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>
User Interface Xamarin Inspector
User Interface Xamarin Test Cloud
Zusammenfassung
Mobile Entwicklungslandschaft Nativ Crosscompiled Hybrid Web Beste Usability? Überschaubare Kosten?
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
Fragen Kerry W. Lothrop kerry.lothrop.de @kwlothrop