web-dev-qa-db-fra.com

Créer une application Windows multiplateforme, Mac OS X

J'aimerais créer une application fonctionnant à la fois sous Windows et Mac OS X. J'aimerais également pouvoir exploiter au mieux les avantages de la plate-forme sur laquelle elle s'exécute en ce qui concerne Frameworks, les API, etc. Y a-t-il un moyen de faire ceci sans avoir à écrire du code Objective-C, puis du code C #? J'ai envisagé le C++ comme une alternative, mais je me demandais s'il y avait autre chose. L'application sera basée sur une interface graphique (bien que je ne sache pas exactement ce qu'elle fera pour le moment)

-G.

32
armahg

C'est bien que vous pensiez à la portabilité dès le début - il est beaucoup plus difficile de "s'enfermer" après coup.

Il existe différents kits multiplates-formes disponibles, mais IMHO n'offrent pas tous un aspect "natif" sur toutes les plates-formes prises en charge. Sur le Mac (ce que j'utilise), les promoteurs de tels kits veulent toujours mentionner qu'ils utilisent des contrôles natifs. C'est un bon début, mais ce n'est pas tout le voyage. Les autres points abordés dans les directives d’interface utilisateur d’Apple incluent notamment la manière dont les contrôles doivent être organisés, la façon dont les libellés des boutons doivent être libellés, les touches de raccourci standard à utiliser, etc.

Même Microsoft devait apprendre à la dure sur les dangers de l’écriture d’une interface graphique multi-plateforme, avec le malheureux Word 6.0 pour Mac.

IMHO, une meilleure approche consiste à utiliser un design MVC , avec la couche modèle écrite en C++ standard, et les couches vue et contrôleur à l'aide du toolkit natif de chaque plate-forme. Pour la version Mac, Carbon et C++ étaient auparavant une option intéressante qui n’est plus supportée. Vous voudriez donc utiliser Cocoa, en utilisant Objective-C dans la vue et Objective-C++ dans vos contrôleurs pour combler l’écart de langage. Votre version de Windows pourrait également compiler votre modèle en "C++ géré" et utiliser n’importe quel langage .NET pour les contrôleurs et les vues.

49
Sherm Pendley

Jetez un coup d'oeil à Real Studio . Sérieusement. Vous pouvez écrire une application dans Real Studio et la déployer sous Windows, Mac OS X et Linux.

Edit: Real Studio est maintenant Xojo .

16
Robert S.

wxWidgets est une bibliothèque C++ multiplate-forme, qui constitue un choix pratique. Mais je suis d’accord avec Sherm - toutes les bibliothèques multi-plateformes créent une interface utilisateur inférieure aux applications natives.

Il est rendue plus difficile par chaque système d'exploitation ayant une sémantique différente de l'interface utilisateur (commandes de bouton, etc.), de sorte que pendant que vous pouvez obtenir un bon aperçu, obtenir le droit « sentir » sur chaque plate-forme par une couche de vue est presque impossible lié.

En fonction de ce que vous faites, vous trouverez peut-être mieux une interface Web (par exemple, intégrez un serveur Web dans votre application et envoyez des pages HTTP à un navigateur). Vous évitez les problèmes de L & F alors!

Vous pouvez décider de vous allez juste d'avoir un L & F entièrement non-standard, et aller pour quelque chose comme wxWidgets ou Tcl/Tk.

6
Jamie Love

Adobe Flex, avec les bibliothèques AIR, vous offre un environnement de développement unique et de haut niveau pour ce genre de choses. J'ai écrit plusieurs utilitaires que les gens utilisent de manière interchangeable.

Vous obtenez également une portabilité raisonnable pour un navigateur intégré, si cela vous intéresse. Mais je pense que c'est une très bonne solution sans considérer cet avantage.

4
dkretz

Ma suggestion, utilisez Python. Python s’intègre à la fois à Objective-C et à C # (IronPython). Évitez simplement d'utiliser les toutes nouvelles fonctionnalités du langage Saignement Edge et tout va bien.

Certes, ce ne sera pas chose facile. Mais je dirais que cela ne devrait pas être stupide et facile. Il devient très évident que les concepteurs ne prennent pas en compte le fonctionnement de leur application lorsqu'elle est transférée sur une autre plate-forme.

4
Jason Baker

Si vous décidez d'utiliser C++, il existe un certain nombre de bonnes bibliothèques d'interfaces graphiques multi-plateformes qui vous permettront d'éviter d'avoir à dupliquer le code d'interface graphique pour chaque plate-forme. Par exemple:

Il existe un certain nombre d'autres projets similaires, mais ceux-ci sont parmi les meilleurs et les plus connus. Pour le reste de votre code, tout ce qui est spécifique au système devra évidemment être écrit en utilisant un code C++ distinct pour assurer l'interface avec les API Win32 ou l'API système de OS X, si nécessaire. Cela dit, vous constaterez peut-être que vous pouvez éviter une grande partie du code spécifique au système en utilisant des bibliothèques étendues telles que Boost .

D'autres suggestions pourraient être des choses telles que l'utilisation d'un fichier de configuration au lieu du registre Windows ou d'un fichier Plist sur le Mac. Dans la mesure du possible, utilisez plutôt des approches indépendantes de la plate-forme afin de minimiser les endroits où vous devez écrire du code à l'aide des API système.

3
Jay

Vous devez utiliser les meilleurs outils disponibles pour chaque système d'exploitation.

Le code C/C++ peut être séparé de l'interface graphique et utilisé dans chaque programme développé séparément.

Avant de prendre une décision, jetez un coup d'œil aux applications multiplates-formes développées avec des kits d'outils portables tels que Qt ou wxWidgets. D'après mon expérience, ils ne sont jamais aussi raffinés que leurs homologues natifs, en particulier sur le Mac.

3
titaniumdecoy

Pour l'interface graphique, j'examinerais SDL ou QT.

Consultez également mono http://mono-project.com/Main_Page

3
BenB

Le futur QT-Creator mérite peut-être un coup d'œil: link text

3
TheMarko

merci pour toutes vos réponses. J'ai fait quelques recherches et joué avec WPF, CAnimation, etc. Il semble que l'on utilise un modèle C/C++ et que l'interface graphique individuelle pour chaque plate-forme est la meilleure solution. Merci pour votre aide.

2
armahg

Si vous êtes un développeur Windows, utilisez Qt ou C # Winforms; Si vous êtes un développeur Mac, vous pouvez essayer Cocotron ( http://www.cocotron.org/ ), mais ce n’est pas encore terminé à 100%, bien que des applications commerciales aient été livrées avec.

2
Paul Betts

Consultez également fltk , wxWidgets est très bon et riche mais aussi très gros ...

1
Malkocoglu

Comme d'autres l'ont mentionné, il est certainement possible de créer une interface graphique inter-plateformes très jolie en Java sous Windows et Mac. Toutefois, si vous souhaitez que votre application se fondre dans l'environnement et se comporte de manière à donner l'impression que cette application est conçue pour la plate-forme sur laquelle elle s'exécute, vous devez vraiment développer l'interface graphique et l'expérience utilisateur pour chaque version de. l'application séparément.

Si vous analysez ce que votre application va faire et estimez qu’une partie importante du code/de la logique pourrait être partagée entre les plates-formes, écrivez ensuite cette partie de manière portable dans un langage disponible sur les deux systèmes. C, C++, Java, Python, Ruby, etc. S'il n'y a pas de portion significative, c'est-à-dire que la majeure partie du code sera destinée à l'interface graphique, il est alors moins justifié de partager du code.

Dans le cas où il y aurait une portion significative de code commun, je suggérerais de regarder dans Python et Ruby en tant que langages d’implémentation car il existe des liaisons Cocoa pour ces langages sur Mac et Windows avec l’utilisation de IronPython et IronRuby, vous pouvez utiliser la réutilisation qui suit. code dans une application .Net ainsi.

1
orj

Les gars de Magnetism Studios ont un Nice écrit sur l’utilisation de Cocotron pour construire un exécutable Windows avec Xcode.

Je n'ai aucune expérience de Cocotron, mais si je devais écrire une application Windows (avec une expérience de développement Mac), ce serait la première chose que j'essaierais.

0
Dirk Stoop

Java ou Mono me viennent à l'esprit. Certains diront peut-être que les kits d’outils graphiques Java ne sont pas très pratiques, mais il me semble que ce soit, du moins pour moi, le moyen le plus simple de porter votre application sur plusieurs plates-formes et d’éviter les difficultés de déploiement.

Mono, d’autre part, pourrait être un peu plus difficile à porter car il vous faudrait écrire au moins le gui deux fois si vous envisagez d’avoir des widgets natifs (winforms ou GTK pour Windows et CocoaSharp pour Max), mais vous pouvez écrire le backend une seule fois et développer une interface pour chaque plate-forme.

Comme je l'ai dit, les boîtes à outils de l'interface graphique Java peuvent ne pas sembler "natives" sous OSX ou même sous Windows, mais elles fonctionnent sur les deux plates-formes. Vous pouvez utiliser Swing ou AWT.

Quant à mono, vous pouvez utiliser GTK ou Winforms pour Windows et OSX mais ils ne se sentiront pas natifs. Vous pouvez cependant utiliser CocoaSharp qui sont des liaisons avec le framework Cocoa mais je ne suis pas sûr du statut du projet (lire: fonctionnalité soutien)

0
Gustavo Rubio

Je seconde Java. Il est conçu comme une solution multi-plateforme.

D'autres ont mentionné Adobe Air.

Silverlight est similaire à Adobe Air. Je crois que c'est (ou sera) complètement la plate-forme transversale.

0
Armstrongest

Si vous choisissez le langage C++, je recommanderais certainement Qt pour cela. Votre application peut être déployée sous Windows et Mac comme demandé dans l'OP, mais également sous Linux et désormais, avec la dernière version sur les smartphones utilisant iOs, Windows RT et Android.

C'est bien documenté et très actif sur le Web (y compris sur SO).

Le seul point négatif que je vois est l'outil Qt Creator qui, à mon humble avis, est moins convivial que les outils historiques (comme Visual Studio par exemple), mais vous n'êtes pas obligé de l'utiliser en tant que IDE pour le développement Qt. .

0
jpo38

Tant que vous n'êtes pas lié à des langues, il semble que Java soit un bon candidat. Associez-le à SWT pour l'interface graphique et vous obtiendrez une application native sur n'importe quel système d'exploitation.

0
James Van Huis

Vous pouvez créer d’excellentes applications multiplates-formes avec Java Swing. Il faut juste un peu plus d'efforts pour apprendre à le faire.

Ici, jetez un oeil à certains de ces liens.

  1. http://jidesoft.com/products/component.htm
  2. http://www.xerto.com/imagery.php
  3. http://www.jgraph.com/screenshots.html
  4. http://www.javootoo.com/
  5. http://www.formdev.com/screenshots/
  6. http://www.jidesoft.com/products/oss.htm
0

Je prévois de faire la même chose, et j’envisage de créer une application Windows C #/.NET puis de la transférer sur OS X à l’aide de Mono. Mon application possède déjà une interface utilisateur entièrement personnalisée (à l'exception de la barre de titre et des boutons de coin), de sorte que les différences esthétiques entre les systèmes d'exploitation ne devraient pas trop m'affecter.

Je ne suis pas sûr de comprendre ce que vous voulez dire en exploitant le meilleur de chaque plate-forme en termes de frameworks et d'API, etc. En général, écrire une application multiplate-forme signifie écrire sur le plus petit dénominateur commun, et donc signifier non tirer le meilleur parti de chaque plate-forme.

0
MusiGenesis

Pour être complet, il convient maintenant d’ajouter Unity à la liste.

Il serait très difficile de créer une application d’apparence native pour l’une ou l’autre des plateformes et les outils d’interface graphique généraux sont loin d’être mûrs. Mais ce n’est pas simplement un moteur de jeu et vous pouvez écrire en C #/Mono, utiliser un nombre décent de bibliothèques et déployer sur Win et OSX de manière relativement simple.

0
pieSquared