Cross Plattform Software Entwicklung mit Xamerin

01. Apr 2016

David Roth

8 Min.

Cross Platform Ent­wick­lung in der Pra­xis
mit Xamarin‘s MonoMac

Die native Cross-Platt­form Smart­phone-Ent­wick­lung mit Xamarin für Android und iOS ist in aller Munde. Doch die we­nig­sten wissen, dass mit­hilfe von Mono für Linux und Xamarin’s freiem MonoMac-Frame­work, auch wun­der­bare native .NET-Desk­top-An­wen­dun­gen ent­wick­elt werden können. Am Bei­spiel unserer Zeit­er­fas­sung zeige ich euch, wie wir damit volle Kon­trolle über platt­form­spezifische Funk­ti­on­alitäten er­hal­ten, den Look & Feel des je­weil­igen Be­triebs­sys­tems auf den Bild­schirm zau­bern, und gleich­zeitig über 80 Pro­zent des C#-Codes auf allen drei Platt­formen wieder­ver­wenden.

TL;DR

Xamarin erlaubt es euch native .NET-Anwendungen für Windows, Mac und Linux zu schreiben. Trotz nativem Look & Feel spart ihr euch viel Arbeit, da ihr (richtiges Software-Design vorausgesetzt) einen Großteil eures C#-Codes auf allen 3 Plattformen wiederverwenden könnt.

Zeiterfassung – aber schnell!

Pro­jekt­ar­beits­zeiten werden bei uns mit­tels unserer Intranet-Software Fusion se­kund­en­ge­nau er­fasst. Ge­schah dies an­fangs noch über die Fusion-Web-Ober­fläche, wurde rasch der Ruf nach einer schnel­leren, maus­un­ab­häng­igen Mög­lich­keit laut. Die Lösung: ein Desktop-Client.

Auf­grund der ver­schied­enen Pro­jekt­tät­ig­keiten her­rscht bei uns ein sehr he­tero­genes IT-Um­feld. Währ­end der Groß­teil unserer Web­ent­wick­ler auf Linux-Systemen un­ter­wegs ist, setzt das Mar­ke­ting auf Mac OS und die .NET Ent­wick­ler auf Windows. Um die App nicht drei Mal ent­wick­eln zu müssen, ent­schie­den wir uns, die An­wen­dung mit C#/.NET/Mono/Xamarin um­zu­setzen.


Die Anforderungen

  • schnell & einfach
  • Active Directory Authentifizierung (Windows)
  • Username/Passwort Authentifizierung (Mac, Linux)
  • globale, mausunabhängige Steurung
  • Zeiterfassung in Sekunden


Architektur – Ein Blick von Oben

Um beim C#-Code 80 Pro­zent Wieder­ver­wend­bar­keit zu er­reich­en, war es be­sond­ers wich­tig, die rich­tige Archi­tek­tur zu wählen.

Wir ver­wen­den eine Solution mit mehreren Schichten, haben also eine Core-Bib­li­o­thek mit der we­sent­lichen Business-Logik, und drei platt­form­spe­zi­fische Bib­li­o­theken. Letztere bilden das User-Inter­face ab und im­ple­men­tieren in­di­vi­duelle Platt­form-Services.


Fuzzy Matching on Mac


Sekundenschnelle Zeiterfassung ist durchaus wörtlich gemeint.

Der Aufbau der Shared-Kernel-Architektur
build shared kernel architecture

Die wesentlichen Unterschiede pro Plattform

Mit seinem über­schau­baren Funk­ti­ons­um­fang zeigt der Time­track­ing-Client, dass bereits bei ver­gleichs­weise kleinen Apps der native Zu­griff auf die platt­form­spe­zi­fi­schen APIs wich­tig ist, um alle Funk­ti­on­alitäten zu un­ter­stützen.

Tray- und Taskbar-Integration

Unter­ge­bracht in der Taskbar des je­weil­igen Be­triebs­systems sym­bo­li­siert ein Icon den Status der Zeit­er­fas­sung mit­tels Ampel­farb­system. Ist das Icon grün, läuft die Zeit. Zu­sätz­lich dazu zeigt der Ubuntu-Client da­ne­ben auch die ak­tu­elle Ge­samt­zeit an, während Mac- und Windows-User diese per Tool­tip an­zei­gen lassen können.

Windows, Apple, Linux Taskbar Timetracking


Das Timetrackig Icon in den jeweiligen Tastbars.

Windows, Mac, Linux Taskleiste Zeiterfassung


Das Timetrackig Icon in den jeweiligen Tastbars.

Timetracking Desktop-Client in der Taskleiste


Das Timetrackig Icon in den jeweiligen Tastbars.


Global-Hotkey-Support
(„Schnellzugriff mittels Keyboard“)

Un­ab­hängig davon, in welchem Pro­gramm sich der An­wen­der be­fin­det, lässt sich mit­tels „F4“ Taste ein Quick-Search-Fen­ster öffnen, wel­ches se­kund­en­schnel­len Wech­sel zwi­schen den ver­schied­enen Tasks er­mög­licht. Da die App aber je­weils als Ser­vice im Hin­ter­grund läuft, musste dafür ein glo­baler Hotkey-Manager re­gi­striert werden. Der Zugriff erfolgt:



Credential-Management

Damit man sich nicht jeden Morgen aufs Neue einloggen muss, verwenden wir jeweils pro Plattform unterschiedliche native Credential-Storage-APIs:



Fazit

Wir sind mit dem Er­geb­nis sehr zu­frieden. Die Zeit­er­fas­sung-App in­te­griert sich durch Ver­wen­dung der na­ti­ven UI-APIs und Con­trols per­fekt in das je­weil­ige Be­triebs­system. Dank der mehrschichtigen Solution, konn­ten wir die ganze we­sent­liche Pro­gramm­logik nur ein­mal ent­wick­eln, und auf allen Platt­formen wieder­ver­wenden. Trotz­dem haben wir Zu­griff auf die spe­zi­fi­schen Platt­form-APIs, um Hot­key-Sup­port, Cre­den­tial-Ma­na­ge­ment und Active Di­rec­tory zu er­mög­lichen. Wie sind eure Er­fahr­ungen mit der Cross-Platform-Entwicklung und .NET?