Kann ich eine plattformübergreifende Anwendung (Mac und Windows) mit C # schreiben? [geschlossen]

8

Ich sehe viele alte Informationen zu dieser Frage und viele Artikel, die durch die Interwebs fliegen, aber ich kann nicht genau sagen, wo sich die Dinge befinden.

Grundsätzlich möchte ich C # -Code schreiben, den ich dann in eine native Windows-Anwendung und auch in eine native Mac-Anwendung kompilieren kann (keine Parallelen, kein Wine usw.). Kann das gemacht werden?

Sind Produkte wie Xamarin der richtige Weg? Auf der Xamarin-Website heißt es: "Verwenden Sie dieselbe Sprache, dieselben APIs und Datenstrukturen, um durchschnittlich 75% des App-Codes auf allen mobilen Entwicklungsplattformen gemeinsam zu nutzen." Aber ich kann nicht sagen, was diese 25% des plattformspezifischen App-Codes bedeuten könnten ... Ich kann auch nicht sagen, ob sie auf OSX und Windows abzielen, ihre Website ist sehr mobilgeräteorientiert.

[später hinzugefügt]

Zusammenfassung: Xamarin ist nicht für plattformübergreifende Anwendungen konzipiert. Sie bieten Ihnen die Möglichkeit, Mac-Anwendungen mithilfe der GUI-Vorgänge des Mac in C # zu schreiben. Was sie empfehlen, ist, Ihre gesamte "Geschäftslogik" plattformübergreifend zu schreiben und dann zwei vollständig separate GUIs zu schreiben - eine für Windows, eine für Mac.

C # / Qt scheint sich in einer sehr frühen Phase zu befinden (wenn jedoch jemand 2016 oder später auf diesen Artikel stößt, schauen Sie ihn sich an).

Es scheint, dass Mono plattformübergreifend einschließlich GUI funktioniert, jedoch nur, wenn Sie Windows Forms verwenden.

Betty Crokker
quelle
Sie können docs.asp.net/en/latest/getting-started/index.html und code.visualstudio.com überprüfen . Visual Studio und .NET wurden als Open Source erstellt. Hoep, der Ihren Zweck löst. Aber ja, wenn Sie sich darauf freuen, eine GUI-App zu erstellen, dann denke ich nicht, dass dies noch möglich ist.
Krishnandu Sarkar
Sie haben Xamarin.Forms jetzt in der kostenpflichtigen Version. Es macht nicht alles, aber es macht ziemlich viel. Sie können damit eine plattformübergreifende Benutzeroberfläche entwickeln.
MetalMikester
@KrishnanduSarkar wovon redest du? Was hat ASP .NET damit zu tun? :)
Konrad Morawski
@KrishnanduSarkar und das ist das erste Mal, dass ich von OpenSourcing Visual Studio höre. Würden Sie bitte einen Link zu diesen Informationen bereitstellen?
Konrad Morawski
@KonradMorawski ist es nicht. Ich dachte nur daran, ihn zu informieren. Deshalb habe ich erwähnt, dass wenn er sich darauf freut, eine GUI-App zu erstellen, dies nicht seinen Zweck erfüllt. Nun Link ist bereits in meinem Kommentar angegeben.
Krishnandu Sarkar

Antworten:

10
  1. Xamarin "zielt" nicht auf Windows ab, da es keinen Sinn macht - was auch immer Sie in C # schreiben, ist bereit, unter Windows an und für sich ausgeführt zu werden. Deshalb verkaufen sie nur Lizenzen für Xamarin.Android, Xamarin.iOS und Xamarin.Mac. Aber was sollte eine Xamarin.Windows-Abstraktionsschicht tun? Das wäre ein Lehrbuch Schlangenöl Produkt :)

  2. "Native Windows-Anwendung" - native ist ein kniffliges Wort, wenn es um C # geht. C # -Anwendungen erfordern normalerweise entweder .NET- oder Mono-Laufzeit, unabhängig davon, ob sie mit Xamarin erstellt wurden oder nicht. Wenn Sie native Binärdateien anstelle von IL erstellen möchten , gibt es Lösungen wie .NET Native oder ngen , die jedoch von der Verwendung von Xamarin unabhängig sind. Ich nehme nicht an, dass Sie in diesem strengen Sinne "Eingeborener" gemeint haben, aber es ist gut, sich dieser Unterscheidung bewusst zu sein. Mit C # verwenden Sie selbst unter Windows normalerweise eine Art virtuelle Maschine.

  3. Xamarin.Mac benötigt die Mono.OSX-Laufzeit, damit überhaupt C # -Code erstellt werden kann. Und es verbindet die Objective-C-Laufzeit mit Mono.OSX, wie in Xamarin.Mac Internals beschrieben :

    Es gibt die Objective-C-basierte Laufzeit, die Instanzen nativer Klassen (NSString, NSApplication usw.) enthält, und die C # -Laufzeit, die Instanzen verwalteter Klassen enthält (System.String, HttpClient usw.). Zwischen diesen beiden Arbeiten erstellt Xamarin.Mac eine Zwei-Wege-Brücke, über die Sie Methoden (Selektoren) in Objective-C (wie NSApplication.Init) aufrufen und Objective-C Sie zurückrufen kann (wie Methoden in Ihrem App-Delegaten).

    Ja, die resultierende Anwendung ist "nativ" in dem Sinne, dass es sich nicht um ein Stück HTML handelt, das in eine WebView-Komponente eingeschlossen ist. Sie haben Zugriff auf native UI-Elemente und APIs. Es ist nicht nativ in dem Sinne, dass Mono.OSX installiert werden muss. Mit anderen Worten, es ist so nativ wie C # unter Windows unter Standardbedingungen.

  4. Vielleicht möchten Sie sich auch mit http://blog.xamarin.com/introduction-to-xamarin.mac-seminar/ vertraut machen - es könnte datiert sein (2013), aber die Kernwahrheiten gelten meines Erachtens. Werfen Sie einen Blick auf Folie 7.

  5. "Ich kann nicht sagen, was diese 25% des plattformspezifischen App-Codes bedeuten könnten" - per Definition alles, was nicht plattformunabhängig ist, also ziemlich "reine" Geschäftslogik und was auch immer Sie abstrahieren konkrete Implementierungen (wie einige "IRepository" -Schnittstellen usw.). Was auch immer plattformspezifisch ist: Benutzeroberfläche, Datenbankbeständigkeit, Bibliotheken von Drittanbietern für Windows oder Mac können nicht gemeinsam genutzt werden. Das Verhältnis 75/25 ist eine Faustregel. Ihr Kilometerstand kann je nach Art Ihrer Anwendung stark variieren.

Beachten Sie, dass ich nur einige nichtkommerzielle Erfahrungen mit Xamarin für mobile Plattformen gemacht habe und iOS (nur Windows Phone und Android) nicht behandelt habe. Wenn ich diesbezüglich ungenau bin, korrigieren Sie mich bitte.

Konrad Morawski
quelle
Sie können auch github.com/mono/xwt erwähnen , es ist eine Abstraktionsschicht für GTK #, MonoMac, Xamarin.Mac und WPF für GUI.
Residuum