2009-01-14 13 views
12

Je travaille sur un projet qui doit contenir deux cibles. Un pour construire un Framework à utiliser dans le développement Mac et un autre pour créer une bibliothèque statique à utiliser dans le développement de l'iPhone.Comment créer des projets hybrides Xcode pour Mac et iPhone?

Dans le code commun, il n'y a pas de problème pour #ifdef entre les plates-formes, mais je ne peux pas obtenir les cibles et les dépendances correctement.

La première question est, quel SDK de base à utiliser? Par exemple si j'utilise Mac 10.5 je ne peux pas inclure le framework UIKit (il est marqué en rouge et n'affiche pas les fichiers d'en-tête si je l'agrandis). Même si la cible qui lie réellement contre elle construit pour iPhone OS ..

L'autre question est, que diriez-vous de la Foundation.framework, ou des choses comme Security.framework? Comment faire face à eux, car je ne peux inclure l'une des versions (Mac ou iPhone SDK) ...

Quelqu'un a un conseil pour moi? Je voudrais avoir une structure de projet propre et définitivement le même code de base pour les deux cibles ... Les configurations sont-elles le chemin à parcourir?

Merci!

Répondre

5

Juste pour vous faire savoir:

J'ai fini avoir un projet avec des cibles différentes pour les différentes plateformes. Mais je ne comprend pas le cadre que je dépends des cibles lui-même, mais eux plutôt ajouté à la Autres Linker Drapeaux paramètres de construction:

-framework Foundation -framework Security 

Vous pouvez le vérifier dans le projet, je l'ai fait sur github .

-3

Vous ne pouvez pas utiliser le PIMPL idiom? Et/ou avoir un en-tête commun pour les deux mais utiliser un fichier d'implémentation différent basé sur l'architecture cible ou SDK?

3

Probablement la façon la plus facile (en termes de ce que vous avez à faire) est de deux projets (que vous pouvez résumer comme sous-projets d'un projet de parapluie fictif) qui utilisent les mêmes ensembles de sources -un ciblage Mac OS X, l'autre iPhone OS.

Vous ne pouvez pas non plus créer deux cibles distinctes dans le même projet et modifier le "Base SDK" dans l'onglet "Build" de la fenêtre "Get Info" pour chacune? Je n'ai pas Xcode devant moi pour vérifier, mais je pense que ça vous permettra de faire ça.

(Bien sûr, avec une ou l'autre approche, vous pouvez ajouter une troisième cible: une bibliothèque statique pour le simulateur, ce qui sera utile lors du test!)

+1

C'est exactement le problème. Avoir deux cibles avec différents SDK de base où l'un est Mac OS X ne me permettra pas d'inclure le framework UIKit. Et le problème avec le cadre de sécurité qui a le même nom sur les deux plates-formes existe toujours. Mais l'idée du «projet parapluie» pourrait être acceptable. – stigi

3

En fait, ce n'est pas si grave. Créez simplement une deuxième cible du type approprié, puis modifiez le paramètre de construction "Base SDK". Assurez-vous ensuite d'ajouter tous les fichiers nécessaires. Si vous voulez construire les deux en même temps, créez une cible agrégée. Pour un exemple pratique, voir mon projet SSPromise.