Codewiederverwendung in Xamarin-
Apps maximieren
André Krämer
André Krämer – Software, Training & Consulting / Quality Bytes GmbH
Softwareentwickler, Trainer, Berater, Microsoft MVP
https://andrekraemer.de | andre@andrekraemer.de | @codemurai
André Krämer
LinkedIn Learning Video Trainings ZertifizierungenAuszeichnungen
• andre@andrekraemer.de
• https://andrekraemer.de
E-Book
Buch (Q3 / 2019)
Was macht eigentlich die
Xamarin Platform?
Die Xamarin Platform ermöglicht die
Entwicklung von Apps für Android und
iOS mit der Programmiersprache C#
unter Verwendung der Klassenbibliothek
des .NET Frameworks.
Beteiligte Komponenten
• Portierung des Mono Frameworks für Android / iOS.
• Ein Compiler, der aus C#-Quelltext die
entsprechenden Binärdateien für Android und iOS
erzeugt.
• C#-Wrapper-Klassen um plattformspezifische APIs.
• Eine Integration verschiedener Werkzeuge in die
Entwicklungsumgebungen Visual Studio und Visual
Studio for Mac.
Das bietet uns Xamarin
Fehlt da nicht etwas?
Ja! Geteilter Code fehlte!
Geteilter Code entsteht nicht automatisch!
Umsetzung objektorientierter Prinzipien
+
Entkopplung von nicht teilbarem Code
=
Geteilter Code
Klassisches Xamarin
Xamarin.Forms
?
Quellcode den Sie nicht teilen können
• Zugriff auf gerätespezifische APIs
• Zugriff auf die Hardware
• Zugriff auf native Bibliotheken
Optionen für geteilten Code
Shared Projects
.NET
Standard
Portable Class
Libraries
SHARED PROJECTS
Shared Projects in VS 2017
Shared Projects
Bausteine von Shared
Projects
#if #elif #else #endif
__ANDROID__ __IOS__ WINDOWS_UWP
Shared Projects im Editor
DEMO
Shared Projects
Vorteile von Shared Projects
• Einfach
• Keine speziellen Anforderungen an die
Architektur
• Fremdbibliotheken können direkt
genutzt werden
Nachteile von Shared Projects
• Übersichtlichkeit des Quellcodes leidet
• Nur bedingt refactoring-sicher
• Keine eigene Assembly
– Eigene Steuerelemente benötigen zur Nutzung einen Namespace
– xmlns:local=”clr-
namespace:MeineAssembly.Controls;assembly=MeinAssemblyName”
• Bei weiteren Plattformen sehr aufwändig
Beispiel Übersichtlichkeit
public MainPage()
{
InitializeComponent();
var text = "";
#if __ANDROID__
text = Android.OS.Build.Device;
#elif __IOS__
text = UIKit.UIDevice.CurrentDevice.Name;
#elif WINDOWS_UWP
text = new Windows.Security.
ExchangeActiveSyncProvisioning.
EasClientDeviceInformation().FriendlyName;
#endif
DeviceInfoLabel.Text = text;
}
“FRIENDS DON’T LET FRIENDS
USE SHARED PROJECTS.”
Jason Smith – ehem. Xamarin.Forms Lead Developer
PORTABLE CLASS LIBRARIES
PCL
PCL
ECMA, .NET und Mono
PCL
PCL
PCL anlegen
Portable Class Libraries
.NET
Framework
Xamarin.iOS
Xamarin.Android
.NET Core
Aktueller Stand zu PCLs
.NET STANDARD
.NET Standard
• Formale Spezifikation von .NET APIs
• Ähnlich wie ECMA 334/335, aber für die
.NET BCL
• Jede .NET Implementierung gibt die
höchste unterstütze .NET Standard
Version an
UnterstützungUnterstützung von .NET Standard Versionen durch verschiedene Implementierungen des .NET
Framework
.NET-Standard 1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0
.NET Core 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0
.NET Framework 4.5 4.5 4.5.1 4.6 4.6.1 4.6.1 4.6.1 4.6.1
Mono 4.6 4.6 4.6 4.6 4.6 4.6 4.6 5.4
Xamarin.iOS 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.14
Xamarin.Mac 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.8
Xamarin.Android 7.0 7.0 7.0 7.0 7.0 7.0 7.0 8.0
Universelle Windows-
Plattform 10.0 10.0 10.0 10.0 10.0 10.0.16299 10.0.16299 10.0.16299
Windows 8.0 8.0 8.1
Windows Phone 8.1 8.1 8.1
Windows Phone
Silverlight 8.0
.NET Standard Bibliotheken
• Enthalten nur plattformübergreifenden
Code
• Erzeugen eine eigene Assembly
• Plattformspezifischer Code muss
injiziert werden
.NET Standard und Xamarin
.NET Standard in VS
DEMO
.NET Standard
Vorteile von .NET Standard
• Klare Trennung von
plattformspezifischen und allgemeinem
Code
• Höhere Übersicht
• Höhere Wartbarkeit
• Zukunftssicher
Nachteile von Shared Projects
• Höherer Aufwand
• Ggfs. zusätzliche Abstraktionsschicht
• Schwerer zur verstehen falls IoC bisher
nicht bekannt war
XAMARIN.FORMS
DEPENDENCY SERVICE
Abhängigkeitsmanagement mit dem
Xamarin.Forms Dependency Service
DEMO
Xamarin.Forms Dependency Service
XAMARIN UND IOC
CONTAINERN
Abhängigkeitsmanagement mit
IoC Container mit Xamarin
DEMO
Xamarin und Autofac
XAMARIN.ESSENTIALS
Gerätespezifische Zugriffe mit
Xamarin.Essentials
• Abstraktionsschicht über gängige
plattformspezifische Implementierungen
für
– Android
– iOS
– UWP
Umfang
• Beschleunigungsmesser
• App-Informationen
• Akku
• Zwischenablage
• GPS
• Netzwerkkonnektivität
• Datenübertragung via Share / Teilen
• Geräteinformationen
• E-Mail-Versand
• Dateisystemzugriff
• Taschenlampe
• Einstellungen
• Vibration
• Text-To-Speech
• SMS Versand
• Gyroskop
• Geocodierung
• Sicherer Speicher
• …
Fehlende Features
• Kamera
• Toast Notifications
• Adressbuchzugriff
• …
• Testbarkeit (lauter statische Methoden)
Homepage
andre@andrekraemer.de | http://andrekraemer.de | http://andrekraemer.de/blog
https://github.com/AndreKraemer/XamarinCodeSharingDemo
Vielen Dank!
Blog
Xing
Facebook
Twitter
Google+

Codewiederverwendung in Xamarin-Apps maximieren