Plattformübergreifende Softwareentwicklung

Einleitung

In den letzten Jahren ist die Vielfalt an digitalen Geräten stark gewachsen. Durch die neuen Geräte sind zum Teil komplett neue Plattformen auf dem Markt erschienen. Ein Blick in die nahe Zukunft zeigt am Beispiel von Smartwatches oder Google Glass, dass weitere dazu kommen werden.

Jede einzelne Zielplattform wird normalerweise in einer separaten Entwicklungsumgebung mit unter-schiedlichen Programmiersprachen und Frameworks entwickelt. Dies führt zu Mehraufwand durch mehrfaches Schreiben derselben Programmzeilen, und erhöht die Fehlerquote bei der Portierung des Programmes auf die einzelnen Plattformen.

Das Ziel muss es folglich sein, mit Hilfe plattformübergreifender (Cross-platform) Entwicklung den Entwicklungsaufwand zu senken. Dies führt gewöhnlich automatisch auch zu einer Senkung der Entwicklungskosten. Ausserdem sollen dadurch Erweiterungen und Fehlerkorrekturen schneller erledigt werden können.

Es gilt abzuklären, ob eine plattformübergreifende Entwicklung für ein Projekt überhaupt geeignet ist, und wenn ja, welche Technologien eingesetzt werden sollen. Ebenfalls einzubeziehen sind die Anforderungen bezüglich der Wartbarkeit, die User Experience der Applikation (UX) und die Ausbildung der Entwickler.

Die Idee hinter der plattformübergreifenden Entwicklung liegt darin, die Applikation mit einer einzigen Codebasis auf allen gewünschten Plattformen und in Kombination mit verschiedenen Geräten laufen zu lassen. Dabei sollen die Programmzeilen möglichst nur einmal geschrieben werden.

Lösungsansätze der mobilen Entwicklung

Im Bereich der mobilen Entwicklung gibt es viele moderne Lösungsansätze für plattformübergreifende Applikationen. Damit gibt es auch viele Möglichkeiten, Apps für mobile Plattformen zu entwickeln.

Folgende Übersicht zeigt unterschiedliche Lösungsansätze, welche in der mobilen Entwicklung anzutreffen sind. Diese Ansätze sind auch auf nicht mobilen Plattformen umsetzbar.

Web

Bei Webapps handelt es sich um Anwendungen, die auf Client Seite mit reinen Webtechnologien wie HTML, CSS und JavaScript implementiert werden. Für die Darstellung kommt der auf dem Gerät installierte mobile Browser zum Einsatz.

Der Übergang von Webapps zu einfachen Webseiten ist dabei fliessend. Die Webapp ist immer auf eine Internetverbindung angewiesen, obwohl mit HTML5 Zwischenspeicher-Technologien eine begrenzte Form einer offline App möglich wäre. Webapps können nicht auf dem Gerät installiert werden, ihr Aufruf wird als Lesezeichen auf dem Homescreen gespeichert.

Vorteile:

> Da es sich bei Webapps um Webseiten handelt, können sie einfach und schnell aktualisiert werden. Mit jedem Start oder Refresh der Webseite läuft die App jeweils gleich in der neusten Version.

> Ein weiterer Vorteil ist, dass die App nicht über einen “App Store” oder Ähnliches, mit entsprechenden Zulassungsprozessen, verteilt werden muss.

Nachteile:

> Der grösste Nachteil liegt in der eingeschränkten offline Nutzbarkeit. Webapps sind trotz existierender Zwischenspeicherungs-Technologien meist von einer Internetverbindung abhängig.

> Ein weiterer Nachteil ist der eingeschränkte, zur Verfügung stehende Zugriff auf Hardware- und Betriebssystem-nahe Funktionen des Gerätes, wie zum Beispiel das Notification Center.

> Die Performance eignet sich nicht für rechenintensive Anwendungen.

Hybrid

Beim Hybrid Ansatz werden die Webtechnologien HTML, CSS und Javascript mit den plattformspezifischen Programmiersprachen vereint.
PhoneGap ist dafür wohl das populärste Framework auf dem Markt. Es dient als eine Art Browser, welcher als Container in die App eingebunden ist und über Schnittstellen erweiterten Zugriff auf die plattformspezifischen Funktionalitäten gewährt. Damit können diese über einen Plug-in-Mechanismus eigenständig ergänzt werden. Die Webtechnologie-Quelldateien werden direkt in die App gepackt. Somit ist die App als Paket ausführbar, und benötigt, anders als eine gewöhnliche Webapp, beim Aufstarten keine Internetverbindung.

Bei der Entwicklung einer Hybrid-App können diverse Web Frameworks verwendet werden, beispielsweise Mobile AngularJS, Kendo UI von Telerik, JQuery Mobile, Sencha Touch und unzählige Weitere. Die Entscheidung für die Auswahl des richtigen Web Framework ist wiederum von diversen Anforderungen abhängig. In diesem Artikel wird nicht weiter darauf eingegangen.

Vorteile:

> Ein Vorteil des Hybrid Ansatzes ist die flexible Webtechnologie, welche eine rasche Entwicklung ermöglicht.

> Ein weiterer Vorteil ist der Zugriff auf plattformspezifische Funktionen über die entsprechenden Schnittstellen, sowie die Wiederverwendbarkeit des Quellcodes in unterschiedlichen Betriebssystemen und Browsern.

Nachteile:

> Die Nachteile betreffen vor allem die Darstellung und die damit verbundene User Experience.

> Die Performance ist auch spürbar langsamer und kann Animationen nicht flüssig erscheinen lassen. Der Overhead, welcher durch den Browser Container erzeugt wird, führt zu langen Ladezeiten beim Start einer App.

Cross-platform Interpreter

Damit ist der Einsatz von dynamischen Programmiersprachen gemeint, die zur Laufzeit über einen in der App integrierten Interpreter ausgeführt werden. Ein bekannter Vorreiter ist Titanium von Appcelerator, welcher JavaScript als gemeinsame Sprache verwendet. Anders als beim Hybrid Ansatz wird nicht zwingend HTML und CSS verwendet. Dies hat den Vorteil, dass die Darstellungsschicht performanter und somit flüssiger läuft. Durch direkte Anbindungen an das Plattform-spezifische grafische Benutzeroberflächen-Framework können die entsprechenden nativen Bedienungs-Elemente verwendet werden. Seit Apple die Richtlinien für iOS angepasst hat, ist es möglich, neben JavaScript auch Sprachen wie etwa Ruby oder Python dafür zu verwenden. Bekannte Frameworks, die den Entwickler unterstützen können, sind zum Beispiel Rhodes für Ruby und Kivy für Python.

Vorteile:

> Moderne und dynamische Programmiersprachen wie Ruby oder Python können für die mobile Entwicklung verwendet werden.

> Wenn JavaScript verwendet wird, gibt es ausserdem eine grössere Plattformunabhängigkeit, da der Quellcode zum Teil auch in Web-Browsern wiederverwendet werden kann.

Nachteile:

> Da das Programm erst zu Laufzeiten interpretiert wird, führt dies zu Performance Einbussen.

> Durch den Overhead, welcher durch die Integration des Interpreters zwangsläufig entsteht, wird auch die Ladezeit beim Start der App länger.

Cross-platform Native

Bei diesem Ansatz wird eine Programmiersprache verwendet, welche auf allen Zielplattformen zu Verfügung steht. Dadurch ist die App auf unterschiedlichen Plattformen ausführbar. Lediglich plattformeigene Komponenten werden plattformspezifisch entwickelt. Ein Framework wie beispielsweise Xamarin oder RemObjects kann dabei sehr hilfreich sein, weil es dem Entwickler Komfort bei der Entwicklung bietet, wie etwa die Unterstützung zur Anbindung von nativen Programmteilen an plattformneutrale Programmteile.

Vorteile:

> Unterstützung und Auswahl von plattformübergreifenden Bibliotheken für gängige Komponenten.

> Der Ansatz bietet die bestmögliche Performance unter den plattformübergreifenden Lösungsansätzen.

Nachteile:

> Nachteil ist die Abhängigkeit zum Framework und dessen Fortbestehen.

> Dazu kann der durch das Framework verbundene Overhead zu spürbar längeren Ladezeiten beim Start der App führen.

> Bei komplexen Bibliotheken wie etwa bei Xamarin mit Mono können unter gewissen Umständen geringe Performance-Einbussen auf einzelnen Zielplattformen auftreten.

Deswegen wird hier auch gerne einfach auf die Sprachen C oder C++ zurückgegriffen. Dabei sollte darauf geachtet werden, dass nur sogenannte C11 und C++11 standardisierte Bibliotheken verwendet werden. Diese werden praktisch von jeder Plattform unterstützt. Meist wird der plattformübergreifende Programmteil als eigene Bibliothek geschrieben, welche wiederum von der Native App verwendet wird. Dropbox wurde mit diesem Ansatz entwickelt. Dadurch gibt es keine Abhängigkeit zu einem Drittanbieter wie Xamarin, und der damit verbundene Overhead entfällt ebenfalls.

Pure Native

Eine Pure Native App wird mit der für die Plattform vorgesehenen Programmiersprache und Frameworks entwickelt. Bei Apple’s iOS kommt Objective-C mit Xcode zum Einsatz, für Windows Phone hingegen C# mit Visual Studio, und bei Android ist es Java mit Android Studio. Das bedeutet, dass für jede einzelne Zielplattform eine eigene App, in deren Umgebung, entwickelt wird. Somit handelt es sich hier nicht um eine plattformübergreifende Lösung.

Vorteile:

> Die App läuft direkt auf dem darunter liegenden Betriebssystem und hat somit optimalen Zugriff auf dessen Funktionen.

> Darüber hinaus können die gerätespezifischen Hardwarefunktionen mit direktem Zugriff vollumfänglich genutzt werden. Dies wirkt sich positiv auf die Performance aus.

Nachteile:

> Die App ist an die Plattform gebunden, für die sie entwickelt wurde. Ohne Portierung und Anpassung der kompletten App wird diese nicht auf einer anderen Plattform laufen.

> Aus diesem Grund ist es auch aufwendiger, eine App plattformübergreifend mit nativer Technologie zu entwickeln und zu betreiben, da der Entwicklungsaufwand je Betriebssystem anfällt.

User Experience

Bei den Desktop Applikationen hat sich die plattformübergreifende Entwicklung nicht wirklich durchgesetzt. Ein Blick in die Vergangenheit zeigt, dass der Grund dafür meistens an deren Umsetzung lag. Es wurde meistens versucht, eine 100% plattformübergreifende Kompatibilität zu erreichen. Zu diesem Zweck wurden plattformübergreifende Frameworks für die grafische Benutzeroberfläche entwickelt und eingesetzt, und plattformspezifische Funktionen generalisiert.
Dies hatte zur Folge dass sich die User Experience (UX) fremd anfühlte weil das gewohnte Design fehlte.

Nicht nur das optische Design (Auch User Interface oder UI genannt) fühlte sich fremd an, sondern auch die Anordnung und die Strukturierung der Applikation. Für serverseitige Applikationen hat der Ansatz hingegen geklappt. Er wird heute auch gerne und oft angewandt.

Die Schlussfolgerung daraus ist, dass die Darstellungsschicht für Desktop Applikationen individuell pro Zielplattform entwickelt werden sollte, um die bestmögliche User Experience zu erhalten. In einigen grafischen Benutzeroberflächen-Frameworks wird aus einer generischen Definition versucht, für jede einzelne Plattform die originalen Oberflächen nachzuahmen.

Anwender bemerken dies allerdings oft dadurch, dass die Oberfläche zwar optisch vertraut aussieht, sich aber nicht so anfühlt.
Es ist praktisch unmöglich, eine Benutzeroberfläche exakt dem Original nachzuahmen. Deswegen lohnt es sich, auf ein derartiges Framework zu verzichten, und die Plattform eigenen Benutzeroberflächen einzusetzen. Andernfalls ist es ratsam, ein Framework zu wählen, welches ein eigenes, plattformübergreifendes, individuelles Design mit sich bringt. Am Ende ist es eine Kompromissfindung zwischen plattformspezifischer User Experience und breiter Plattformunterstützung.

Um eine ideale User Experience zu erlangen, wird lediglich die Benutzerschnittstelle für jede einzelne Plattform eigens entwickelt und der restliche Quellcode wird plattformübergreifend geschrieben. Folgende Grafik dient der Zuordnung der zuvor beschriebenen Lösungsansätze:

Geräteübergreifende Entwicklung

Durch Smartphones und Tablets nimmt die Vielfalt der im Alltag genutzten computerbasierten Geräte stark zu. Bei einer Neuentwicklung wird deswegen auch immer öfters die Anforderung der geräteübergreifenden Verfügbarkeit an die Applikation gestellt. Dabei wird versucht, im Idealfall den grössten Teil der Programme geräteübergreifend weiterverwenden zu können.

Bei der geräteübergreifenden Entwicklung gibt es mehr zu beachten als nur die betriebssystemspezifische grafische Benutzeroberfläche und die damit verknüpfte User Experience, denn die Geräte unterscheiden sich stark in ihrer Bedienung und ihrem Verwendungszweck.

Während auf klassischen Desktopgeräten Maus und Tastatur zum Einsatz kommen, wird das mobile Gerät mit Fingergestensteuerung bedient. Das Display auf mobilen Geräten ist ebenfalls wesentlich kleiner als auf den Desktop Rechnern. Dies hat einen grossen Einfluss auf die grafische Benutzeroberfläche, und sollte dementsprechend pro Gerätefamilie konzipiert werden. Dabei gilt es aber dennoch, die Besonderheiten und die funktionalen Möglichkeiten der Gerätefamilien zu berücksichtigen, um eine möglichst Plattform nahe User Experience zu erhalten. Weitere wesentliche Aspekte sind Verwendungszweck und -art eines Gerätes.

Ein Smartphone ist ein steter Begleiter, und findet daher oft unterwegs Verwendung. Tablets und Notebooks kommen an beliebigen Orten eher stationär zum Einsatz, und Desktop Computer werden in der Regel wegen ihres Bildschirms fest installiert. Diese Aspekte sollten bei der Erstellung eines Konzeptes pro Gerätefamilie ebenfalls berücksichtigt werden, da durch deren Verwendung andere Funktionalitäten in den Vordergrund gerückt werden können.

Neuentwicklungen sollten mit dem “Mobile First” Ansatz konzipiert und entwickelt werden. Der geringe Platz auf einem kleinen Smartphonebildschirm führt automatisch dazu, dass, das Konzept dafür eleganter gestaltet wird. Somit reduziert sich die Applikation auf das Wesentliche. Idealerweise führt dieses Vorgehen auf ein übersichtliches, leicht zu bedienendes Designkonzept. Dieses Konzept lässt sich dann meist auch einfach auf Geräte mit grösseren Bildschirmen portieren.

Architektur

Um den plattformübergreifenden Ansprüchen gerecht zu werden, benötigt es eine Architektur, welche eine saubere Aufteilung zwischen plattformübergreifenden und plattformspezifischen Programmteilen bietet. Die Xamarin Architektur bietet sich exemplarisch als allgemeine, plattformübergreifende, Architektur an.

Die Ebenen “User Interface (UI) Layer” und “Application Layer” werden plattformspezifisch entwickelt.

Beim “User Interface Layer” (Auch UI Layer genannt) handelt es sich um die grafische Benutzeroberfläche.

Der “Application Layer” steuert gerätespezifische Schnittstellen zur Hardware, wie etwa physische Knöpfe, SD-Card, NFC und Fingerprint Sensor.

Alle weiteren Ebenen sind plattformunabhängig zu entwickeln. Dabei gilt es, so viele Teile wie möglich plattformübergreifend zu realisieren. Im Idealfall werden Bindings für die gerätespezifischen Komponenten geschrieben, welche dann über eine einheitliche Schnittstelle im plattformübergreifenden Programmteil angesprochen werden können. Somit werden Redundanzen im Quellcode verringert, und die Wartbarkeit der Applikation wird vereinfacht.

Fazit

Die plattformübergreifende Entwicklung ist nichts Neues, sondern lediglich ein wiederkehrendes Bedürfnis, das durch die wachsende Anzahl an unterschiedlichen neuen Betriebssystemen in der mobilen Branche wieder aufblüht. Die zentrale Problematik hat sich auch nicht wirklich verlagert, und liegt wie früher noch auf der Benutzerschnittstellen Ebene.

Es gibt keine Zauberformel für die Entwicklung von plattformübergreifenden Applikationen. Der ideale Ansatz für ein Projekt muss individuell für jedes einzelne Projekt entschieden werden. Die Entscheidung ist dabei abhängig von den Anforderungen der Funktionalitäten an die Applikation, von den Vorkenntnissen der Entwickler, von Budget und Zeit für das Projekt und vielen weiteren Faktoren.

Wichtig ist es, die Zielgruppe des Business Cases zu kennen. Generell gilt, dass im Consumer Bereich mehr Wert auf eine gute, plattformnahe User Experience gesetzt wird. Bei Spielen dagegen ist eine gute Performance massgebend, und im Enterprise Umfeld hat der Funktionalitäts-Umfang eine wesentlich grössere Bedeutung. Bei Neuentwicklungen mit der Anforderung einer plattformübergreifenden Lösung sind folgende Empfehlungen nützliche Richtwerte:

Consumer Bereich

> Im Bereich Consumer ist tendenziell auf einen Cross-platform nativen Lösungsansatz zu setzen, welcher beim plattformübergreifenden Quellcode auf schlanke C11/C++11 oder ähnlich basierte Bibliotheken setzt, die dann in der plattformspezifischen Umgebung eingebunden werden.

Spiele Entwicklung

> Bei der Spiel-Entwicklung empfiehlt es sich, eine Cross-platform native Spiele-Engine wie Cocos2d oder etwa Unity einzusetzen. Diese Engine beinhaltet meist alle essenziellen Bibliotheken zur Spiel Entwicklung. Manche bieten sogar eine eigene Entwicklungsumgebung an.

Enterprise Umfeld

> Im Enterprise Umfeld ist der Fokus auf die Geschäftslogik zu setzen. Dafür eignen sich Frameworks, welche dem Entwickler die Arbeit der plattformübergreifenden spezifischen Implementierung grösstenteils abnehmen. Für eine plattformübergreifende Lösung welche eine gute User Experience oder Performance benötigt, bietet sich Xamarin an. Sind User Experience und Performance vernachlässigbar, dann ist die Anwendung eines Hybrid Ansatz ebenfalls durchaus möglich.


Unsere Software Entwicklungsdienstleistungen

> Konzeption von Softwarelösungen basierend auf Ihrer Idee

> Beratung zur Wahl von Technologien für Cross-platform Software Entwicklung

> Individuelle Entwicklung Ihrer Software oder Mobileapp basierend auf Spezifikationen (Kontakt)

> Mobile Softwarelösungen

> Erweiterung von Softwarelösungen für zusätzliche Geräte- oder Plattformkompatibilität

FRAGEN?

Zu Software Entwicklungsdienstleistungen kontaktieren Sie bitte Daniel Meienberg: dmeienberg@diso.ch

Diso AG – Der Daten- und Cloud-Experte

Die Diso AG ist ein renommierter IT-Dienstleister und langjähriger Oracle-Vertriebspartner in der Schweiz mit Schwerpunkten in den Bereichen Datenbanken und Cloud-Lösungen. Diso bietet ihren Kunden beispielsweise die Oracle Plattform as a Service-Lösung und die dazugehörige Datenmigration an. Kunden profitieren des Weiteren vom Komplettlösungsangebot im Sinne von Planung, Integration, Support inklusive Betrieb und Überwachung von IT-Infrastrukturen und Datenbanksystemen.

Im Bereich Software-Engineering entwickelt Diso massgeschneiderte IT und Software-Lösungen für unternehmensspezifische Anwendungen, wann immer sinnvoll mit einem mobile-first Ansatz. Zudem ist Diso Spezialist wenn es um die Software-basierte Optimierung von Performance geht. Auf die Kompetenz des traditionsreichen IT-Dienstleisters und Mittelständlers vertrauen bereits namhafte Kunden aus den Schwerpunktbranchen Banken, Versicherungen Detailhandel und öffentliche Verwaltung.

Die Diso designt wandlungsfähige IT-Systeme, entwickelt massgeschneiderte Software und ermöglicht die performante Verwendung und Auswertung von Informationen.