Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
- Praktischer Leitfaden für den schnellen Einstieg mit sofort anwendbaren Codebeispielen
- Migration von Xamarin.Forms-App nach .NET MAUI
- Mit durchgängigem, praxisorientiertem Beispiel
- Neu in der 2. Auflage: XAML-Grundlagen, eigene Steuerelemente entwickeln, Scannen von Barcodes, Lokalisierung von Apps, Deployment in die App Stores
- Ihr exklusiver Vorteil: E-Book inside beim Kauf des gedruckten Buches
Programmieren Sie bereits Desktop- oder Webanwendungen mit C# und .NET und möchten nun auch Apps für Android, iOS und macOS entwickeln? Dann ist dies das richtige Buch für Sie. Der langjährige Microsoft MVP André Krämer zeigt Ihnen, wie Sie mit C# 12 und .NET 8 innovative Apps für Android, iOS, macOS und Windows entwickeln können. Machen Sie mehr aus Ihrem Wissen und gehen Sie den nächsten Schritt in Ihrer Karriere zum .NET-App-Entwickler!
Was erwartet Sie in diesem Buch?
Praxisorientiert: Entwickeln Sie eine innovative Lebens - mittelverwaltungs-App, die reale Herausforderungen wie Lebensmittelverschwendung adressiert. Dieses Projekt vermittelt nicht nur grundlegende Fähigkeiten, sondern auch fortgeschrittene Techniken der modernen App-Entwicklung. Umfassend: Von der einheitlichen Codebasis über Oberflächendesign und Datenbankanbindung bis hin zum Zugriff auf Geräte-APIs – dieses Buch deckt alles ab, was Sie benötigen, um sofort loslegen zu können.
End-To-End: Von der Planung über die Entwicklung bis hin zum Deployment: Dieses Buch führt Sie kompetent durch alle Phasen der App-Entwicklung. Alle Codebeispiele finden Sie im zugehörigen Git-Hub-Repository.
AUS DEM INHALT //
• Schnelleinstieg: Ihre erste App mit .NET MAUI in einer Stunde
• Überblick über .NET for Android, .NET for iOS und .NET MAUI
• Architektur von Cross- Plattform-Apps
• XAML-Grundlagen
• Eingabeformulare anlegen
• Eingabevalidierung
• Eigene Steuerelemente entwickeln
• Navigation und die .NET MAUI Shell
• Listen/Bilder, Icons und Schriftarten
• Styles und Themes in .NET MAUI
• Lokalisierung
• Aufruf von Webservices
• Lokale Datenhaltung
• Geräte-APIs aufrufen, Barcodes scannen
• Deployment in die App Stores
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 773
Veröffentlichungsjahr: 2024
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
André Krämer
Cross-Plattform-Apps mit .NET MAUI entwickeln
Mit C# für Android, iOS, macOS und Windows programmieren
2., aktualisierte Auflage
Print-ISBN: 978-3-446-47981-4E-Book-ISBN: 978-3-446-48064-3E-Pub-ISBN: 978-3-446-48334-7
Alle in diesem Werk enthaltenen Informationen, Verfahren und Darstellungen wurden zum Zeitpunkt der Veröffentlichung nach bestem Wissen zusammengestellt. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grund sind die im vorliegenden Werk enthaltenen Informationen für Autor:innen, Herausgeber:innen und Verlag mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor:innen, Herausgeber:innen und Verlag übernehmen infolgedessen keine Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Weise aus der Benutzung dieser Informationen – oder Teilen davon – entsteht. Ebenso wenig übernehmen Autor:innen, Herausgeber:innen und Verlag die Gewähr dafür, dass die beschriebenen Verfahren usw. frei von Schutzrechten Dritter sind. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt also auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benützt werden dürften.
Die endgültige Entscheidung über die Eignung der Informationen für die vorgesehene Verwendung in einer bestimmten Anwendung liegt in der alleinigen Verantwortung des Nutzers.
Bibliografische Information der Deutschen Nationalbibliothek:Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet unter http://dnb.d-nb.de abrufbar.
Dieses Werk ist urheberrechtlich geschützt.Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Werkes, oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Einwilligung des Verlages in irgendeiner Form (Fotokopie, Mikrofilm oder einem anderen Verfahren), auch nicht für Zwecke der Unterrichtgestaltung – mit Ausnahme der in den §§ 53, 54 UrhG genannten Sonderfälle –, reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden.Wir behalten uns auch eine Nutzung des Werks für Zwecke des Text- und Data Mining nach § 44b UrhG ausdrücklich vor.
© 2025 Carl Hanser Verlag GmbH & Co. KG, Münchenwww.hanser-fachbuch.deLektorat: Sylvia HasselbachCopy editing: Walter Saumweber, RatingenHerstellung: le-tex publishing services GmbH, LeipzigSatz: Eberl & Koesel Studio, KemptenCoverkonzept: Marc Müller-Bremer, www.rebranding.de, MünchenCovergestaltung: Tom WestTitelmotiv: Tom West, unter Verwendung von Grafiken von© stock.adobe.com/macrovector und absent84
Titelei
Impressum
Inhalt
Vorwort
Der Autor
Hinweise zum Buch
1 Einführung
1.1 Cross-Plattform-Entwicklung mit .NET
1.2 Überblick über .NET MAUI
1.3 Architektur von .NET MAUI und .NET-MAUI-Apps
1.3.1 .NET MAUI unter Android
1.3.2 .NET MAUI unter iOS
1.3.3 .NET MAUI unter macOS
1.3.4 .NET MAUI unter Windows
1.4 Entwicklungswerkzeuge
1.4.1 Entwicklung unter Windows
1.4.2 Entwicklung unter macOS und Linux
1.5 Was Sie in diesem Kapitel gelernt haben
2 Schnelleinstieg: Ihre erste App mit .NET MAUI in einer Stunde
2.1 Das Konzept der App
2.1.1 Die besondere Stärke der App
2.1.2 Auswahl der App-Funktionen
2.1.3 Skizze der Benutzeroberfläche
2.2 Anlegen des Projekts
2.3 Umsetzen der Oberfläche
2.4 Implementieren des Quellcodes
2.5 Die fertige App
2.6 Was Sie in diesem Kapitel gelernt haben
3 Überblick über Android und .NET for Android
3.1 Das Betriebssystem Android
3.2 Architektur von .NET for Android
3.3 Software Development Kits
3.3.1 Android-API-Level
3.4 Eine einfache Android-App mit Visual Studio anlegen
3.4.1 Ordnerstruktur einer einfachen App
3.4.2 Standarddateien einer einfachen App
3.5 Apps testen und debuggen
3.5.1 Test im Emulator
3.5.2 Debugging auf einem echten Gerät
3.6 Was Sie in diesem Kapitel gelernt haben
4 Überblick über iOS und .NET for iOS sowie macOS und .NET for Mac
4.1 Das Betriebssystem iOS
4.1.1 Verbreitung und Versionen
4.1.2 Architektur von .NET for iOS
4.2 Das Betriebssystem macOS
4.2.1 Verbreitung und Versionen
4.2.2 Architektur von .NET for Mac
4.3 Software Development Kits und Systemvoraussetzungen
4.3.1 Xcode und das iOS SDK installieren
4.3.2 Mono, .NET for iOS und Visual Studio für Mac installieren
4.3.3 Integration in Visual Studio für Windows installieren
4.4 Eine Verbindung zum Mac herstellen
4.5 Eine einfache .NET-for-iOS-App mit Visual Studio anlegen
4.5.1 Ordner- und Dateistruktur einer einfachen App
4.6 Apps testen und debuggen
4.6.1 Tests im Simulator
4.6.2 Einschränkungen des Simulators
4.6.3 Debugging auf einem echten Gerät
4.7 Was Sie in diesem Kapitel gelernt haben
5 Überblick über Windows und WinUI 3
5.1 Das Betriebssystem Windows
5.1.1 Verbreitung und Versionen
5.2 WinUI 3 und das Windows App SDK
5.3 Software Development Kits und Systemvoraussetzungen
5.4 Eine einfache WinUI-3-App mit Visual Studio anlegen
5.4.1 Ordnerstruktur einer einfachen App
5.4.2 Standarddateien einer einfachen App
5.5 Apps testen und debuggen
5.6 Was Sie in diesem Kapitel gelernt haben
6 Überblick über .NET MAUI
6.1 Der .NET-MAUI-Ansatz
6.2 Vorteile von .NET MAUI für .NET-Entwickler
6.3 Funktionsumfang
6.3.1 Views, Layouts, Pages und Cells
6.3.2 GestureRecognizer
6.3.3 Navigation
6.3.4 App Lifecycle
6.4 Architektur von .NET MAUI
6.5 Eine einfache .NET-MAUI-App in Visual Studio anlegen
6.5.1 Projekt-, Ordner- und Dateistruktur einer .NET-MAUI-App
6.6 Grenzen von .NET MAUI
6.7 Was Sie in diesem Kapitel gelernt haben
7 XAML in .NET MAUI
7.1 Einführung in XAML
7.2 Grundlagen der XAML-Syntax in .NET MAUI
7.3 Markup Extensions
7.4 Grundlagen der Datenbindung
7.5 Was Sie in diesem Kapitel gelernt haben
8 Oberflächendesign mit Layoutcontainern
8.1 Das StackLayout
8.1.1 Das VerticalStackLayout und das HorizontalStackLayout
8.2 Das Grid
8.3 Das AbsoluteLayout
8.4 Das FlexLayout
8.5 ScrollView
8.6 Layoutcontainer in der Beispiel-App
8.6.1 Ermitteln der notwendigen Layoutcontainer
8.6.2 Umsetzung des Layouts
8.7 Was Sie in diesem Kapitel gelernt haben
9 Eingabeformulare anlegen
9.1 Grundlegende Steuerelemente
9.1.1 Übergreifende Konzepte zu Steuerelementen
9.1.2 Views zur Darstellung von Inhalten
9.1.3 Shapes
9.1.4 Texteingaben mit Entry und Editor
9.1.5 Button
9.1.6 Steuerelemente zur Auswahl
9.2 Steuerelemente in der Beispiel-App
9.2.1 Die Startseite
9.2.2 Neue Einträge hinzufügen
9.2.3 Ein Wort zur Strukturierung der App
9.3 Was Sie in diesem Kapitel gelernt haben
10 Das Model-View-ViewModel (MVVM)-Muster
10.1 Grundlagen des MVVM-Musters
10.2 Datenbindung
10.3 Implementierung des MVVM-Musters
10.3.1 Grundlegende Implementierung
10.3.2 Interaktivität durch Command-Binding
10.3.3 Refactoring des ViewModels zur Erhöhung der Lesbarkeit
10.4 Einsatz eines MVVM-Frameworks
10.4.1 Überblick über das MVVM Toolkit
10.4.2 Einsatz des MVVM Toolkit
10.5 Unit-Testing eines ViewModels
10.6 MVVM in der Beispielanwendung
10.6.1 Das Model
10.6.2 Das ViewModel
10.6.3 Die View
10.7 Was Sie in diesem Kapitel gelernt haben
11 Architektur von Cross-Plattform-Apps
11.1 Plattformübergreifende Wiederverwendung
11.2 Präprozessoranweisungen
11.2.1 Vorteile von Präprozessoranweisungen
11.2.2 Nachteile von Präprozessoranweisungen
11.2.3 Fazit zu Präprozessoranweisungen
11.3 Partielle Klassen
11.3.1 Vorteile von partiellen Klassen
11.3.2 Nachteile von partiellen Klassen
11.3.3 Fazit zu partiellen Klassen
11.4 Einsatz von Schnittstellen und Dependency Injection
11.4.1 Der .NET-MAUI-DependencyService
11.4.2 Dependency Injection mit dem Inversion-of-Control-Container Microsoft.Extensions.DependencyInjection
11.5 Dependency Injection in der Beispiel-App
11.6 Was Sie in diesem Kapitel gelernt haben
12 Eingabevalidierung
12.1 Validierung über Data Annotations
12.2 Eine Basisklasse für die Validierung von ViewModel-Klassen
12.3 Validierungsergebnisse in der Benutzeroberfläche anzeigen
12.4 Validierung in der Beispielanwendung
12.4.1 Validierung des ViewModels
12.4.2 Darstellung der Validierungsergebnisse in der Benutzeroberfläche
12.5 Was Sie in diesem Kapitel gelernt haben
13 Steuerelemente erstellen und anpassen
13.1 Zusammengesetzte Steuerelemente
13.2 Control Templates
13.3 Plattformspezifische Anpassungen bestehender Steuerelemente
13.3.1 Steuerelementarchitektur unter .NET MAUI
13.3.2 Steuerelemente zur Laufzeit anpassen
13.4 Gezeichnete Steuerelemente
13.5 Bestehende Steuerelemente durch eigene Implementierungen global austauschen
13.6 Steuerelemente in der Beispielanwendung
13.7 Was Sie in diesem Kapitel gelernt haben
14 Navigation und die Shell
14.1 Navigation in mobilen Apps
14.1.1 Registerkarten
14.1.2 Hierarchische Navigation
14.1.3 Seitenleiste
14.2 Die Shell
14.2.1 Überblick über die Shell
14.2.2 Eine Navigationsstruktur mit der Shell definieren
14.2.3 Kopf- und Fußzeile der Shell definieren
14.2.4 Routenbasierte Navigation
14.3 Dependency Injection und die Shell
14.4 Navigation in der Beispiel-App
14.4.1 Die Shell anlegen
14.4.2 Das Navigationsframework der Shell abstrahieren
14.4.3 Routenbasierte Navigation
14.5 Was Sie in diesem Kapitel gelernt haben
15 Listen
15.1 Listen unter .NET MAUI
15.2 Die CollectionView
15.2.1 Einträge selektieren
15.2.2 Kontextmenüs
15.2.3 Daten aktualisieren
15.2.4 Gruppierte Einträge
15.2.5 Ausgabe von Hinweistexten bei leeren Listen
15.3 Bindable Layouts
15.4 Listen in der Beispiel-App
15.4.1 Darstellung von Lagerorten auf der Startseite der App
15.4.2 Die Liste der Vorräte
15.4.3 Die Detailseite
15.4.4 Umgang mit leeren Listen
15.5 Was Sie in diesem Kapitel gelernt haben
16 Lokalisierung
16.1 Lokalisierung über XML-Ressourcendateien
16.1.1 XML-Ressourcendateien anlegen
16.1.2 Vorbereitende Arbeiten im Projekt
16.1.3 Lokalisierung der Oberfläche
16.1.4 DatePicker und TimePicker unter Windows lokalisieren
16.2 Lokalisierung in der Beispiel-App
16.2.1 Vorbereitende Arbeiten
16.2.2 Lokalisierung der Startseite
16.2.3 Lokalisierung der Listenansicht
16.2.4 Lokalisierung der Detailansicht
16.2.5 Lokalisierung der Einstellungen
16.2.6 Lokalisierung des Navigationsmenüs
16.3 Was Sie in diesem Kapitel gelernt haben
17 Bilder, Schriftarten, Icons und Splash Screens
17.1 Bilder darstellen
17.1.1 Bilder unter .NET MAUI mit MauiImage
17.1.2 Eingebettete Bilder
17.2 Schriftarten
17.3 Icon-Schriftarten verwenden
17.4 Splash Screens
17.5 App Icons
17.6 Bilder und Schriftarten in der Beispiel-App
17.6.1 Startseite und Menü
17.6.2 Listen- und Detailseite
17.6.3 App Icon und Splash Screen
17.7 Was Sie in diesem Kapitel gelernt haben
18 Styles und Themes
18.1 Styles
18.1.1 Implizite und explizite Stildefinitionen
18.1.2 Mehrere Formatvorlagen mit Style-Classes anwenden
18.2 Styling mit Cascading Style Sheets (CSS)
18.3 Themes
18.3.1 Hell- und Dunkelmodus des Betriebssystems unterstützen
18.4 Styles und Dunkelmodus in der Beispiel-App
18.5 Was Sie in diesem Kapitel gelernt haben
19 Aufruf von Webservices
19.1 Webservices mit dem „HttpClient“ aufrufen
19.1.1 Daten mit GET lesen
19.1.2 Daten mit POST anlegen
19.1.3 Daten mit PUT ändern
19.1.4 Daten mit DELETE löschen
19.1.5 Umgang mit dem Offline-Fall
19.2 Webservices in der Beispiel-App
19.2.1 Abruf von Produktdaten
19.2.2 Anpassung des ViewModels
19.2.3 Anpassung der View
19.3 Was Sie in diesem Kapitel gelernt haben
20 Lokale Datenhaltung
20.1 Zugriff auf das lokale Dateisystem
20.1.1 Die Android-Verzeichnisstruktur
20.1.2 Die iOS-Verzeichnisstruktur
20.1.3 Die macOS-Verzeichnisstruktur
20.1.4 Die Windows-Verzeichnisstruktur
20.1.5 Dateizugriff über die Klassen File und Directory aus dem Namensraum System.IO
20.2 Lokale Datenhaltung mit einer SQLite-Datenbank
20.3 Lokale Datenhaltung in der Beispiel-App
20.3.1 Zugriff auf das Dateisystem
20.3.2 Einsatz einer lokalen Datenbank
20.4 Was Sie in diesem Kapitel gelernt haben
21 Zugriff auf native Gerätefunktionen
21.1 Überblick über native Gerätefunktionen
21.2 Gerätefunktionen im eigenen Projekt nutzen
21.2.1 Eine Gerätefunktion ohne spezielle Berechtigungen nutzen
21.2.2 Eine Gerätefunktion mit speziellen Berechtigungen nutzen
21.2.3 Scannen von Barcodes
21.3 Zugriff auf Gerätefunktionen in der Beispiel-App
21.3.1 Benutzereinstellungen mit der Klasse Preferences speichern
21.3.2 Produktbilder mit der Kamera aufnehmen
21.3.3 Produktsuche per Barcode-Scan
21.4 Was Sie in diesem Kapitel gelernt haben
22 Veröffentlichung der fertigen App
22.1 Vorbereitende Arbeiten
22.2 Veröffentlichung unter Android
22.2.1 Überblick über die Veröffentlichung im Google Play Store
22.2.2 Anlage und Konfiguration einer App im Google Play Store
22.2.3 Erstellen einer AAB-Datei und Upload in den Play Store
22.2.4 Manueller Upload der AAB-Datei in die Google-Play-Entwicklerkonsole
22.2.5 Automatischer Upload neuer AAB-Versionen über Visual Studio oder eine Build/Release-Pipeline wie Azure Pipelines oder Github Actions
22.3 Veröffentlichung unter iOS
22.3.1 Überblick über die Veröffentlichung im Apple App Store
22.3.2 Erstellung eines iOS Distribution Certificate
22.3.3 Anlegen einer App ID im Apple Developer Portal
22.3.4 Anlegen eines App Store Connect Provisioning Profiles
22.3.5 Anlage und Konfiguration einer App in App Store Connect
22.3.6 Paketierung der App und Upload zu App Store Connect
22.4 Veröffentlichung unter Windows
22.5 Was Sie in diesem Kapitel gelernt haben
23 Migration von Xamarin.Forms zu .NET MAUI
23.1 Herausforderungen bei der Migration
23.2 Die acht Schritte der Migration
23.2.1 Vorbereitung der Migration
23.2.2 NuGet-Paket-Kompatibilität
23.2.3 Einrichtung der Entwicklungsumgebung für .NET MAUI
23.2.4 Konvertierung der Projekte
23.2.5 Codeanpassungen
23.2.6 Testen
23.2.7 Feintuning und Optimierung
23.2.8 Finalisierung und Deployment
23.3 Manuelle Migration einer Beispiel-App
23.4 Automatische Migration
23.5 Hürden bei der Migration
23.6 Was Sie in diesem Kapitel gelernt haben
24 Nachwort
24.1 Das Training zum Buch
24.2 Professionelle Projektunterstützung im .NET-MAUI-Umfeld
Im Frühjahr 2013 hörte ich auf der Fahrt zu einem Kunden die Tablet Show, einen früheren Podcast von Carl Franklin und Richard Campbell zum Thema Mobile Development. Mein Hauptinteresse galt damals, wie bei so vielen .NET Entwicklern, der Entwicklung von Windows-8-Apps. Gemeinsam mit einem Bekannten hatte ich wenige Monate zuvor eine App für Windows 8 veröffentlicht, die zu dieser Zeit gerade die Schallmauer von 1.000.000 Downloads durchbrach.
In früheren Episoden der Tablet Show hatte ich bereits einige nützliche Tipps erhalten, die uns bei der Optimierung unserer App halfen, und so war ich sehr neugierig, was diese Folge Neues bringen würde.
In dieser Folge berichtete Miguel de Icaza, einer der beiden Gründer der Firma Xamarin, dass es eine kostenfreie, eingeschränkte Einsteigerversion von Xamarin geben wird sowie eine günstige Variante für einzelne Entwickler. Außerdem kündigte er an, dass die Entwicklung von Xamarin-Apps von nun an auch in Visual Studio möglich war.
Ab diesem Zeitpunkt war ich von Xamarin fasziniert. Die Tatsache, dass ich mit meinen C#-, .NET- und Visual-Studio-Kenntnissen dank Xamarin in der Lage war, Apps für Android und iOS zu schreiben, ohne Java oder Objective-C lernen zu müssen, begeisterte mich, und diese Begeisterung hält bis heute an.
Kurz nachdem ich den Podcast gehört hatte, installierte ich die Xamarin-Werkzeuge auf meinem Rechner und legte mit den ersten Experimenten los. Da ich keinen Mac hatte, konnte ich am Anfang nur für Android programmieren. Da mir das nicht genug war, kaufte ich mir einige Monate später einen günstigen Mac und ein günstiges iPhone, um auch für iOS entwickeln zu können.
Ab diesem Zeitpunkt wuchs mein Wunsch, mein Wissen über diese großartige Technologie zu teilen. Ich startete damit, Schulungen und Workshops zum Thema Xamarin zu halten, Fachartikel darüber zu schreiben, auf Konferenzen und User Group Meetings darüber zu sprechen und Videokurse für LinkedIn Learning aufzuzeichnen und Kunden bei der Umsetzung Ihrer Projekte zu unterstützen. Schlussendlich schrieb ich das Buch Cross-Plattform-Apps mit Xamarin.Forms entwickeln, den Vorgänger zu diesem Buch.
Mein Enthusiasmus für das Thema Cross-Plattform-Entwicklung mit .NET ist seit 2013 ungebrochen. Noch immer freue ich mich darüber, wenn ich Entwicklern etwas zu dem Thema beibringen und mein Wissen somit weitergeben kann. Als .NET MAUI als Nachfolger von Xamarin angekündigt wurde, war mir sofort klar, dass ich auch zu .NET MAUI ein Buch schreiben möchte. Dieses Buch erschien ein gutes halbes Jahr nach der Veröffentlichung von .NET MAUI im Dezember 2022.
Vor sich haben Sie nun die knapp zwei Jahre später erschienene aktualisierte zweite Auflage.
In dieser überarbeiteten Ausgabe habe ich nicht nur die neuesten Entwicklungen und Funktionen von .NET MAUI integriert, sondern auch wertvolles Feedback von Lesern und Teilnehmern meiner Workshops berücksichtigt. Meine Motivation bleibt, anderen Entwicklern die Werkzeuge und das Wissen an die Hand zu geben, um erfolgreich plattformübergreifende Anwendungen zu erstellen. Die Technologie entwickelt sich ständig weiter, und mit ihr auch die Möglichkeiten und Herausforderungen, die sie mit sich bringt. In dieser neuen Ausgabe finden Sie ein komplett neues, durchgängiges Beispielprojekt, neue und erweiterte Kapitel sowie tiefere Einblicke in fortgeschrittene Techniken und Best Practices.
Mein Ziel ist es, Ihnen nicht nur die Grundlagen zu vermitteln, sondern Sie auch dazu zu inspirieren, eigene innovative Lösungen zu entwickeln und die Möglichkeiten von .NET MAUI voll auszuschöpfen. Ich hoffe, dass Sie beim Lesen und Anwenden der Inhalte genauso viel Freude und Erfolg haben, wie ich beim Schreiben dieses Buches.
Mit dieser zweiten Auflage möchte ich Ihnen noch umfassendere und praxisnähere Einblicke bieten und Sie dabei unterstützen, Ihre Fähigkeiten in der Cross-Plattform-Entwicklung auf das nächste Level zu heben. Lassen Sie uns gemeinsam in die faszinierende Welt der plattformübergreifenden App-Entwicklung mit .NET MAUI eintauchen!
Dies ist mittlerweile mein drittes Buch und wie bei den beiden vorherigen war auch der Weg zu diesem Buch etwas „holprig“. Vermutlich wäre es nie erschienen, wenn es nicht zahlreiche Menschen gegeben hätte, die mir geholfen haben und denen ich meinen Dank aussprechen möchte.
Mein größter Dank gilt meiner Frau Ana, die mich während der ganzen Zeit unterstützt, ermutigt und an mich geglaubt hat. Während der letzten Jahre musste sie nicht nur wegen der Arbeit an diesem Buch und dem Vorgängerbuch, sondern auch wegen meiner anderen beruflichen Verpflichtungen häufig auf meine Gesellschaft verzichten. Dies gilt insbesondere für die letzten Tage, denn seit über einer Woche befinden wir uns eigentlich im Sommerurlaub am Meer. Statt Zeit mit ihr zu verbringen und gemeinsam mit ihr die Umgebung zu genießen, sitze ich an meinem Laptop, um das Manuskript fertigzustellen. Sie war dabei stets verständnisvoll und spornte mich an, wenn meine Motivation sank. Dass eine Frau ihrem Mann so viele Freiräume für seine persönlichen Projekte einräumt, ist nicht selbstverständlich und ich bin froh, eine so wundervolle Partnerin gefunden zu haben. Aus diesem Grund habe ich mich auch dazu entschieden, den Namen meiner Frau im Vorwort fett gedruckt hervorzuheben. Das ist das Mindeste, was ich als Dankeschön für ihr Verständnis machen kann, auch wenn sie eigentlich ein komplettes Kapitel verdient hätte.
Bedanken möchte ich mich auch bei unseren Kindern Joel, Lyandra und Raúl. Ihr wart stets geduldig und verständnisvoll, wenn ich keine Zeit für euch hatte, da ich an diesem Buch oder dem Vorgänger arbeitete.
Mein Dank gilt außerdem meiner Mutter Sylvia, die mir im Grundschulalter einen Atari 800XL zusammen mit dem Buch „Spielend Programmieren lernen“ kaufte und damit die Grundlage für eine erfolgreiche IT-Berufslaufbahn geschaffen hat.
Ein besonderer Dank gilt auch dem Team des Carl Hanser Verlags, allen Voran meiner Lektorin Sylvia Hasselbach. Weiter möchte ich mich bei Walter Saumweber bedanken, der die zweite Auflage dieses Buches und das Vorgängerbuch zu Xamarin.Forms Korrektur las und mir in geduldigen Telefonaten freundlich und gut gelaunt wertvolle Tipps zu meinen Texten gab. Darüber hinaus möchte ich mich auch bei Kristin Rothe und Irene Weilhart vom Carl Hanser Verlag für die gute Zusammenarbeit bedanken sowie bei Sandra Gottmann, die die erste Auflage des Buches korrekturgelesen hat.
Mein Dank gilt weiterhin dem .NET-MAUI-Team für das herausragende Produkt sowie den vielen Freiwilligen in der Entwickler-Community, die auf der ganzen Welt ihr Wissen in der Form von Blog-Beiträgen und Vorträgen teilen, oder ihre Freizeit in Open-Source-Projekte stecken.
Bedanken möchte ich mich außerdem bei den Lesern des Xamarin.Forms-Buches und der ersten Auflage dieses Buches, sowie den zahlreichen Teilnehmern meiner Vorträge, Workshops und Schulungen zum Thema .NET MAUI. Viel Feedback, gute Diskussionen und die guten Verkaufszahlen haben mich in meinem Glauben bestärkt, dass ein Buch zum Thema Cross-Plattform-Entwicklung mit .NET wichtig ist.
Schlussendlich gilt mein Dank natürlich auch Ihnen! Vielen Dank, dass Sie sich für dieses Buch entschieden haben.
André Krämer
Juli 2024
André Krämer startete seine berufliche Laufbahn 1997 mit einer Ausbildung zum Fachinformatiker für Anwendungsentwicklung, nachdem er zuvor auf der höheren Berufsfachschule für Datenverarbeitung den Abschluss als staatlich geprüfter kaufmännischer Assistent für Datenverarbeitung machte.
Nach seiner Ausbildung bei einem großen IT-Systemhaus arbeitete er zunächst als Entwickler und später als technischer Teamleiter in seinem Ausbildungsbetrieb. Bereits damals fokussierte er sich auf Microsoft-Technologien.
2002 wechselte er zu einem international tätigen Softwarehaus für Software im industriellen Qualitätsmanagement und sammelte dort umfangreiche Erfahrungen mit Microsoft .NET ab der Version 1.0. Während dieser Zeit studierte er nebenberuflich an der FH Köln Wirtschaftsinformatik und erlangte seinen Abschluss als Diplom-Informatiker (FH).
2008 bis 2011 arbeitete er für ein internationales Beratungsunternehmen als Senior Application Architect und absolvierte währenddessen ein nebenberufliches Studium zum Master of Science Wirtschaftsinformatik an der TH Kön.
2012 machte er sich selbständig, wurde Partner im www.IT-Visions.de -Expertennetzwerk, und arbeitete bis Sommer 2018 als Trainer und Berater. Während dieser Zeit führte er überwiegend Individualschulungen für Softwareentwickler durch und schulte vor allem die Themen App-Entwicklung mit Xamarin, Web-Entwicklung mit ASP.NET und DevOps mit Azure DevOps. Im Rahmen seiner Tätigkeit veröffentlichte er über 20 Videokurse für LinkedIn Learning, schrieb zahlreiche Fachartikel und sprach regelmäßig auf Entwicklerkonferenzen.
2013 erhielt er für sein Fachwissen und Community-Engagement von Microsoft die Auszeichnung zum Microsoft Most Valuable Professional (MVP), und wurde seitdem jedes Jahr erneut mit dem Titel ausgezeichnet.
2018 wagte er den nächsten Schritt und gründete die Quality Bytes GmbH, ein Softwarehaus in Bad Breisig am Rhein zwischen Bonn und Koblenz, und übernahm dort die Geschäftsführung. Mit seinem mittlerweile über 15-köpfigen Team schreibt er dort Individualsoftware auf Projektbasis für seine Kunden.
Der Fokus der Quality Bytes GmbH liegt auf der Entwicklung von Mobile Apps für Android, iOS, macOS und Windows mit .NET MAUI, der Entwicklung von Webportalen für die Microsoft Azure Cloud oder das Selbsthosting auf der Basis von Angular und ASP.NET Core, der Implementierung von SAP-Integrationslösungen sowie der Entwicklung von Lösungen zur Generierung elektronischer Dokumente mit TX Text Control.
Wenn Sie Projektunterstützung in einem der genannten Bereiche benötigen, dann freuen sich André Krämer und sein Team über Ihre Nachricht unter [email protected] oder den Besuch des Internetauftritts der Quality Bytes GmbH, den Sie unter https://qualitybytes.de finden.
Sein aktuelles Interesse im Bereich der Softwareentwicklung gilt neben .NET MAUI, TX Tex Control, ASP.NET und Azure DevOps den agilen Entwicklungsmethoden.
Dieses Buch besteht aus 24 Kapiteln, die Sie Schritt für Schritt auf Ihrem Weg zum App-Entwickler begleiten. Hier eine kurze Beschreibung des Inhalts der einzelnen Kapitel:
Kapitel 1, Einführung
Im ersten Kapitel erhalten Sie grundlegende Informationen über .NET MAUI und das zugrunde liegende Ökosystem.
Kapitel 2, Schnelleinstieg: Ihre erste App mit .NET MAUI in einer Stunde
Das zweite Kapitel führt Sie Schritt für Schritt von der Idee über die Planung zur ersten App und das alles in einer Stunde. Das Ziel dieses Kapitels ist es, Ihnen Appetit auf mehr zu machen und zu zeigen, wie leistungsfähig .NET MAUI ist.
Kapitel 3, Überblick über Android und .NET for Android
Obwohl .NET MAUI die zugrunde liegenden Betriebssysteme und Programmierframeworks weitestgehend abstrahiert, schadet ein grundlegendes Verständnis der Zielplattformen nicht. In diesem Kapitel sehen wir uns daher Grundlegendes zu Android und .NET for Android an. Außerdem werfen wir einen Blick darauf, wie Sie Ihr System für die Entwicklung mit Android konfigurieren müssen.
Kapitel 4, Überblick über iOS, macOS, .NET for iOS und .NET for Mac
Dieses Kapitel ist das Gegenstück zu Kapitel 3, nur dass es dieses Mal um iOS und macOS geht und nicht um Android.
Kapitel 5, Überblick über Windows
Dieses Kapitel gibt Hinweise zu Windows, dem letzten der in diesem Buch behandelten Betriebssysteme.
Kapitel 6, Überblick über .NET MAUI
Nachdem in den Kapiteln 3, 4 und 5 die spezifischen Plattformen behandelt wurden, geht es in Kapitel 6 um die Grundlagen zu .NET MAUI. Wir beleuchten in diesem Kapitel die .NET-MAUI-Architektur und sehen uns den Aufbau von .NET-MAUI-Projekten an.
Kapitel 7, XAML-Grundlagen
Benutzeroberflächen werden unter .NET MAUI in der Regel mit dem XML-Dialekt XAML geschrieben. Dieses Kapitel vermittelt Ihnen die notwendigen Grundlagen, um effektiv mit XAML arbeiten zu können.
Kapitel 8, Oberflächendesign mit Layoutcontainern
Im achten Kapitel dreht sich alles darum, wie Sie Oberflächenelemente auf dem Bildschirm mit Layoutcontainern wie dem StackLayout oder dem Grid positionieren können.
Kapitel 9, Eingabeformulare anlegen
In Kapitel 8 haben Sie gelernt, wie Sie Steuerelemente auf dem Bildschirm positionieren können, in Kapitel 9 lernen Sie, welche Steuerelemente dies überhaupt sind. Wir werfen in diesem Kapitel einen Blick auf die gängigen Steuerelemente und ihre Einsatzmöglichkeiten.
Kapitel 10, Das Model-View-ViewModel (MVVM)-Muster
In diesem Kapitel lernen Sie das Model-View-ViewModel (MVVM)-Muster kennen, ein zentrales Entwurfsmuster für die Trennung von Logik und Darstellung in Ihrer .NET-MAUI-Anwendung. Sie erfahren, wie Sie das MVVM-Muster implementieren, um eine saubere und wartbare Codebasis zu schaffen und Ihre Anwendungen effizienter zu gestalten.
Kapitel 11, Architektur von Cross-Plattform-Apps
In diesem Kapitel sehen wir uns verschiedene Strategien zum Teilen von Quellcode zwischen den verschiedenen Plattformen an. Unter anderem erfahren Sie, wie Sie durch den Einsatz von Microsoft.Extentions.DependencyInjection plattformübergreifenden und plattformspezifischen Quellcode separieren können.
Kapitel 12, Eingabevalidierung
In diesem Kapitel erfahren Sie, wie Sie mithilfe von Data Annotations Eingaben in Ihrer .NET-MAUI-Anwendung validieren. Sie lernen, wie Sie Validierungsattribute anwenden und die Ergebnisse der Validierung benutzerfreundlich darstellen, um sicherzustellen, dass nur korrekte und gültige Daten verarbeitet werden.
Kapitel 13, Eigene Steuerelemente erstellen
In diesem Kapitel erfahren Sie, wie Sie benutzerdefinierte Steuerelemente erstellen, um spezifische Anforderungen Ihrer Anwendung zu erfüllen. Sie lernen, wie Sie bestehende Steuerelemente erweitern oder völlig neue Steuerelemente von Grund auf entwickeln können, um die Funktionalität Ihrer App zu erweitern.
Kapitel 14, Navigation und die Shell
Der Zweck der Shell ist es, eine einheitliche, routenbasierte Navigationsstruktur in Apps zu ermöglichen. In Kapitel 14 werfen wir einen Blick auf die Shell und sehen uns gemeinsam an, wie Sie mit der Shell eine seitliche Navigationsleiste, auch Burger-Menü genannt, oder eine Navigation über Tabs realisieren können.
Kapitel 15, Listen
Viele mobile Anwendungen bestehen zu großen Teilen aus Listen. Daher ist es nicht verwunderlich, dass Listen ein eigenes Kapitel erhalten und nicht nur ein kleiner Teil von Kapitel 9 sind. In Kapitel 15 sehen wir uns die Klasse CollectionView näher an, die die Klasse ListView zur Darstellung von Listen abgelöst hat.
Kapitel 16, Lokalisierung
In diesem Kapitel lernen Sie, wie Sie Ihre .NET-MAUI-Anwendung für verschiedene Sprachen anpassen können. Sie erfahren, wie Sie Ressourcen für die Lokalisierung erstellen und verwalten, um eine mehrsprachige Benutzeroberfläche zu bieten und somit eine breitere Zielgruppe zu erreichen.
Kapitel 17, Bilder, Icons, Splash Screens und Schriftarten
Nutzer von mobilen Apps haben viel höhere Erwartungen an schöne Benutzeroberflächen als zum Beispiel Anwender klassischer Desktopsoftware. Bilder, Icons, Splash Screens und Schriftarten sind vier Elemente, mit denen Sie diese Erwartungen erfüllen können. Ihren praktischen Einsatz sehen wir uns in Kapitel 17 an.
Kapitel 18, Styles und Themes
Styles werden in .NET MAUI genutzt, um Steuerelementen ein einheitliches Erscheinungsbild zu geben. Dieses Kapitel gibt Ihnen einen Einblick in die Nutzung von Styles.
Kapitel 19, Aufruf von Webservices
Daten von entfernten Webservices spielen für viele Apps eine große Rolle. In diesem Kapitel beschäftigen wir uns daher damit, wie wir Daten von Webservices abrufen, sie effizient zwischenspeichern und Daten an Webservices für schreibende Zugriffe übergeben.
Kapitel 20, Lokale Datenhaltung
Neben externen Daten sind selbstverständlich auch interne Daten wichtig. In Kapitel 20 sehen wir uns detailliert an, wie Sie Daten lokal im Dateisystem oder in einer lokalen SQLite-Datenbank speichern können.
Kapitel 21, Zugriff auf native Gerätefunktionen
In den Kapiteln 1 bis 20 haben wir uns überwiegend mit den plattformübergreifenden Aspekten der App-Entwicklung beschäftigt. Das Besondere einer App ist allerdings nicht nur, dass man sie überall hin mitnehmen kann, sondern dass die App Sensoren und Funktionen des Mobilgeräts oder des mobilen Betriebssystems nutzen kann. In diesem Kapitel werfen wir einen Blick auf den plattformübergreifenden Zugriff auf Gerätefunktionen mit .NET MAUI. Unter anderem sehen wir uns an, wie wir Fotos machen oder Barcodes scannen können.
Kapitel 22, Veröffentlichung von Apps
Nach der Entwicklung und dem Testen ist die Veröffentlichung Ihrer App ein wichtiger Schritt im Lebenszyklus Ihrer App. In Kapitel 22 erfahren Sie, wie Sie Ihre .NET-MAUI-Anwendung für die Veröffentlichung vorbereiten und in den App Stores von Google und Apple veröffentlichen.
Kapitel 23, Migration von Xamarin.Forms nach .NET MAUI
Der Support für den .NET-MAUI-Vorgänger Xamarin.Forms endete am 1. Mai 2024. Falls Sie noch eine Xamarin.Forms-App in Ihrem Portfolio haben, dann zeigt Ihnen dieses Kapitel die notwendigen Schritte, um die App nach .NET MAUI zu migrieren.
Kapitel 24, Nachwort
Das Buch endet mit einem Blick zurück und einem Blick in die Zukunft. In Kapitel 24 finden Sie das Nachwort, in dem wir die wichtigsten Punkte zusammenfassen und einen Ausblick auf kommende Entwicklungen in der Cross-Plattform-Entwicklung mit .NET MAUI geben.
Dieses Buch ist für Softwareentwickler gedacht, die plattformübergreifende Apps mit .NET MAUI für Android, iOS, macOS und Windows schreiben möchten. Die primäre Zielgruppe sind Einsteiger und Fortgeschrittene, aber auch für Experten ist das ein oder andere Kapitel dabei.
Für die Lektüre dieses Buches sollten Sie bereits Erfahrung mit C#, Visual Studio und .NET haben. Sie müssen kein Experte sein, aber ohne Vorwissen im Bereich der .NET-Entwicklung werden Sie wenig Freude an diesem Buch haben. Sollten Sie in diesem Umfeld noch keine Erfahrung haben, dann empfehle ich Ihnen, sich zunächst C#- und .NET-Basiswissen über Fachbücher oder eines der vielen Tutorials aus dem Internet anzueignen. Anschließend können Sie mit diesem Buch loslegen. Erfahrung mit dem .NET-MAUI-Vorgänger Xamarin.Forms ist hilfreich, aber nicht erforderlich.
Der Inhalt des Buches ist so aufgebaut, dass Sie Schritt für Schritt das notwendige Wissen erlangen, um Apps mit .NET MAUI zu entwickeln. Daher empfehle ich Ihnen, das Buch von vorne nach hinten zu lesen. Jedes Kapitel startet mit einem kurzen Überblick und endet mit einer Zusammenfassung, anhand deren Sie kontrollieren können, ob Sie die Kernaussagen des Kapitels nachvollziehen konnten.
Wenn Sie bereits Erfahrung mit .NET MAUI haben, dann spricht natürlich nichts dagegen, einzelne Kapitel zu überspringen oder sich themenbezogen auf einzelne Kapitel zu konzentrieren.
An dieser Stelle möchte ich Sie jedoch darauf hinweisen, dass die Kapitel und vor allem der Quellcode der durchgehenden Beispiel-App jeweils auf den Inhalten vorheriger Kapitel aufbauen. Wenn Ihnen beim Sprung in ein Kapitel auffällt, dass Ihnen Grundlagen fehlen, dann empfehle ich Ihnen einen Blick in die vorherigen Kapitel.
Abschließend ist es mir noch wichtig anzumerken, dass dieses Buch kein Ersatz für die offizielle .NET-MAUI-Online-Dokumentation (https://learn.microsoft.com/de-de/dotnet/maui/) ist. Dafür ist diese schlichtweg zu umfangreich. Dieses Buch legt den Fokus auf den praktischen Einsatz von .NET MAUI und kann dementsprechend nicht jede verfügbare Funktion beschreiben.
Zu fast jedem Kapitel gibt es Codebeispiele. Diese können Sie unter
https://github.com/andrekraemer/maui-buch-2024
entweder vollständig als ZIP-Datei herunterladen oder über einen beliebigen Git-Client klonen.
Je Kapitel gibt es einen Ordner mit dem Namen Kap<Nr>, also zum Beispiel Kap02 für das Kapitel 2 oder Kap15 für das Kapitel 15. Außerdem gibt es auf oberster Ebene noch den Ordner Beispieldateien. In diesem Ordner finden Sie Bilddateien, Schriftarten und Daten, die Sie zur Bearbeitung der durchgängigen Beispielanwendung benötigen.
Dieses Buch verfolgt zwei Strategien für die Codebeispiele. In jedem Kapitel-Ordner gibt es Unterordner, die auf dem Wort Demo enden. In diesen Unterordnern finden Sie die Beispielcodes zu den Listings der entsprechenden Kapitel.
Ab Kapitel 8 gibt es außerdem in den meisten Kapitel-Ordnern den Unterordner DontLetMeExpire. Dabei handelt es sich um den Quellcode der Beispiel-App, die wir Schritt für Schritt in diesem Buch entwickeln werden. Der Quellcode der Beispiel-App in den jeweiligen Kapitelordnern entspricht dem Fortschritt zum Ende des Kapitels.
Inhalt der Beispiel-App ist die Verwaltung Ihrer Lebensmittelvorräte mit dem Ziel Lebensmittelverschwendung zu reduzieren.
Bild 0.1 zeigt das Menü und die Startseite der fertigen Beispiel-App in verschiedenen Zuständen, Bild 0.2 zeigt die Detailseite der App, auf der Vorräte hinzugefügt und Fotos aufgenommen werden können, unter Android, iOS und Windows. Auf die Darstellung der macOS-Version habe ich verzichtet.
Den vollständigen Quellcode der App werden wir Schritt für Schritt gemeinsam in den einzelnen Kapiteln schreiben. Es wird nichts ausgelassen oder übersprungen, sodass Sie in der Lage sind, mit zu programmieren. Die Musterlösung der einzelnen Kapitel finden Sie, wie bereits gesagt, im Ordner DontLetMeExpire der einzelnen Unterkapitel.
Wenn Sie das Beispiel nicht durchgängig entwickeln, sondern mittendrin einsteigen möchten, dann ist dies natürlich kein Problem. Kopieren Sie einfach meine Musterlösung vom vorherigen Kapitel und legen Sie los.
Bild 1Das Menü und die Startseite der App
Bild 2Die Eingabeseite der App inklusive der Aufnahme von Fotos
Kein Buch ist fehlerfrei. Zumindest liest man dies in allen Fachbüchern, die man am Markt erhält. Wenn also bereits alle Autoren vor mir eingeräumt haben, dass ihr Buch Fehler hat, dann sollte ich wohl davon ausgehen, dass sich auch in meinem Buch trotz sehr gründlicher Prüfung Fehler eingeschlichen haben. Zumindest galt dies auch für die Vorauflage sowie für mein erstes Buch zu Xamarin.Forms.
Korrekturen zu fachlichen Fehlern im Text sowie Rechtschreibkorrekturen finden Sie auf der Webseite zu diesem Buch, die Sie unter
https://andrekraemer.de/maui-buch
erreichen.
Eventuelle Fehler in den Codebeispielen werde ich kontinuierlich auf dem GitHub-Repository zu diesem Buch unter
https://github.com/andrekraemer/maui-buch-2024
korrigieren. Wenn Sie in den Beispielen einen Fehler finden sollten, der noch nicht korrigiert ist, dann zögern Sie nicht, einen Issue über das GitHub-Repository anzulegen. Wenn Sie einen Fehler im Text finden, dann senden Sie mir gerne eine E-Mail.
Dieses Buch lebt, wie alle Bücher, von Rückmeldungen und Kritiken der Leser. Die positiven Rezensionen und E-Mails zum Xamarin.Forms-Vorgängerbuch und zur ersten Auflage des .NET-MAUI-Buches haben mich zum Beispiel sehr dazu motiviert, dieses Buch zu schreiben. Die negativen Kritiken haben mir gezeigt, wo ich Dinge besser erklären muss, damit jeder Leser den bestmöglichen Lernerfolg mit diesem Buch hat. Ich lade Sie also herzlich ein, Rezensionen über das Buch, positiv wie negativ (am liebsten natürlich positiv) auf den gängigen Internetplattformen zu hinterlassen. Ich freue mich schon auf Ihre Rückmeldung!
Scheuen Sie sich auch nicht, mich bei Fragen oder Anmerkungen zum Buch direkt per E-Mail unter [email protected] oder auf LinkedIn unter https://de.linkedin.com/in/andrekraemer anzuschreiben oder mich auf einer Konferenz anzusprechen, falls wir uns dort treffen sollten. Bitte haben Sie aber Verständnis dafür, dass ich unter der E-Mail-Adresse nur Fragen, die sich direkt auf den Inhalt des Buches beziehen, beantworten kann.
Darüber hinausgehende Fragen kläre ich jedoch gerne in Schulungen und Workshops, die Sie auch unter dieser E-Mail-Adresse anfragen können.
Während des Schreibens dieses Buches habe ich mir Mühe gegeben, verständliche deutsche Sätze zu schreiben. Ich hoffe dies durchgehend geschafft zu haben und setze große Hoffnungen auf das Lektorat, falls dem nicht so sein sollte.
Überall, wo es sinnvoll war, habe ich außerdem deutsche statt englische Fachbegriffe genutzt. So werden Sie in diesem Buch häufiger Begriffe wie Schaltfläche statt Button oder Ereignisbehandlungsroutine statt Event-Handler finden. Aufgrund der Erfahrung aus meinen Schulungen und Workshops habe ich auch die deutschen Spracheinstellungen für Visual Studio für dieses Buch genutzt, da ein nicht unerheblicher Teil der Teilnehmer meiner Schulungen Visual Studio auf Deutsch benutzen. Daher finden Sie auch Begriffe wie Projektmappen-Explorer statt Solution-Explorer in diesem Buch.
Die deutsche Variante habe ich allerdings nur für etablierte Begriffe genutzt. Die krampfhafte Übersetzung von Begriffen, die durchgängig jeder noch so puristische Entwickler nutzt, den ich kenne, habe ich mir gespart. Statt Sie also rätseln zu lassen, was es mit einem Wegbestimmungssystem auf sich haben könnte, habe ich lieber den etablierten Ausdruck Routing-System genutzt.
In dem Wissen, dass man es niemals allen recht machen kann, nehme ich auch hier gerne Ihre Rückmeldung direkt per E-Mail unter [email protected] oder auf Twitter unter https://twitter.com/codemurai entgegen.
Dieses Buch ist eine für .NET MAUI 8 überarbeitete Version der ersten Auflage zu .NET MAUI 6, welche eine überarbeitete Version meines Vorgängerbuches zu Xamarin.Forms war. Wenn Sie eines der beiden Vorgängerbücher bereits gelesen haben, dann wird Ihnen vieles bekannt vorkommen. Ich nutze den gleichen Aufbau im Bereich der Demos und teilweise gleiche Beispiele. Beides hat sich bewährt.
Dies bedeutet aber nicht, dass man in diesem Buch nichts Neues lernen kann, wenn man den Vorgänger zu Xamarin.Forms bereits gelesen hat. Zum einen wurde das Buch um die Plattformen macOS und Windows erweitert, zum anderen habe ich eine komplett neue durchgehende Beispielanwendung geschrieben. Außerdem habe ich natürlich neue, .NET-MAUI-spezifische Themen mit aufgenommen und die Änderungen von Xamarin.Forms zu .NET MAUI dort, wo es Sinn macht, ausführlich erklärt.
Zu guter Letzt können Leser des Xamarin.Forms-Buches natürlich sehr leicht vergleichen, welche Anpassungen ich an den Beispielen vornehmen musste, um sie nach .NET MAUI zu portieren. Dieses Wissen hilft Ihnen natürlich auch bei der Migration Ihrer eigenen Apps.
Für Leser der ersten Auflage des .NET MAUI Buches gilt, dass Sie in fast jedem Kapitel neue Inhalte finden werden. Einige Kapitel wurden stark erweitert, das durchgehende Beispiel wurde ersetzt und sechs Kapitel sind komplett neu hinzugekommen.
In diesem Sinne wünsche ich Ihnen viel Spaß und Erfolg bei der Lektüre dieses Buches und freue mich auf ein Wiedersehen bei den Updates zu diesem Buch.
There’s no chance that the iPhone is going to get any significant market share.No chance.
Steve Ballmer
Unzutreffender hätte Steve Ballmer, der ehemalige CEO von Microsoft, im April 2007 die Zukunftsaussichten für das iPhone wohl kaum einschätzen können.
Wenige Wochen vor dessen Veröffentlichung ging er in einem Interview mit der USA Today davon aus, dass der Marktanteil des im Januar 2007 angekündigten iPhones ungefähr zwei bis drei Prozent ausmachen wird und Microsoft mit seinem Betriebssystem den Mobiltelefonmarkt mit einer Verbreitung von ca. 60 bis 80 % beherrschen wird.
Heute wissen wir, dass Ballmer nicht nur vollkommen falsch mit seiner Einschätzung lag, sondern dass Apple mit der Einführung des iPhones den Wendepunkt im Markt für Mobiltelefone einläutete. Während zuvor meist sogenannte Feature Phones, also Mobiltelefone im klassischen Sinne, die weder über einen Touchscreen noch einen Internetzugang oder App Store verfügten, verkauft wurden, lag der Marktanteil der Smartphones bereits im dritten Quartal 2014 laut einer Studie des amerikanischen IT-Marktforschungsunternehmens Gartner bei 66 %. In der Studie wurde davon ausgegangen, dass bis 2018 neun von zehn Mobiltelefonen ein Smartphone sind.
Gemeinsam mit dem Siegeszug der Smartphones stieg auch der Bedarf an sogenannten Enterprise Mobile Apps, also solchen Apps, die Mitarbeiter, Partner oder Kunden von Unternehmen bei ihrer täglichen Arbeit unterstützen. Beispiele für solche Apps wären unter anderem eine Zeiterfassungs-App, eine Reisekosten-App, eine Customer-Relationship-Management-(CRM-)App, eine Support-/Ticket-App, oder eine mobile Variante einer anderen internen Software. Gartner geht davon aus, dass der Bedarf an solchen Enterprise Mobile Apps die verfügbaren Entwicklungskapazitäten um den Faktor fünf übersteigen wird.
Verschärft wird diese Problematik dadurch, dass eine Mobile App häufig nicht nur für ein Betriebssystem entwickelt werden muss, sondern für zwei oder drei. Dies liegt daran, dass es für Unternehmen in der Regel nicht möglich ist, ihren Kunden die Nutzung eines bestimmten mobilen Betriebssystems, zum Beispiel iOS, vorzuschreiben. Selbst innerhalb des Unternehmens ist diese Möglichkeit nicht immer gegeben, da immer mehr Firmen auf eine Strategie setzen, die sich Bring Your Own Device (BYOD) nennt, bei der die Angestellten ihre privaten Mobiltelefone, Tablets usw. mit ins Unternehmen einbringen. Auch in diesem Fall kann das Unternehmen die Verwendung eines bestimmten mobilen Betriebssystems meist nicht vorschreiben, da es sich um die privat angeschafften Geräte der Mitarbeiter handelt.
Viele Unternehmen stehen somit vor der Herausforderung, dass sie eine oder mehrere Apps für zwei oder mehr mobile Betriebssysteme entwickeln müssen. Dabei kann es sich um eine interne App zur Optimierung der eigenen Unternehmensabläufe, um eine externe App, die zur Kommunikation mit den Kunden genutzt wird, oder – im Fall von Softwarehäusern – um eine mobile Variante eines bereits bestehenden Produkts handeln.
Natürlich stellt sich nun die Frage, wie diese Herausforderung möglichst wirtschaftlich gemeistert werden kann. So stehen neben der Variante, für jedes mobile Betriebssystem eine eigene App mit den plattformspezifischen Werkzeugen zu entwickeln, weitere Alternativen zur Verfügung, die es ermöglichen, Apps für mehrere Plattformen auf einer gemeinsamen Code-Basis zu erzeugen. Zu den bekanntesten Alternativen gehören React Native, Flutter, Native Script, Ionic, Compose Multiplatform und der Xamarin.Forms-Nachfolger .NET multi-platform App UI (.NET MAUI).
In diesem Buch werden Sie lernen, wie Sie Apps für Android, iOS, macOS und Windows mit .NET MAUI und der Programmiersprache C# entwickeln können. Das Buch richtet sich dabei hauptsächlich an Entwickler, die aktuell Software auf Basis der Microsoft .NET-Plattform unter der Verwendung von Visual Studio und C# entwickeln und eine Enterprise bzw. Line-Of-Business (LOB)-App entwickeln möchten. Die Entwicklung von Spielen für mobile Endgeräte wird in diesem Buch nicht behandelt.
1.1Cross-Plattform-Entwicklung mit .NETMicrosofts .NET-Plattform ist die Basis für .NET MAUI. Sie verfügt über die folgenden plattformspezifischen Frameworks zur Entwicklung von nativen Apps für unterschiedliche Betriebssysteme mit der Programmiersprache C#:
.NET for Android zur Entwicklung von Apps für Android
.NET for iOS zur Entwicklung von Apps für iOS (iPhone) und iPadOS (iPad)
NET for Mac zur Entwicklung von Apps für macOS
WinUI 3 zur Entwicklung von Apps für Windows
Jedes dieser Frameworks macht das der Zielplattform zugrunde liegende Software Development Kit (SDK) unter .NET verfügbar. Es ermöglicht somit die Entwicklung von Apps unter Verwendung der nativen Oberflächenelemente des jeweiligen Betriebssystems.
Auf allen zuvor genannten Plattformen kommt die .NET-Basisklassenbibliothek (engl. Base Class Library (BCL)) zum Einsatz. Die BCL liefert grundlegende Funktionen, wie ein gemeinsames Datentypsystem, diverse Datenstrukturen (Arrays, Listen etc.) sowie grundlegende Funktionen, zum Beispiel zum Zugriff auf Dateien, mathematische Funktionen, Erstellen von Threads, usw.
Um .NET-Code auf einem Betriebssystem ausführen zu können, ist eine Laufzeit- bzw. Ausführungsumgebung erforderlich. Unter Android, iOS und macOS ist dies die Mono Runtime, unter Windows ist es Win32. Mono ist eine quelloffene Implementierung des Microsoft .NET Framework für Android, Linux, macOS, iOS und Windows, die unter einer MIT-Lizenz steht. Das Projekt wurde im Dezember 2000 durch Miguel de Icaza gestartet. Im Mai 2011 gründete er gemeinsam mit einem Partner die Firma Xamarin, die im März 2016 von Microsoft aufgekauft wurde. Seitdem wird das Mono-Projekt durch Microsoft gesponsort.
Bild 1.1 zeigt die einzelnen Bestandteile, die für die plattformübergreifende Ausführung von .NET-Apps notwendig sind, im Zusammenspiel.
Bild 1.1.NET-Unterstützung unter Android, iOS macOS und Windows
Mithilfe der zuvor genannten Applikations-Frameworks .NET for Android, .NET for iOS, .NET for macOS und WinUI 3 lassen sich bereits Anwendungen für Android, iOS, macOS und Windows schreiben, die eine gemeinsame Quellcodebasis teilen.
Da sich die Oberflächentechnologien und SDKs unter den verschiedenen Betriebssystemen unterscheiden, ist es ohne eine weitere Abstraktionsschicht lediglich möglich, Geschäfts- und Datenzugriffslogik plattformübergreifend zu teilen. Die Benutzeroberfläche (engl. User Interface (UI)) muss je Plattform neu implementiert werden, wie Bild 1.2 zeigt.
Bild 1.2Cross-Plattformentwicklung unter .NET ohne geteilte UI-Schicht
Zusätzlich zum geteilten Quellcode wird beim gezeigten Ansatz je Plattform also ein weiteres Projekt angelegt, welches die Oberfläche in Form von Android-XML-Layout-Dateien bzw. iOS Storyboards oder Windows XAML Views enthält. Darüber hinaus beinhalten diese Projekte auch Oberflächenlogik sowie plattformspezifischen Quellcode, zum Beispiel zum Ansteuern der Sensoren, der Kamera etc. über die nativen SDKs der Hersteller.
Der Anteil an plattformübergreifend nutzbarem Quellcode hängt von der Komplexität der Oberfläche sowie der Nutzung nativer SDKs und APIs ab. In den wenigen belastbaren Quellen findet man Werte zwischen 60 und 90 %. Der Einsatz gängiger Entwurfsmuster in der Softwareentwicklung, zum Beispiel eines Model-View-Controller-(MVC-) oder Model-View-Presenter-(MVP-)Musters kann den Anteil des übergreifenden Quellcodes positiv beeinflussen.
1.2Überblick über .NET MAUI.NET MAUI ist eine Abstraktionsschicht oberhalb der zuvor genannten Applikations-Frameworks (siehe Bild 1.3).
Mit .NET MAUI können Oberflächen anstatt mit iOS Storyboards, Android-XML-Layout-Dateien oder Windows XAML Views übergreifend mit XAML oder in C#-Quellcode beschrieben werden. .NET MAUI nutzt hier allerdings einen eigenen XAML-Dialekt, der nicht mit den XAML-Dialekten anderer Microsoft UI-Frameworks wie der UWP (Universal Windows Platform) oder WPF (Windows Presentation Foundation) kompatibel ist. Stattdessen basiert der XAML-Dialekt von .NET MAUI auf dem XAML-Dialekt des Vorgängerprodukts Xamarin.Forms.
Bild 1.3.NET MAUI ist eine Abstraktionsschicht oberhalb der plattformspezifischen Frameworks.
Die Idee hinter .NET MAUI ist, dass Oberflächen lediglich abstrakt auf der Basis vordefinierter Elemente beschrieben werden. Zu diesen Elementen gehören unter anderem Eingabefelder, Schaltflächen oder Navigationselemente wie Tabs. Zu jedem dieser Steuerelemente gibt es pro Plattform einen sogenannten Handler, der auf Basis der abstrakten Beschreibung ein konkretes, plattformspezifisches Steuerelement erzeugt. Zur Laufzeit der App werden die einzelnen Handler aufgerufen. Dementsprechend erhält man, trotz einer plattformübergreifenden Beschreibung des Layouts, native Oberflächen mit entsprechender Performance. Durch diesen Ansatz erhöht sich der Anteil an plattformübergreifend nutzbaren Quellcode auf fast 100 %.
Da der .NET-MAUI-XAML-Dialekt, ähnlich wie der Microsoft-XAML-Dialekt, Datenbindung zur Synchronisation der Oberfläche und Domänenklassen unterstützt, kann unter .NET MAUI das Model-View-ViewModel (MVVM)-Muster eingesetzt werden, um die Oberflächenlogik plattformunabhängig zu implementieren. Daher beschränkt sich der plattformspezifische Quellcode in einer .NET-MAUI-Anwendung tatsächlich auf wenige Zeilen. Diese sind zum Beispiel für den Startvorgang der App notwendig. Im Gegensatz zum Vorgänger Xamarin.Forms wird der plattformspezifische Quelltext nicht mehr in einem eigenen Projekt je Zielplattform entwickelt, sondern kann innerhalb eines gemeinsamen Projekts in Unterordnern gespeichert werden. Bild 1.4 verdeutlicht diesen Zusammenhang.
Der .NET-MAUI-Ansatz ist gerade in Apps im geschäftlichen Umfeld sinnvoll. Häufig werden in diesem Bereich keine speziellen Anforderungen an die Oberfläche gestellt.
Bild 1.4Drei-Schichten-Architektur mit .NET MAUI
Die abstrakten .NET-MAUI-Oberflächenelemente werden eins zu eins in die Standardoberflächenelemente der jeweiligen Plattform übersetzt. Infolgedessen entspricht das Layout einer .NET-MAUI-App dem, was ein Benutzer der jeweiligen Plattform erwartet. Sollten trotzdem in einer App in manchen Szenarien Designs fernab des Standards notwendig sein, so haben Entwickler über die Implementierung eigener Handler stets die Möglichkeit, auch besondere Oberflächenwünsche zu realisieren.
Xamarin, Xamarin.Forms und .NET MAUI
.NET MAUI ist eine Weiterentwicklung von Xamarin.Forms, dessen Entwicklung zugunsten von .NET MAUI eingestellt wurde. Insofern kann man sagen, dass .NET MAUI der Nachfolger von Xamarin.Forms ist. Microsoft selbst spricht von einer Evolution.
Bei der Neuentwicklung setzte Microsoft einen besonderen Fokus auf die Unterstützung der Desktop-Betriebssysteme Windows und macOS sowie auf eine performantere und wartbarere Neuimplementierung der Oberflächenelemente.
Die APIs von .NET MAUI und Xamarin.Forms sind zu großen Teilen kompatibel, was eine Migration von Xamarin.Forms zu .NET MAUI erleichtert. Die Migration bestehender Xamarin.Forms-Apps empfahl sich spätestens zum Mai 2024, da der Support für Xamarin.Forms seitens Microsoft dann auslief.
Die weiteren Xamarin-Produkte Xamarin.Android und Xamarin.iOS wurden zu .NET for Android und .NET for iOS umbenannt. Auch hier gilt der gleiche Hinweis wie für Xamarin.Forms und .NET MAUI: Die APIs sind weitestgehend kompatibel, und eine Migration bestehender Apps sollte bis Mai 2024 abgeschlossen gewesen sein.
In einer .NET-MAUI-App schreiben Sie primär Quellcode, der mit den .NET-MAUI-APIs interagiert. Dazu gehören zum Beispiel Benutzeroberflächen oder auch der Zugriff auf abstrahierte Gerätefunktionen wie die Kamera oder Gerätesensoren. Diese Aufrufe entsprechen dem Pfeil Nr. 1 im Architekturdiagramm aus Bild 1.5. Die .NET-MAUI-APIs greifen wiederum auf die plattformspezifischen Frameworks .NET for Android, .NET for iOS, .NET for Mac oder WinUI 3 zu (Pfeil Nr. 2 aus Bild 1.5), um zum Beispiel die nativen Oberflächenelemente der Zielplattform zu rendern.
Selbstverständlich können Sie aus Ihrem Anwendungscode auch direkt auf die plattformspezifischen Frameworks zugreifen (Pfeil Nr. 3 aus Bild 1.5).
Bild 1.5Architektur von .NET-MAUI-Apps
Wie bereits in Abschnitt 1.1 angedeutet, greifen sowohl Ihr Anwendungscode als auch die .NET-MAUI-APIs und die plattformspezifischen Frameworks auf die gemeinsame .NET Base Class Library zu. Dies ist ein Unterschied gegenüber dem Vorgänger Xamarin.Forms. Dort wurde die Mono Base Class Library genutzt, eine eigene Implementierung der .NET BCL, die zu dieser in großen Teilen kompatibel ist.
Unter .NET MAUI ist vom Mono Framework lediglich die Laufzeitumgebung Mono Runtime übrig geblieben, die das Pendant zu Win32 unter WinUI 3 bzw. zur Common Language Runtime (CLR) des .NET Frameworks ist. Die Mono-Laufzeitumgebung beinhaltet sowohl einen Just-in-Time-(JIT-)Compiler als auch einen Ahead-of-Time-Compiler. Letzterer wird insbesondere im iOS-Umfeld benötigt. Darüber hinaus gehört auch ein Garbage Collector zur Mono-Laufzeitumgebung.
Je nach Zielplattform unterscheidet sich der Kompiliervorgang des Quellcodes sowie Laufzeitarchitektur an einigen Stellen. Details zu den Unterschieden finden Sie in den nächsten vier Abschnitten.
1.3.1.NET MAUI unter AndroidUnter Android wird der Quellcode von .NET-MAUI-Anwendungen durch den Microsoft Roslyn C# Compiler in Intermediate Language (IL) kompiliert und durch die in C implementierte Mono-Laufzeitumgebung ausgeführt. Diese wird parallel zur Android Runtime ART VM auf dem Linux-Kernel des Android-Betriebssystems ausgeführt.
Der Just-In-Time-Compiler der Mono-Laufzeitumgebung übersetzt den IL-Code zur Ausführungszeit in nativen Maschinencode, der schließlich zur Ausführung kommt.
Über den sogenannten Managed Callable Wrapper (MCW) kann in C# geschriebener Code Funktionen des Android-Application-Frameworks, der Android Libraries oder anderer Java-Bibliotheken aufrufen. Auch das Implementieren von Java-Schnittstellen oder das Überschreiben virtueller Java-Methoden ermöglicht der MCW.
Um notwendige Typkonvertierungen kümmert sich der MCW. Diese sind erforderlich, da zum Beispiel Strings unter C# anders verwaltet werden als unter Java. Ehe der Java-Code jedoch aufgerufen werden kann, muss zuvor eine entsprechende Binding-Bibliothek erstellt werden. Für sämtliche Android-Standardklassen ist dies bereits durch Microsoft erledigt worden. Eigene Bindungen für andere Bibliotheken können über die Microsoft-Werkzeuge generiert und, falls notwendig, von Hand modifiziert werden.
Neben dem MCW gibt es noch den Android Callable Wrapper (ACW). Er wird genutzt, um C#-Code für Aufrufe aus Android nutzbar zu machen. Dies ist zum Beispiel dann der Fall, wenn im Rahmen eines Callbacks (Rückruffunktion) eine eigene Methode aus einer Android-Klasse heraus aufgerufen werden soll. Einen Überblick über die zuvor beschriebene Arbeitsweise von .NET MAUI unter Android gibt Bild 1.6.
Da die .NET-Klassenbibliothek im Gegensatz zum Android Application Framework nicht bereits mit dem Android-Betriebssystem installiert wird, muss sie für jede .NET-MAUI-App einzeln verteilt werden. Gleiches gilt für die Mono-Laufzeitumgebung.
Dadurch ist das Installationspaket einer .NET-MAUI-App mindestens 2,5 MB größer als das einer vergleichbaren nativen App, die direkt mit dem Android oder iOS SDK unter Java bzw. Objective-C oder Swift entwickelt wurde.
Bild 1.6Architektur von .NET MAUI unter Android
Bei einem von .NET MAUI erzeugten Installationspaket handelt es sich um ein Standard-Android-APK-Paket. Aus Sicht des Endanwenders ist eine .NET-MAUI-Android-App also, abgesehen vom größeren Installationspaket, eine App so wie jede andere Android-App auch.
Die bisherige Betrachtung von .NET MAUI unter Android und .NET for Android soll an dieser Stelle für einen ersten Überblick reichen. Detailliertere Informationen zu Android und .NET for Android erhalten Sie in Kapitel 3.
1.3.2.NET MAUI unter iOSUnter iOS wird der Quellcode ähnlich wie bei der Android-Variante zunächst in IL kompiliert. Dieser IL-Code wird allerdings nicht zur Ausführungszeit durch den Just-In-Time-Compiler übersetzt und durch die Mono-Laufzeitumgebung ausgeführt. Stattdessen wird der IL-Code Ahead-of-Time (AOT) in ARM-Maschinencode kompiliert.
Der Grund für die AOT-Übersetzung ist, dass Apple keine Ausführung von dynamisch geniertem Code unter iOS erlaubt. Da jedoch genau dies durch den Just-In-Time-Compiler und die Laufzeitumgebung geschieht, muss der IL-Code durch den AOT-Compiler in ARM-Maschinencode übersetzt werden. Bild 1.7 verdeutlicht diesen Ablauf.
Bild 1.7Übersetzung von iOS-Anwendungen
Eine weitere Einschränkung liegt darin, dass iOS-Apps nur auf einer originalen Apple-Hardware übersetzt werden dürfen. Das bedeutet, dass .NET-MAUI-Entwickler entweder direkt auf einem Mac arbeiten müssen oder zumindest Zugriff auf einen Mac benötigen, um mithilfe von Visual Studio die App remote auf diesem zu übersetzen.
Auch die Betrachtung von .NET MAUI unter iOS und .NET for iOS soll an dieser Stelle fürs Erste abgeschlossen sein. Detaillierte Informationen zu iOS und .NET MAUI unter iOS erhalten Sie in Kapitel 4.
1.3.3.NET MAUI unter macOSUnter macOS wird der Quellcode genau wie bei einer iOS-App zunächst in IL-Code und anschließend über den AOT-Compiler in ARM-Maschinencode kompiliert. Zusätzlich kommt Mac Catalyst, eine Lösung von Apple, zum Einsatz. Mac Catalyst erlaubt die Kompilierung von iPadOS-Anwendungen für macOS.
1.3.4.NET MAUI unter WindowsUnter Windows nutzt .NET MAUI die Oberflächenelemente des UI-Frameworks WinUI 3, das als Teil des Windows App SDKs veröffentlicht wurde. Apps für Windows werden durch den C#-Compiler ähnlich wie Apps für Android in IL-Code übersetzt und zur Laufzeit durch den JIT-Compiler in Maschinencode überführt.
1.4Entwicklungswerkzeuge.NET MAUI ermöglicht es Ihnen, auf Linux, macOS oder Windows Apps für Android, iOS, macOS und Windows zu erstellen. Sie können Apps für jede dieser Plattformen auf jedem der drei Betriebssysteme kompilieren. Allerdings gibt es Einschränkungen beim Ausführen, Debuggen und Bereitstellen von Apps in den App Stores. Tabelle 1.1 gibt Ihnen einen Überblick, welche Zielplattformen Sie mit welchem Betriebssystem ausführen, debuggen und für die Verteilung in die App Stores verpacken können. Beachten Sie, dass Linux nur als Entwicklungsumgebung, aber nicht als Zielumgebung unterstützt wird. Das heißt: Sie können unter Linux Apps mit .NET MAUI entwickeln, aber keine Apps für Linux entwickeln.
Tabelle 1.1 Unterstützte Entwicklungs- und Ausführungsbetriebssysteme
Linux
macOS
Windows
Android
✓
✓
✓
iOS
✓
(✓)1
macOS
✓
Windows
✓
1 iOS-Apps können unter Windows nur vollständig debugged oder für die Verteilung in den App Store paketiert werden, wenn eine Verbindung zu einem Mac Build Host hergestellt ist. Weitere Informationen finden Sie in Kapitel 4.
Wie Sie Tabelle 1.1 entnehmen können, können Sie unter Windows Apps für Android und Windows entwickeln. Die Entwicklung von Apps für macOS wird nicht unterstützt. Für iOS gibt es eine eingeschränkte Unterstützung.
Die fehlende bzw. eingeschränkte Unterstützung für die Apple-Betriebssysteme rührt daher, dass das für iOS- und macOS-Apps benötigte iOS SDK unter Windows nicht verfügbar ist. Es kann nur auf einem Mac als Bestandteil von Apples Entwicklungsumgebung Xcode installiert werden. Dies hat zur Folge, dass Apps für macOS unter Windows nicht debugged werden können. Für iOS gibt es zwei Möglichkeiten, die Einschränkung zu umgehen. Sie können sich entweder mit einem Mac Build Host verbinden, oder .NET MAUI Hot Restart verwenden.
Ein Mac Build Host ist ein Mac mit installiertem Xcode, der über eine SSH-Netzwerkverbindung von Ihrem Windows-Rechner erreicht werden kann. Dieser Mac dient als Brücke, um das iOS SDK und andere für die Entwicklung notwendige Tools zu nutzen. Nachdem eine Verbindung hergestellt wurde, leitet Visual Studio Build- und Debugging-Anfragen an den Mac Build Host weiter. So können Sie den iOS-Simulator oder ein verbundenes iOS-Gerät direkt aus der Windows-Umgebung heraus für das Debugging verwenden.
Die zweite Alternative, Hot Restart, ermöglicht das Debuggen auf einem angeschlossenen iPhone oder iPad und kann ohne eine Verbindung zu einem Mac Build Host verwendet werden. Hot Restart ist jedoch ein reines Debugging-Werkzeug und hat einige Einschränkungen. So werden unter anderem nur Debug- und keine Release-Builds unterstütz und auch die Verpackung von Apps für den App Store ist nicht möglich.
Als Entwicklungsumgebungen stehen unter Windows Visual Studio, Visual Studio Code und JetBrains Rider zur Verfügung.
Für die Entwicklung von Apps für mehrere mobile Betriebssysteme werden eine Vielzahl von Werkzeugen benötigt.
So müssen neben der reinen Integration in Visual Studio zum Beispiel das Java Software Development Kit (JDK), das Android SDK, diverse Emulatoren und noch vieles mehr installiert und konfiguriert werden.
Da diese verschiedenen Werkzeuge Abhängigkeiten untereinander haben, wäre die manuelle Installation aller Bestandteile eine wirkliche Herausforderung. Glücklicherweise nimmt uns das Visual-Studio-Installationsprogramm diese manuelle Hürde ab. Wie Bild 1.8 zeigt, reicht ein Klick auf die Option .NET Multi-Plattform-App-UI Entwicklung, um alle notwendigen SDKs und Werkzeuge zu installieren. Weitere Informationen zur Installation, zum Beispiel die offiziellen Systemvoraussetzungen, finden Sie in der offiziellen Microsoft-Dokumentation unter https://learn.microsoft.com/de-de/dotnet/maui/get-started/installation.
Bild 1.8Installation von .NET MAUI und den notwendigen SDKs über den Visual Studio Installer
Seit Sommer 2023 können Sie auch Microsofts kostenfreien Quelltext-Editor Visual Studio Code zur Entwicklung von .NET-MAUI-Apps nutzen. Das ist unter Windows, Linux und macOS möglich, aber im Vergleich zu Visual Studio etwas komplizierter einzurichten. Neben Visual Studio Code benötigen Sie noch die in Bild 1.9 gezeigten Erweiterungen .NET MAUI, C# DevKit und C#. Darüber hinaus müssen Sie das .NET SDK, den .NET-MAUI-Workload sowie das JDK und das Android SDK installieren. Eine detaillierte Anleitung finden Sie in der offiziellen Dokumentation unter https://learn.microsoft.com/de-de/dotnet/maui/get-started/installation?tabs=visual-studio-code.
Bild 1.9Notwendige Erweiterungen, um .NET-MAUI-Apps in Visual Studio Code kompilieren zu können
Rider ist eine kostenpflichtige, plattformübergreifende IDE, die aus dem Hause JetBrains stammt, dem Entwickler des beliebten Visual Studio-Produktivitäts-Add-ins ReSharper. Rider kann unter Windows, macOS und Linux genutzt werden und bietet eine nahtlose Integration mit einer Vielzahl von .NET-Technologien und -Frameworks, einschließlich .NET MAUI.
1.4.2Entwicklung unter macOS und LinuxUnter macOS können Sie Apps für das iPhone, das iPad, den Mac und Android kompilieren, debuggen und testen. Bis Sommer 2024 können Sie dazu Visual Studio für Mac nutzen. Es handelt sich dabei um eine Weiterentwicklung von Xamarin Studio, welches im Mai 2017 durch Visual Studio für Mac ersetzt wurde. 2023 hat Microsoft bekannt gegeben, dass der Support für Visual Studio for Mac im August 2024 eingestellt wird. Als Alternative schlägt Microsoft entweder den Betrieb von Windows mit Visual Studio in einer virtuellen Maschine auf dem Mac vor, oder den Einsatz von Visual Studio Code mit den .NET-MAUI-Erweiterungen. Mehr über die Einrichtung von Visual Studio Code unter macOS sowie zur Installation der notwenidgen SDKs und Workloads finden Sie in der offiziellen Dokumentation unter https://learn.microsoft.com/de-de/dotnet/maui/get-started/installation?tabs=visual-studio-code.
Aufgrund der in Abschnitt 1.4.1 genannten Einschränkungen kann ich den produktiven Einsatz von Visual Studio Code zum Zeitpunkt des Schreibens jedoch nur eingeschränkt empfehlen. Obwohl man mit Microsofts Quelltext-Editor zum Ziel kommt, fehlt an einigen Stellen noch der Komfort.
Stattdessen empfehle ich JetBrains Rider als Alternative auf dem Mac. Zwar fallen hier zusätzliche Lizenzkosten an, diese amortisieren sich nach meinen Erfahrungen jedoch sehr schnell. In meinem Unternehmen, der Quality Bytes GmbH, habe ich mittlerweile jeden App-Entwickler mit einer Rider-Lizenz ausgestattet.
Unter Linux können Sie Apps für Android kompilieren, debuggen und testen. Genau wie unter macOS können Sie hierzu Visual Studio Code oder JetBrains Rider nutzen.
1.5Was Sie in diesem Kapitel gelernt habenBei .NET MAUI handelt es sich um ein Produkt von Microsoft, das die Entwicklung von Apps für Android, iOS, macOS und Windows mit C# und dem .NET Framework ermöglicht.
.NET MAUI ist die Weiterentwicklung von Xamarin.Forms.
Bei der Entwicklung von .NET MAUI wurde der Fokus auf die zusätzliche Erschließung der Desktop-Betriebssysteme macOS und Windows sowie auf eine neue Steuerelementarchitektur gelegt.
.NET MAUI bietet eine Abstraktionsschicht über die plattformspezifischen Frameworks, die es ermöglicht, Oberflächen mit XAML oder C# zu beschreiben und dadurch native Oberflächen für verschiedene Plattformen zu erstellen.
Unter Android führt die Mono-Laufzeitumgebung .NET-MAUI-Apps aus.
Unter iOS und macOS ist keine dynamische Codegenerierung erlaubt. Daher werden .NET-MAUI-Apps hier Ahead-of-Time in native Apps übersetzt.
Die Entwicklung von .NET-MAUI-Apps kann sowohl unter Windows als auch unter macOS stattfinden.
Zum Übersetzen und Paketieren von iOS-Apps ist ein Mac erforderlich.
Apps für .NET MAUI können sowohl unter Windows als auch unter macOS und Linux mit Visual Studio Code oder JetBrains Rider entwickelt werden. Unter Windows steht außerdem Visual Studio zur Verfügung. Visual Studio bietet die umfassendste Integration und Unterstützung, während Visual Studio Code noch einige Einschränkungen hat. Rider ist ähnlich umfassend wie Visual Studio.
In den auf dieses Kapitel folgenden Kapiteln werden wir uns mit einigen theoretischen Grundlagen zur App-Entwicklung und zu .NET MAUI beschäftigen. In diesen Kapiteln gibt es nur wenige praktische Inhalte. Um Ihre Motivation hochzuhalten, werfe ich Sie deswegen in diesem Kapitel ins kalte Wasser. Ohne zuvor viel über Grundlagen zu verlieren, werden wir im Rahmen dieses Kapitels gemeinsam eine erste kleine App entwickeln. Machen Sie sich keine Sorgen, falls Sie noch nicht alles verstehen, was in diesem Kapitel gezeigt wird. Eine detailliertere Betrachtung folgt in den restlichen Kapiteln des Buchs. Dieses Kapitel soll lediglich Appetit auf mehr machen.
Falls Sie bei der Bearbeitung der App ins Stocken geraten, dann blättern Sie gerne anhand des Inhaltsverzeichnisses oder des Index in die zu Ihrem Problem passenden Vertiefungskapitel. Sollte es zu Kompilierungsfehlern im Quellcode kommen, empfehle ich Ihnen einen Vergleich mit meiner Lösung, die Sie unter https://github.com/andrekraemer/maui-buch-2024/Kap02/Quickstart finden. Nun aber genug der einleitenden Worte. Auf geht’s!
Häufig lernt man eine Programmiersprache oder ein neues Framework mit einem einfachen Hello-World-Programm. Genau dies möchte ich mit Ihnen in diesem Kapitel nicht machen. Stattdessen werden wir in den nächsten 60 Minuten eine erste App entwickeln, deren Funktionsumfang ausreicht, um sie in den App Stores von Apple, Google und Microsoft zu veröffentlichen.
Dazu werden wir weder einen BMI-Rechner noch eine To-do-Liste oder einen RSS-Reader programmieren. Von Apps dieser Sorte gibt es bereits mehr als genug. Allerdings dürfen Sie nun auch nicht erwarten, dass wir z. B. eine komplette Kalender-App innerhalb von einer Stunde entwickeln. Dies wäre unrealistisch.
Um also im Zeitrahmen von 60 Minuten zu bleiben, entscheide ich mich für die Entwicklung eines kleinen Rechners. Es soll kein Taschenrechner sein, sondern ein Rechner, der nach der Eingabe eines Mindesthaltbarkeitsdatums ausgibt, ob ein Lebensmittel noch haltbar ist. Die App werden wir ExpiryChecker nennen. Auf der Idee der App werden wir im weiteren Verlauf des Buchs aufbauen.
2.1Das Konzept der AppDie Entwicklung der App werden wir mit einer kurzen Konzeptphase starten. Eine App, die innerhalb einer Stunde umgesetzt werden soll, benötigt kein umfangreiches Lasten- oder Pflichtenheft. Die folgenden Fragen sollte man aber beantworten können:
Was ist die besondere Stärke der App?
Welche Funktionen soll die App unterstützen?
Wie soll die Oberfläche der App aussehen?
Diese drei Fragen reichen für kleinere Apps aus und sie können in der Regel in weniger als 15 Minuten beantwortet werden.
2.1.1Die besondere Stärke der AppDass die App Stores von Apple, Google und Microsoft gut gefüllt sind, dürfte kein Geheimnis sein – die Konkurrenz ist groß. Möchte man mit seiner App erfolgreich sein, ist es besonders wichtig, sich von ähnlichen, schon existierenden Apps abzuheben, d. h. ein Alleinstellungsmerkmal herauszuarbeiten.
Abheben kann man sich mit seiner App, indem diese eine Sache besonders gut macht. Genau darum geht es an dieser Stelle: Wir wollen in einem Satz zusammenfassen, was die besondere Stärke unserer App ist. Im Englischen spricht man in diesem Zusammenhang übrigens vom Best-At-Statement der App. Typischerweise beschreibt man die besondere Stärke der App in einem Satz nach folgendem Schema, der nicht zu allgemein formuliert sein sollte:
Meine [Name der Kategorie]-App zeichnet sich besonders dadurch aus, dass sie [hier die Stärke der App einfügen].
Schreiben Sie ein eignes Best-At-Statement für den ExpiryChecker