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.
Antworten:
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 :)
"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.
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 :
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.
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.
"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.
quelle