2011-01-22 2 views
7

Je vais bientôt lancer un projet iOS de taille moyenne, une application centrée sur les documents. Par la suite, le logiciel peut être porté sur Mac OS X. Bien entendu, toute l'interface utilisateur devra être modifiée; ce n'est pas ce que je demande.Développement multiplateforme iOS/Mac OS X Objective-C?

Est-il possible d'écrire la logique de base de telle sorte qu'elle soit multi-plateforme (Mac/iOS uniquement) ou plus facilement? Est-ce que quelqu'un l'a déjà fait, ou est-ce la manière habituelle de simplement écrire du code différent pour les deux plates-formes?

Je suis reconnaissant pour tous les conseils à ce sujet, que ce soit sur le code, Frameworks, contrôle de la version - n'importe quoi. Je détesterais réaliser que je me suis peint dans un coin seulement après le fait, alors je veux commencer aussi bien que possible.

+0

Voir ce post: http://stackoverflow.com/questions/1939/how-to-articles-for-iphone-development-objective-c –

+4

@Dave Everitt Avez-vous réellement * lire * la question - c'est complètement éteint -sujet. –

Répondre

9

La première étape consiste à adhérer au modèle MVC. Les vues doivent souvent être réécrites entre iOS et OS X, comme vous le dites, mais la couche modèle et une partie des contrôleurs peuvent être réutilisées. Foundation (NSArray etc) et les données de base sont partagées entre iOS et OS X, donc il ne devrait pas être difficile d'écrire un code Objective-C commun qui gère la couche de modèle, comme l'enregistrement des données sur le disque, la récupération

Un point important est de résister à l'envie d'écrire un segment de code long-ish qui traite principalement la couche modèle directement dans votre contrôleur de vue. Ce segment de code long-ish peut être abstrait en une méthode agissant sur la couche modèle par elle-même; Vous pouvez ensuite réutiliser ce code dans une application OS X plus tard. Par exemple, supposons que je crée un contrôleur de vue gérant le document affiché. Ensuite, dans une méthode d'action définie dans le contrôleur de vue correspondant à une opération d'édition, je pourrais écrire un code directement dans le détail de la couche modèle et implémenter l'opération d'édition. Ensuite, je devrais effectuer une assez grande modification au code source lorsque le contrôleur de vue est porté sur un contrôleur de fenêtre (ou sous-classe NSDocument). Je voudrais plutôt implémenter une méthode pour cette opération d'édition particulière dans l'objet document lui-même, afin que je puisse appeler cette méthode à la fois du contrôleur de vue dans une application iOS et du contrôleur de fenêtre dans une application OS X.

+0

Salut, pourriez-vous partager des liens ou peut-être un code sur sujet? –

2

vous pouvez simplement écrire en C, puis le port à ios, osx, java, Android, ...

+1

J'ai fait exactement cela avec le modèle (de MVC) de l'une de mes applications. Plain C fonctionne dans les wrappers de l'interface utilisateur sur Mac Classic, OS X, iOS, NDK sous Android, PalmOS, PDK sur webOS, ligne de commande sous Linux, etc – hotpaw2

3

Toute la logique pure et des classes de niveau "modèle" que vous créez, dans l'ensemble, le travail sur les deux iOS et Mac OS X, tant que vous vous en tenez aux classes Cocoa et aux méthodes SQLite/Core Data, etc. communes aux deux systèmes. Cela dit, le système de fichiers iOS est fortement en sandbox, ce qui n'est pas une restriction sur OS X et c'est quelque chose que vous devrez également gérer dans une application "centrée sur le document". Cependant, comme vous le dites, les classes de niveau de l'interface utilisateur sont complètement différentes sur les deux systèmes, avec iOS utilisant les différentes classes UIKit par rapport aux différentes classes NS sur OS X. Il est donc peu probable que vous puissiez partager beaucoup à ce niveau. En termes de partage du code entre les deux projets, vous pouvez créer un projet "commun" d'objets de niveau inférieur, etc., ajouter et cela comme référence dans les projets iOS et Mac OS X, bien que cela puisse se terminer se révéler quelque peu douloureux si les choses divergent (ce que je soupçonne qu'ils pourraient). Indépendamment, il ya un bon billet de blog sur ce sujet appelé "Easy, Modular Code Sharing Across iPhone Apps: Static Libraries and Cross-Project Reference s" par Clint Harris qui vaut la peine d'être lu, même si elle se concentre principalement sur le côté iOS des choses.

2

Je ne sais pas grand-chose à ce sujet, les autres gars en savent probablement plus, mais si vous avez déjà voulu porter le projet d'iOS sur Mac alors peut-être UMEKit pourrait vous aider ...

+0

Lien intéressant, merci. Mais le concept me semble faux: les restrictions d'interface et les exigences (et les possibilités) ainsi que les cas d'utilisation pour les appareils iOS Touch sont si différents des ordinateurs de bureau que cela semble vraiment raisonnable pour les petits utilitaires. EDIT: UMEKit implémente le plus gros problème avec la plupart des logiciels multiplateformes: Ne tenez pas compte de l'interface utilisateur native de la plateforme. OK pour les très petits outils, mais dangereux au-delà. – fzwo