SlideShare ist ein Scribd-Unternehmen logo
1 von 52
Downloaden Sie, um offline zu lesen
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+

Weitere ähnliche Inhalte

Ähnlich wie Codewiederverwendung in Xamarin-Apps maximieren

Ähnlich wie Codewiederverwendung in Xamarin-Apps maximieren (20)

Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
 
Roslyn DDC Kompakt 2014
Roslyn DDC Kompakt 2014Roslyn DDC Kompakt 2014
Roslyn DDC Kompakt 2014
 
Bernhard Wick - appserver.io - code.talks 2015
 Bernhard Wick - appserver.io - code.talks 2015 Bernhard Wick - appserver.io - code.talks 2015
Bernhard Wick - appserver.io - code.talks 2015
 
PHPblue LOS!NRW
PHPblue LOS!NRWPHPblue LOS!NRW
PHPblue LOS!NRW
 
Architekturen für .NET Core-Anwendungen
Architekturen für .NET Core-AnwendungenArchitekturen für .NET Core-Anwendungen
Architekturen für .NET Core-Anwendungen
 
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
 
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationDesktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core Applications
 
Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...
Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...
Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...
 
Thread-safe .NET durch Immutables
Thread-safe .NET durch ImmutablesThread-safe .NET durch Immutables
Thread-safe .NET durch Immutables
 
.NET Core Architecture (UI)
.NET Core Architecture (UI).NET Core Architecture (UI)
.NET Core Architecture (UI)
 
Composer und TYPO3
Composer und TYPO3Composer und TYPO3
Composer und TYPO3
 
BASTA! 2016 - Roslyn & Visual Studio Extensions
BASTA! 2016 - Roslyn & Visual Studio ExtensionsBASTA! 2016 - Roslyn & Visual Studio Extensions
BASTA! 2016 - Roslyn & Visual Studio Extensions
 
Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...
Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...
Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...
 
Testing XAML-based Windows Store Apps mit VS 2013
Testing XAML-based Windows Store Apps mit VS 2013Testing XAML-based Windows Store Apps mit VS 2013
Testing XAML-based Windows Store Apps mit VS 2013
 
Commercial OS Shops - Magento, OXID, xt:commerce. Evaluationskriterien für En...
Commercial OS Shops - Magento, OXID, xt:commerce. Evaluationskriterien für En...Commercial OS Shops - Magento, OXID, xt:commerce. Evaluationskriterien für En...
Commercial OS Shops - Magento, OXID, xt:commerce. Evaluationskriterien für En...
 
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
 
Per Anhalter zu Cloud-nativen API Gateways
Per Anhalter zu Cloud-nativen API GatewaysPer Anhalter zu Cloud-nativen API Gateways
Per Anhalter zu Cloud-nativen API Gateways
 
Xamarin ohne Mac und Android SDK? - So weit kommen Sie mit dem Xamarin Live P...
Xamarin ohne Mac und Android SDK?- So weit kommen Sie mit dem Xamarin Live P...Xamarin ohne Mac und Android SDK?- So weit kommen Sie mit dem Xamarin Live P...
Xamarin ohne Mac und Android SDK? - So weit kommen Sie mit dem Xamarin Live P...
 
Software Entwicklung im Team
Software Entwicklung im TeamSoftware Entwicklung im Team
Software Entwicklung im Team
 

Mehr von André Krämer

Mehr von André Krämer (11)

Xamarin.Forms App in einer Stunde
Xamarin.Forms App in einer StundeXamarin.Forms App in einer Stunde
Xamarin.Forms App in einer Stunde
 
Xamarin.Forms Workshop, DDC 2018
Xamarin.Forms Workshop, DDC 2018Xamarin.Forms Workshop, DDC 2018
Xamarin.Forms Workshop, DDC 2018
 
Typische Sicherheitslücken in ASP.NET MVC und Web API Anwendungen
Typische Sicherheitslücken in ASP.NET MVC und Web API AnwendungenTypische Sicherheitslücken in ASP.NET MVC und Web API Anwendungen
Typische Sicherheitslücken in ASP.NET MVC und Web API Anwendungen
 
Lokale Datenhaltung in Xamarin-Apps
Lokale Datenhaltung in Xamarin-AppsLokale Datenhaltung in Xamarin-Apps
Lokale Datenhaltung in Xamarin-Apps
 
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
 
Entity Framework hinter den Kulissen
Entity Framework hinter den KulissenEntity Framework hinter den Kulissen
Entity Framework hinter den Kulissen
 
Performance trotz Entity Framwork
Performance trotz Entity FramworkPerformance trotz Entity Framwork
Performance trotz Entity Framwork
 
Cross Plattform App Entwicklung mit Visual Studio 2015 (Xamarin und Cordova)
Cross Plattform App Entwicklung mit Visual Studio 2015 (Xamarin und Cordova)Cross Plattform App Entwicklung mit Visual Studio 2015 (Xamarin und Cordova)
Cross Plattform App Entwicklung mit Visual Studio 2015 (Xamarin und Cordova)
 
.NET Datenzugriff einfach und performant mit Micro O/R Mappern
.NET Datenzugriff einfach und performant mit Micro O/R Mappern .NET Datenzugriff einfach und performant mit Micro O/R Mappern
.NET Datenzugriff einfach und performant mit Micro O/R Mappern
 
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
 
Zentrale Dokumentengenerierung mit dem Open XML SDK
Zentrale Dokumentengenerierung mit dem Open XML SDKZentrale Dokumentengenerierung mit dem Open XML SDK
Zentrale Dokumentengenerierung mit dem Open XML SDK
 

Codewiederverwendung in Xamarin-Apps maximieren