© DrHitch/Shutterstock.com
Windows Phone 8.1

2 Universal-Apps für alle Windows-Geräte


Am 2. April 2014 fand wieder einmal Microsofts jährliche Entwicklerkonferenz Build statt, auf der passend zu Windows 8.1 auch Windows Phone 8.1 vorgestellt wurde. Das Besondere an der neuen Phone-Version ist, dass die Funktionen der Windows Phone Runtime beinahe identisch mit denen der Windows Runtime sind. Das schafft eine hohe Codekompatibilität. Eine neue zusätzliche Visual-Studio-Projektvorlage namens „Universal Windows Apps“ ermöglicht dementsprechend das einfache Bereitstellen einer Codebasis und unterstützt die Nutzung gerätespezifischer Funktionen.

Etwa eineinhalb Jahre zuvor, am 26. Oktober 2012, wurde zunächst einmal die finale Windows-8-Version veröffentlicht. Dass die dort enthaltenen „Metro-Style-Apps“ nicht auf dem Windows Phone 7 laufen würden, wussten wir bereits durch die neue Windows Runtime. Als drei Tage später Windows Phone 8 veröffentlicht wurde, war die Enttäuschung bei Vielen allerdings groß: Windows Phone 8 hatte zwar den Kern von Windows 8 RT bekommen, doch die Codekompatibilität zu Windows-Store-Apps ließ stark zu wünschen übrig. Das lag daran, dass hier nicht direkt die Windows Runtime für Apps zum Einsatz kommt, sondern eine Kombination aus der neuen Windows Phone Runtime und Silverlight for Windows Phone. Bei einigen Punkten mag das durch die technischen Unterschiede verständlich sein. Eher unwohl wurde den Entwicklern aber dann, wenn sie gleiche Funktionen verwenden wollten und diese nicht einheitlich angesprochen werden konnten. Ein Beispiel dafür wäre der Zugriff auf die Live-Tiles-Schnittstelle zur Versorgung der Kacheln mit neuen Informationen.

Der hohe Aufwand bei der Pflege beider Welten zeigt sich auch im Store: Nur sehr wenige Apps sind für beide Geräte erhältlich. Wo war also die schöne bunte Welt, die man sich erhofft hatte? Dem großen Cross-Device-Traum stand ein großes Hindernis im Weg.

Bisherige Lösungsansätze

Abseits der neuen bunten Welt war die Anzahl der .NET-Framework-Varianten stark gestiegen: .NET Compact Framework, Silverlight, Silverlight for Windows Phone, .NET Framework Client Profile, Windows Runtime, Windows Phone Runtime usw. Sie haben alle etwas gemeinsam: Sie sind nur eine Teilmenge des ursprünglichen .NET Frameworks und die erzeugten Klassenbibliotheken sind untereinander nicht kompatibel. Für einige Entwickler stellte dies ein großes Problem dar.

Microsoft ließ die Entwickler aber nicht im Stich und stellte einige Lösungsansätze für eine gemeinsame Codebasis zur Verfügung. Schon seit Visual Studio 2005 gibt es das „Linked Files“-Feature, mit dem etwa Klassendateien projekttypunabhängig wiederverwendet werden können. Die einzige Bedingung war, dass diese Klassendateien keine Abhängigkeiten zum Projekttyp aufweisen. Da das eine große Herausforderung darstellt, kam das Feature häufig nur für Entities (Datenklassen) zum Einsatz.

Die Portable Class Library

Nur das Teilen von Datenklassen kann keine dauerhafte Lösung sein. Viel wichtiger ist es, Logik wiederverwenden zu können. Deshalb löste die ab Visual Studio 2012 hinzugekommene Portable Class Library einen regelrechten Jubel unter den Entwicklern aus. Hierbei handelt es sich um eine spezielle Klassenbibliothek, die für unterschiedliche .NET-Profile gültig ist. Das ermöglicht eine gemeinsame Codebasis für unterschiedliche Projekttypen.

Es gibt allerdings ein Problem: Die festgelegten .NET-Profile können nicht komplett ausgereizt werden, da die Portable Class Library nur den Zugriff auf Funktionen ermöglicht, die in allen festgelegten Profilen vorhanden sind – der kleinste gemeinsame Nenner sozusagen.

Somit musste ein Workaround her. Bei der Portable Class Library ist dieser das Bereitstellen von Events. Die .NET-Profile abonnieren diese Events und können dann die plattformspezifischen Funktionen ausführen. Schade ist nur, dass dennoch oft die gleiche Logik wiederverwendet wird und sich lediglich die Methodenaufrufe unterscheiden. Das macht den Umweg über Events aus Architektursicht nicht gerade angenehm und schön.

Universal-Windows-Apps

Seit dem Visual Studio 2013 Update 2 RC gibt es eine neue Projektvorlage mit dem Namen „Universal Windows Apps“. Sie ermöglicht, Windows-8.1-Store-Apps und Windows-Phone-8.1-Apps mit einer gemeinsamen Codebasis zu entwickeln. Anders als der Name vermuten lässt, dient diese Projektvorlage jedoch nicht als eigenständige Applikation. Beim Erzeugen eines neuen Projekts wird zusätzlich ein Windows-8.1-Store- und ein Windows-Phone-8.1-Projekt angelegt. Das Universal-Windows-App-Projekt selbst ist in den anderen beiden Projekten automatisch referenziert. Es beinhaltet eine App.xaml, die nun für beide Projekte automatisch geteilt wird. Das ermöglicht das Festlegen von Ressourcen, die für beide Welten zugänglich sind.

Auf den ersten Blick ähnelt das Ganze stark einer Portable Class Library. Und das stimmt auch, obgleich es einige Unterschiede gibt: Zuerst einmal werden nur Windows-Store- und Windows-Phone-Projekte mit dem Update 8.1 unterstützt, der Support für die Xbox One soll allerdings bald folgen. Außerdem stehen hier alle...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang