web-dev-qa-db-fra.com

Peut-on exécuter une application C # / WPF sur Mac OS X?

Je vends une application C #/WPF (ciblant .net 3.0 pour le moment) et les gens continuent de me demander une version Mac.

L'application est une application de suivi du temps avec une bonne interface graphique, il n'y a pas beaucoup de logique métier dans une application de suivi du temps, donc la plupart de l'application est GUI - la réécriture juste l'interface graphique équivaut à réécrire toute l'application

Je n'ai pas les ressources pour réécrire l'application ou maintenir deux bases de code différentes, j'ai donc besoin d'un moyen d'exécuter le même code sur un Mac (je sais que je devrai déboguer et modifier le code, ce que je veux dire c'est que je ne peut prendre en charge qu'une seule base de code, je ne peux pas diviser le projet en différents projets Mac et Windows - je n'ai tout simplement pas le temps de travailler sur deux projets).

Le portage de l'application vers une bibliothèque d'interface multiplateforme, vers un langage de programmation différent ou vers Silverlight ne sont pas tous pertinents - cela prendra trop de temps et je pense que je gagnerai plus de ventes en investissant cette fois dans de nouvelles fonctionnalités.

Quelqu'un connaît-il un outil qui peut exécuter ou porter C #/WPF sur le Mac?

36
Nir

Il n'y a absolument aucun moyen d'exécuter l'application WPF à part entière sur Mac. Je ne sais même pas si c'est possible dans Parallels. La meilleure chose que vous puissiez faire est d'utiliser Silverlight, qui s'appelait auparavant "WPF/E" et fonctionne sur Macintosh.

12
Anton Gogolev

Nous étions dans une situation similaire. Nous avions un projet Windows fonctionnel et voulions une version Mac.

Notre produit était en deux parties, l'une une application .Net, l'autre une application de projecteur Director.

L'application Director devrait être facile à droite, multiplateforme et tout? Eh bien non, c'est rarement aussi simple, nous nous sommes retrouvés avec deux versions du fichier source Director.

Pour exécuter l'application .Net, il fallait utiliser Mono pour le moteur sous-jacent, ce qui fonctionnait bien pour nous, car nous n'étions que des tableaux d'octets de calcul de nombres. L'interface utilisateur d'autre part, nous avons dû réécrire dans Cocoa. Cela nous a coûté presque autant que la fabrication de la version Windows, car nous avons également dû apprendre tous les trucs Mac au fur et à mesure.

Depuis lors, nous n'avons mis à jour que la version Windows.

7
Iain M Norman

Nous avons eu un problème similaire. Nous avons écrit une version Mac dans Silverlight 3 (qui prend en charge beaucoup de choses WPF .NET). Il était en bac à sable mais si ce n'est pas un problème, vous pouvez faire de belles choses. Notre base de code est maintenant sur WPF et Silverlight 3 et est la même, lorsque nous la compilons, elle produit les applications SL3 et Desktop.

6
madhatter

Vous pouvez utiliser Parallels. J'ai notre logiciel de bureau écrit en C # et WPF et les gens l'utilisent sur Mac sous Parallels tout le temps.

En outre, Parallels vous permet d'exécuter des applications Windows côte à côte avec des applications Mac OSX, visibles dans leur propre fenêtre sur le bureau Mac. Il permet également de copier-coller et de glisser-déposer entre les applications Mac et Windows.

3
Kelly

Vous voulez une nouvelle fonctionnalité (prendre en charge une plate-forme entièrement différente) et vous ne voulez y mettre aucun effort. Désolé, la plupart du temps, cela ne fonctionnera pas.

Outre les éléments .NET (natifs) les plus basiques avec mono, je ne pense pas que vous puissiez exécuter une application WPF en natif sur MacOSX.

Si vous pensez que vous pouvez gagner plus d'argent en gagnant des utilisateurs Mac. Vous pourriez envisager d'utiliser d'autres méthodes de présentation. En raison de votre "investissement" actuel, je dirais que vous devriez essayer Silverlight (oui, j'ai lu votre diatribe de ne pas le faire). Une autre option pourrait être Adobe AIR/Flex.

Si vous portez votre application de cette façon. Vous pouvez conserver une base de code unique .. qui s'exécute sur les deux plates-formes.

Si vous souhaitez passer plus de temps sur les nouvelles fonctionnalités de votre base de code actuelle: ignorez les utilisateurs Mac.

3
Rick

Vous pouvez essayer Nevron Open Vision. Il s'intègre dans les projets WPF, WinForms, Silverlight et MonoMac, Xamarin.Mac. Ce n'est pas comme exécuter une application WPF sur Mac, mais cela vous demandera plutôt de recoder votre application sur la plateforme NOV. Cependant, une fois que vous avez fait cela, votre application (ou modules) s'exécutera sur toutes ces plates-formes à partir d'une seule base de code. Un bon exemple de cette approche de travail est Nevron Writer (qui fait partie du bureau de Nevron). Il fonctionne sur Windows, Silverlight et Mac à partir d'une base de code 100% unique.

[Divulgation: je travaille pour Nevron]

2
Ivaylo Milanov

Cela ne peut pas être fait. Mais puisque votre interface utilisateur est dans WPF, ce que vous pourriez faire est de transformer XAML en autre chose - comme GTK # par exemple. Bien sûr, si vous êtes comme moi et utilisez beaucoup de fonctionnalités .NET 3.5, cela ne vous aidera pas beaucoup.

Une raison de plus de conserver votre interface utilisateur dans un XML simple et simpliste pour commencer.

1
Dmitri Nesteruk

Une autre solution commerciale est NoesisGUI (gratuit pour <100K de revenus annuels bruts). Il s'agit d'un cadre d'interface utilisateur multiplateforme basé sur WPF/XAML. Il y a un guide pour la migration depuis WPF .

0
adabru