Herangehensweise Entwicklung von Crossplatform-Anwendung

  • .NET MAUI

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von siycah.

    Herangehensweise Entwicklung von Crossplatform-Anwendung

    Hallo zusammen.

    Ich wollte mich auf diesem Wege mal erkundigen ob es einen Weg gibt, eine Anwendung zu entwickeln die auf Windows & macOS läuft.
    Ich war bisher unter Windows11 mit VS2019 unterwegs und programmiere WinForms-Anwendungen mit VB.NET.
    Inzwischen besitze ich ein MacBook Pro und lasse VS2019 dort über Parallels auf Win11 laufen. Die Performance ist absolut in Ordnung,
    nativ unter Windows allerdings doch deutlich besser.

    Jetzt war mir die Idee gekommen, dass es doch sicher inzwischen möglich ist Anwendungen für Windows und MacOS zu entwickeln -
    am besten mit einer IDE, die auf dem MacBook nativ läuft :) Mir würde auch zur Not ausreichen, erstmal Windows-Anwendungen auf
    macOS programmieren zu können.

    Ist das überhaupt möglich? Wenn ja, wozu würdet ihr raten?
    Schick wäre es, wenn es auch eine Art DataSet gäbe (arbeite da unter vb.net sehr gerne mit), da ich zu 99% eine SQL-Datenbank dran
    hängen habe und das Zusammenspiel super gut funktioniert.

    Dass ich eine neue Syntax lernen muss, ist mir soweit klar - wobei ich bisher immer versucht hab C# zu vermeiden, da ich die
    {Klammern} nicht leiden kann. ;)

    Würde mich über Feedback freuen.
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:

    tragl schrieb:

    besitze ich ein MacBook Pro

    Erstmal willkommen im Club! Habe auch seit einigen Jahren nun ein M1 MacBook Pro 16". Ich liebe das Gerät.

    tragl schrieb:

    lasse VS2019 dort über Parallels auf Win11

    :thumbdown:
    Wenn du Cross-Platform entwickeln willst, nimm besser eine IDE, die auf allen Plattformen läuft. Komme da aber gleich nochmal zu.

    tragl schrieb:

    dass es doch sicher inzwischen möglich ist Anwendungen für Windows und MacOS zu entwickeln

    Schon seit Jahren gibt es die Möglichkeit! Angefangen habe ich damit 2015, aber selbst da war das keine neue Technologie mehr ;)
    Mit jedem Jahr funktioniert das umso besser.

    Allerdings wirst du in VB da schlechte Karten haben.

    tragl schrieb:

    am besten mit einer IDE, die auf dem MacBook nativ läuft

    Nimm dafür Visual Studio Code. Es läuft nativ auf allen gängigen Plattformen, ist open source und unterstützt mittels Plugins (oder Extensions, wie Microsoft die nennt) so gut wie alle Sprachen.
    Manche Sprachen sind da besser dran, manche schlechter.

    tragl schrieb:

    Ist das überhaupt möglich?

    S.o. Ja, es ist möglich und es funktioniert IMO richtig gut. Auch wenn MAUI noch in den Kinderschuhen steckt.

    tragl schrieb:

    Wenn ja, wozu würdet ihr raten?

    Dazu kann man keine pauschale Antwort geben. Je nach Anwendungsfall und Applikation wirst du unterschiedliche Anforderungen haben.

    Ich für meinen Teil schreibe 99% meiner Anwendungen im Terminalbereich und habe dann einfach nur Web-Frontends wenn notwendig.
    Wenn Kunden dann speziell eine solche Applikation fordern, setze ich es entweder mit Xamarin Forms um (was jetzt deprecated ist), oder ich nehme mittlerweile MAUI. Funktioniert noch nicht so super geil, aber es funktioniert und man kann damit gute Anwendungen bauen.

    tragl schrieb:

    Dass ich eine neue Syntax lernen muss, ist mir soweit klar

    Dann ist ja schon mal gut ;)

    tragl schrieb:

    versucht hab C# zu vermeiden, da ich die
    {Klammern} nicht leiden kann.


    Werde einer von uns VB wird von Microsoft zwar noch weiterentwickelt, aber v.a. im professionellen Raum wird es kaum verwendet. C# ist in der dotnet-Welt definitiv die Wahl.
    Ich weiß wie es ist, wenn man am Anfang steht und die Klammern erstmal komisch aussehen, aber schnell wirst du merken, dass Klammern lesbarer sind als maximal verbose Schlüsselphrasen, wie ​end sub, ​exit <loop>, etc.

    Anstatt dass man sich immer merken muss, welches Schlüsselwort wohin kommt, setzt man einfach eine Klammer. Oder keine! Geht auch an Stellen.

    Es gibt sehr viele Ähnlichkeiten zwischen den beiden Sprachen, aber C# ist da einfach die mächtigere der beiden.

    Fazit:

    Ja, es geht. Mit C#. Es wird für dich eine Umgewöhnung sein, ja. Aber das ist schnell geschafft. Mein damaliger Ausstieg aus VB ging super schnell und ich habe bisher nicht einmal zurückgeblickt und mir gedacht "gott, ich will Funktion X aus VB". Im Gegenteil :)
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    @siycah @Fakiz: Schonmal danke für die nette und teilweise auch ausführliche Rückmeldung.
    Mit Web-Sachen werde ich zumindest momentan weniger zu tun haben. Mein Fokus liegt aktuell auf
    "werft eure zig-tausend excel-tabellen in die Tonne" und nutzt mein Programm wo alles drin ist. Hier geht's um maßgeschneiderte Lösungen
    für aktuell 2 Unternehmen.

    In jedem Unternehmen gibt's Kennzahlen und Stammdaten und Sonderlocken, wo es keine Software für gibt.
    Also wird meistens Excel genutzt:
    -die Files liegen auf nem Fileserver und die User blocken sich dann gegenseitig
    -die "Stammdaten" sind wenn überhaupt unsauber gepflegt
    -der nächste User zerstört eine Formel und macht die ganze Datei mit ggf. Charts etc. unbrauchbar weil der vorherige User was nachgearbeitet und vergessen hat den Blattschutz wieder reinzunehmen etc.
    -usw.

    Große Rede, garkein Sinn:
    Eine stinknormale "Forms"-Anwendung reicht für meine Zwecke derzeit völlig aus. Pflicht ist die Anbindung einer Datenbank - u.A. nutz ich derzeit eben das Typisierte DataSet, das macht mir die Arbeit
    zumindest beim Coden um ein vielfaches einfacher. Wenn's also in die richtung was gibt, dann würde ich das gerne probieren.

    Kann VisualStudio Code denn kompilieren und ausführen? Wie sieht's da mit ggf. Vorschauen aus? Natürlich nutz ich derzeit den WinForms-Designer vom VisualStudio und kann mir meine Controls dahin ziehen,
    wo ich will. Dass ich in richtung C# gehen muss, hab ich soweit begriffen - ähnelt ja dann auch anderen Syntaxes, die ich teilweise von Gameserver-Configs etc. von früher kenne. Mit MAUI als Beispiel käme ja dann
    vermutlich noch YAML dazu oder?


    EDIT: Avalonia schau' ich mir in jedem Fall mal genauer an.
    Frage noch: VS2022 für Mac wird ja auch auslaufen, kann ich also wohl getrost deinstallieren?
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:

    tragl schrieb:

    Kann VisualStudio Code denn kompilieren und ausführen?

    Öhm? Du kannst mit VS Code Build-Settings und Debug-Sachen konfigurieren, klar.

    Aber compilen tun weder Visual Studio, noch VS Code. Dafür gibt's dann die jeweiligen Compiler.
    Du solltest dich vielleicht erstmal mit den Grundlagen mit dem neuen dotnet beschäftigen.

    Auf deinem MacBook solltest du daher erstmal zwei Dinge tun:

    Wenn du die beiden Sachen getan hast, dann kannst du im Terminal (damit wirst du dich ohnehin etwas auseinandersetzen müssen), ​dotnet --help aufrufen. Und auch ​man dotnet.
    Die beiden Befehle zeigen dir alles auf, was die dotnet-Binary mitsich bringt. Darin sind u.a. auch Projekte und Solutions anlegen, compilen, deployen, packaging, etc. PP.

    Lern mit dem neuen dotnet laufen und dann fokussiere dich auf das, was danach kommt. Ist immer eine gute Sache :)
    Du kannst mit dem neuen dotnet auch direkt deine NuGet-Pakete im Projekt verwalten. Alles super easy.

    tragl schrieb:

    Wie sieht's da mit ggf. Vorschauen aus?

    Du meinst IntelliSense? Wenn du das C# Dev Kit installierst, ist alles dabei, was du für die Entwicklung von C#-Anwendungen brauchst.

    tragl schrieb:

    ähnelt ja dann auch anderen Syntaxes, die ich teilweise von Gameserver-Configs etc. von früher kenne.

    Verstehe ich nicht? Du meinst wegen der Klammern?

    Config-Dateien sind nicht ansatzweise so komplex wie eine Programmiersprache.
    Ja, C# nutzt Klammern, Kommata, hat Strings und Integer, aber da hören die Gemeinsamkeiten auch langsam auf.

    Turing-Complete Configdateien sind mir da schon sehr suspekt :D

    tragl schrieb:

    Mit MAUI als Beispiel käme ja dann
    vermutlich noch YAML dazu oder?


    YAML nicht, aber XAML - genau wie bei WPF/Avalonia auch.

    tragl schrieb:

    Mit Web-Sachen werde ich zumindest momentan weniger zu tun haben.

    MAUI nutzt intern, je nach Projekt, auch Blazor/Razor. Das sind erstmal Web-Technologien mit HTML, CSS und JavaScript. Es wäre gelogen zu sagen, dass mir das anfangs nicht unsympatisch war, aber es ist tatsächlich ganz gut gelungen.

    Damit hast du die komplette Freiheit, deine UI zu designen.
    Dotnet unterstützt auch bei diesen Anwendungen das "Hot Reload", d.h. du startest dein Programm und fängst an, zu designen und anzupassen. Beim Speichern aktualisiert sich deine Anwendung. Ist mMn noch geiler, als der Designer in VS.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    @siycah: bin grad mal dabei mir über VsCode so 1-2 Beispiel-Anwendungen zu gemüte zuführen, um mal einen Anfang zu finden.
    Warum zur Hölle muss ich für jedes Projekt erstmal "dotnet workload restore" ausführen, damit ich da überhaupt was mit anfangen kann?
    Ohne den Befehl sind bei den Sample-Apps etliche Fehler drin...
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Muss man nicht zwingend. Wenn man ​dotnet build ausführt, dann müsste der bei Bedarf auch Pakete aktualisieren. Der baut sich intern einen Cache auf und arbeitet den durch.

    Du kannst in VS Code, wenn du ​CTRL+SHIFT+B drückst, auch Tasks anlegen. Oben erscheint dann eine Leiste und dann kannst du eine JSON-Datei bearbeiten.

    Hier hast du mal ein Beispiel aus einem meiner Projekte. Musst du nur entsprechend deiner Projekte ändern.

    Quellcode

    1. "tasks": [
    2. {
    3. "label": "build",
    4. "command": "dotnet",
    5. "type": "process",
    6. "args": [
    7. "build",
    8. "${workspaceFolder}/Hermod/Hermod.csproj",
    9. "/property:GenerateFullPaths=true",
    10. "/consoleloggerparameters:NoSummary"
    11. ],
    12. "problemMatcher": "$msCompile"
    13. },
    14. {
    15. "label": "publish",
    16. "command": "dotnet",
    17. "type": "process",
    18. "args": [
    19. "publish",
    20. "${workspaceFolder}/Hermod/Hermod.csproj",
    21. "/property:GenerateFullPaths=true",
    22. "/consoleloggerparameters:NoSummary"
    23. ],
    24. "problemMatcher": "$msCompile"
    25. },
    26. {
    27. "label": "watch",
    28. "command": "dotnet",
    29. "type": "process",
    30. "args": [
    31. "watch",
    32. "run",
    33. "--project",
    34. "${workspaceFolder}/Hermod/Hermod.csproj"
    35. ],
    36. "problemMatcher": "$msCompile"
    37. }
    38. ]


    Dort könntest du auch ein Task "restore" anlegen, der dann einfach nur ​dotnet restore macht. Oder du nimmst die "dependsOn"-Eigenschaft.

    Könnte so aussehen:

    Quellcode

    1. {
    2. "label": "build",
    3. "command": "dotnet",
    4. "type": "process",
    5. "args": [
    6. "build",
    7. "${workspaceFolder}/Hermod/Hermod.csproj",
    8. "/property:GenerateFullPaths=true",
    9. "/consoleloggerparameters:NoSummary"
    10. ],
    11. "problemMatcher": "$msCompile",
    12. "dependsOn": "restore"
    13. },
    14. ...
    15. ,
    16. {
    17. "label": "restore",
    18. "command": "dotet",
    19. "type": "process",
    20. "args": [ "restore" ]
    21. }
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    Also das mit VS-Code ist mir für den Anfang zumindest bisschen komplex.
    Wollte dann mit VS2022 für Mac mal ein kleines Test-Projekt erstellen, was ich mir dann ggf. später über VS-Code anschauen und weiter bearbeiten kann.
    VS ist eine gewohnte Umgebung für mich, mit der ich eigentlich super klar komme.

    Aktuell arbeite ich in VB.NET so, dass ich 1-2 Sachen einprogrammiere und über den Debug-Modus die Anwendung dann starte und mir anschaue ob alles funzt.
    Da scheitert's aktuell schon - es wird nix geöffnet, was ich mir anschauen kann. Lt. dem Sample-Code (neue MAUI-Projekt) sollte da aber was zu sehen sein.


    Auch hab ich hier keine Platform-Unterstützung für Windoof - er will aber eine WinExe wohl erstellen..
    Versteh ich alles nicht.
    (iOS und Android hab ich bewusst rausgenommen - brauch ich nicht)





    Gibt's denn kein "Out-of-the-box-Sample", was ich in VS reinladen und einfach mal starten kann?
    Dann könnte ich mir alles anschauen und mal mit keine Ahnung - dem Platzieren von 1-2 Buttons anfangen und schauen wie sich das alles verhält.
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Versuch das über die Konsole zu bauen. VS for Mac ist eher semi. VS Code ist da auch nicht kompliziert. Ungewohnt, ja. Aber es funktioniert (fast) genau so, wie VS wenn du die entsprechenden Plugins hast.

    Das ist ehrlich gesagt einer der Nachteile an diesen vollen IDEs. Die abstrahieren alles weg, sodass der Entwickler nicht weiß was passiert. Das ändert sich mittlerweile ein Glück
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    Naja, dann eben mit VS-Code. Das mit dem workload-restore muss man ja scheinbar 1x pro Projektmappe machen, da könnte ich mit leben.
    Ich bekomm's aber ja nichtmal hin, dass sich das Sample nach Neu-Erstellung eines Projekts starten lässt.
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Wenn dir VS-Code nicht zusagt, was ich verstehen kann, wäre eventuell JetBrains Rider eine alternative. Die IDE verwenden wir in der Arbeit, kann ich wärmstens empfehlen. Ist aber nicht gratis. Mit MAUI und VS-Code kann ich dir leider nicht weiter helfen. Bei Avalonia kannst du dir einfach das Repo klonen.
    Dafür musst du auf "Sourcecontrol" (glaube das es so heißt) klicken und dort auf Repo klonen dann kannst du in das Suchfelfd AvaloniaUI/Avalonia.Samples eingeben bzw. Auswählen.
    VS-Code klont dann das repo für dich. U.U. musst du dann noch einen C# Kompiler intallieren das kannst du über die VS-Code Erweiterungen machen. Ich hab VS-Code nicht mehr installiert sonst hätt ich dir ein paar Bilder angehängt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Fakiz“ ()

    Danke.
    Eine kostenpflichtige Lösung kommt aktuell noch nicht in Frage. Ich find's eben blöd gelöst. VS2019 unter Windows funzt für mich perfekt,
    warum das weder VS Code, noch VS2022 unter Mac hinbekommen eine simple Sample-App zum Starten zu bringen ist mir ein Rätsel. Kann hier
    gut verstehen, wenn viele Entwickler da kalte Füße bekommen und es sein lassen.

    Ich hab ja Windows parallel zur Hand und kann VS2019 getrost weiter nutzen. Allerdings wäre mir eine native Möglichkeit unter MacOS lieber und ich hätte
    den Vorteil einer Cross-Platform-App. Allerdings ist es für mich (im jetzigen Stadium) zwingend erforderlich, dass ich zwischendurch immer mal die Anwendung aus der IDE raus
    starten kann um sicher zu gehen dass auch alles funzt, was ich da zusammengeschrieben habe. In vielen Dingen bin ich inzwischen recht sicher geworden, ich prüf das aber gerne doppelt und
    dreifach ;)
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Ja, XCode ist installiert - wurde bei der installation von dem ganzen .MAUI-Krempel usw. als benötigt gemeldet.
    Also ich hab wie @siycah oben geschrieben hatte, brew und dotnet über das Terminal draufgemacht. Danach mal mit VS Code und VS2022 rumprobiert.

    Mir geht's erstmal nicht um die Programmiersprache (C#) oder XAML, das bekommt man sicher hin.
    Wenn ich aber ein neues Projekt erstelle (egal ob Avalonia oder MAUI), dann wird ein Sample erzeugt.
    z.B. über VS2022 die MainPage.xaml (und natürlich weitere Dateien in der Projektmappe):

    Spoiler anzeigen

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8" ?>
    2. <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    4. x:Class="test.MainPage">
    5. <ScrollView>
    6. <VerticalStackLayout
    7. Spacing="25"
    8. Padding="30,0"
    9. VerticalOptions="Center">
    10. <Image
    11. Source="dotnet_bot.png"
    12. SemanticProperties.Description="Cute dot net bot waving hi to you!"
    13. HeightRequest="200"
    14. HorizontalOptions="Center" />
    15. <Label
    16. Text="Hello, World!"
    17. SemanticProperties.HeadingLevel="Level1"
    18. FontSize="32"
    19. HorizontalOptions="Center" />
    20. <Label
    21. Text="Welcome to .NET Multi-platform App UI"
    22. SemanticProperties.HeadingLevel="Level2"
    23. SemanticProperties.Description="Welcome to dot net Multi platform App U I"
    24. FontSize="18"
    25. HorizontalOptions="Center" />
    26. <Button
    27. x:Name="CounterBtn"
    28. Text="Click me"
    29. SemanticProperties.Hint="Counts the number of times you click"
    30. Clicked="OnCounterClicked"
    31. HorizontalOptions="Center" />
    32. </VerticalStackLayout>
    33. </ScrollView>
    34. </ContentPage>


    Da lässt sich ja selbst für einen Laien ganz klar rauslesen, dass es ein Image, 2 Labels und nen Button gibt.
    Für mich bedeutet das, dass es sich um ein Sample handelt. Und wenn ich auf Ausführen klicke dann erwarte ich das so wie bei meinem VS2019,
    dass das Projekt kompiliert und im Debug gestartet wird. D.h. ich bekomme das oben genannte angezeigt und kann damit im besten Fall was machen.

    Passiert aber leider nicht. Weder bei VS2022, noch bei VS Code. Wenn das mal sauber funzt, dann kann ich mich in's Lernen von C# und XAML stürzen, vorher macht das keinen Sinn.
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „tragl“ ()

    Die Frage von @Fakiz ist schon berechtigt. Um überhaupt irgendwas auf einem Mac entwickeln zu können, brauchst du XCode.
    Ruf mal im Terminal ​g++ auf, dann fordert dich das Betriebssystem dazu auf, XCode Tools zu installieren.

    Ich bin ehrlicherweise davon ausgegangen, dass du das schon gemacht hattest.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    Also ich kann das Verhalten leider nicht reproduzieren.

    Ich kriege Build-Fehler für Android, aber das liegt schlicht daran, dass ich die Android-Tools auf meinem MacBook nicht installiert habe.

    Ich habe hier wirklich nur ​dotnet new maui und dann ​dotnet build aufgerufen.
    Bilder
    • Screenshot 2024-03-11 at 20.00.20.png

      1,68 MB, 3.456×2.234, 328 mal angesehen
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    Das kommt mir so vor, als hättest du nicht das richtige Toolset installiert.

    Hast du das mit diesem Befehl installiert? ​sudo dotnet workload install maui --source https://api.nuget.org/v3/index.json
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.

    siycah schrieb:

    Hast du das mit diesem Befehl installiert?


    Ne, mit welchem Befehl weiß ich leider nicht mehr.
    Hab das jetzt mal mit dem Befehl nachgeholt - jetzt wurde eine ganze Latte an Zeug nachinstalliert, u.A. auch sämtliche Simulatoren für Cross-Platform und Mono - das liest sich schonmal besser.
    Kommen aber noch immer Fehler und keine Anwendung bei Auruf von dotnet build:


    VisualStudio meldet, dass maui-tizen fehlen würde, hab ich auch nachinstalliert, geht trotzdem nicht.
    VisualCode meldet, dass er XCode nicht finden kann und auch die Android-SDK nicht, obwohl die installiert ist

    Ist schon echt nervig das Ganze.

    EDIT: Grad in der Windows11-VM VisualStudio 2022 draufgeschmissen, neues Maui-Projekt ausgewählt - startet sofort ohne zu Maulen.
    Wär's ggf. sinnvoll, den ganzen Bums auf dem Mac einmal sauber zu deinstallieren und alles der Reihe nach
    neu aufzuspielen?

    Welche Reihenfolge müsste ich hier beachten?
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „tragl“ ()