2010-08-29 4 views
3

Il semble y avoir beaucoup de réponses pour les frameworks multiplate-forme pour les appareils (iPhone + Android), et les frameworks multi-plateformes pour les ordinateurs de bureau (Mac + Win + Linux). Ceci est une question différente concernant un cadre, une méthodologie, une application de modèle, un tutoriel, ou simplement des conseils utiles, sur le développement d'applications natives (pas seulement des applications web) qui sont multi-plateformes entre un OS de système et un OS de bureau. Je veux écrire une application qui peut fonctionner à la fois sur mon iPhone (ou iPad) et être compilée pour fonctionner sous Mac OS X (et pas seulement dans le simulateur). Je suis prêt à vivre avec seulement les éléments d'interface de base qui sont communs aux deux plates-formes (seulement 1 fenêtre, boutons génériques, champs de texte, etc.)Quelle est la méthodologie multi-plateforme appropriée pour iOS et Mac OS X?

Quelle est la meilleure méthodologie pour construire une paire d'applications, avec le nombre minimum de # Ifdef et d'autres réécritures de code spécifiques à la plate-forme, qui fonctionnera sur mon iPhone et nativement sur mon MacBook?

+0

J'ai un jeu simple que j'écris pour mon iPhone. J'aimerais pouvoir le jouer sur mon Mac sans lancer le simulateur SDK. – hotpaw2

Répondre

3

Il n'y a pas de moyen facile de le faire en utilisant les contrôles d'interface utilisateur standard. AppKit et UIKit sont des animaux complètement différents. Même la base UIView et NSView sont très différentes dans la structure et la fonction. À ce niveau, vous ne verrez rien de ce qui pourrait être fait sur plusieurs plateformes. Cependant, certains éléments d'affichage peuvent être configurés pour fonctionner sur Mac et iOS avec un minimum de modifications. Core CALayers d'animation sont un tel élément, en ce qu'ils sont les mêmes sur Mac OS X et iOS. C'est pourquoi nous avons choisi de les utiliser comme base pour le framework Core Plot, qui utilise une base de code presque identique pour afficher des graphiques sur Mac et iOS. Il y a quelques choses spécifiques à la plateforme à modifier (comme le système de coordonnées inversé qu'un UIView applique à sa couche de support), mais la plus grande partie du code se traduira sur les deux plates-formes.

Vous avez mentionné l'écriture d'un jeu. Si vous utilisez OpenGL ES pour cela, une grande partie du code de rendu que vous écrivez fonctionnera également sur le Mac. Il y a quelques choses que vous devrez modifier, mais pour la plupart, OpenGL ES est un sous-ensemble de bureau OpenGL. Cependant, pour un simple jeu en 2D, je vous recommande de rester avec Core Animation à moins que vous n'atteigniez vraiment un mur de briques, en termes de performances, simplement parce que vous écrirez beaucoup moins de code.

Les éléments que j'ai mentionnés jusqu'ici ont tous été dans la partie Vue du modèle de conception Modèle-Vue-Contrôleur. Le code de votre contrôleur sera spécifique à l'application, mais vous pourrez peut-être faire en sorte que la majeure partie de cette plate-forme soit indépendante. Si vous utilisez un modèle simple, ou même un qui repose sur SQLite ou Core Data pour la persistance, cela devrait être trivial pour faire fonctionner Mac et iOS avec le même code.

Une application Mac et une application iOS (même entre les différents appareils iOS) auront un design de base très différent. Vous ne pouvez pas simplement faire du chausse-pied d'une plate-forme à une autre. Les jeux sont probablement plus portables que tout le reste, mais vous aurez toujours besoin de faire un travail personnalisé pour refléter les attributs uniques de chaque périphérique informatique.

+0

Je sais que les contrôles standard de l'interface utilisateur et NS sont différents. Ce que je voudrais savoir, c'est si quelqu'un a fait une sorte de couche d'abstraction pour les deux pour permettre quelque chose qui ne nécessite pas autant d'une réécriture complète de l'interface utilisateur. Le rendu de vue utilisant Core Graphics nécessite très peu de chose en plus d'une macro pour les coordonnées de l'axe y retourné. Doit être possible de faire cela entre iOS et MacOS avec quelque chose de beaucoup plus léger que les trucs utilisés pour créer, par exemple, des applications multi plates-formes linux/Windows. On espère ... – hotpaw2

1

Je suis également aux prises avec celui-ci; J'utilise Unity3D et la licence gratuite n'autorise pas les plug-ins OS X natifs.

Je viens de passer la dernière heure de lecture par http://rayvinly.com/how-to-build-a-truly-universal-framework-for-ios-and-mac-with-just-a-single-codebase/

Ray a fait une présentation superbe, vous pouvez télécharger sa 30 la page document ebook! Il fournit également un projet de modèle. Je pense que je pourrais utiliser cette configuration pour créer une seule surface de dessin (donc, une seule fenêtre sur les deux plates-formes) que je pourrais utiliser pour utiliser SpriteKit. Puis, enveloppez l'entrée souris/tactile pour créer une entrée unifiée.

En ce qui concerne les cadres prêts à l'emploi, http://chameleonproject.org/ semble intéressant.

http://kivy.org/#home semble beaucoup plus intéressant: Python multi-plateformes emballage GLES2

également http://polycode.org/http://qt-project.org/

Qu'est-ce que vous choisissez à la fin?