Comment dois-je gérer les dépendances entre les projets dans un espace de travail Xcode ?

StackOverflow https://stackoverflow.com/questions/5483909

Question

Je travaille sur un projet d'application iOS et j'ajoute le projet json-framework à l'espace de travail.Le navigateur de projet sur la gauche affiche les deux projets, et le sélecteur de schéma de construction affiche également les schémas des deux projets.Maintenant, je souhaite ajouter la cible libjson.a du projet json-framework en tant que dépendance sur la cible de l'application iOS dans l'autre projet.Le résultat attendu est que chaque fois que la cible de l'application est créée, elle crée (si nécessaire) la cible de la bibliothèque et relie la cible de l'application à celle-ci.Voici les façons dont j'ai essayé de procéder :

  • Construisez les deux dans le cadre du même schéma.La façon dont j'essaie cela consiste à modifier le schéma de mon application, en ajoutant « libjson.a » à la partie « Build » du schéma, et en passant, « Rechercher des dépendances implicites » est coché.Ensuite, je vais dans l'éditeur de cible de ma cible d'application, et dans "Phases de construction" -> "Lier le binaire aux bibliothèques", je choisis "libjson.a" dans la liste des bibliothèques d'espace de travail.Lorsque j'essaie ensuite de créer le schéma, je le vois construire la cible de la bibliothèque, mais la construction de la cible de l'application échoue avec l'erreur de l'éditeur de liens "Bibliothèque introuvable pour -ljson" - ce qui suggère qu'il n'a pas réellement découvert que la bibliothèque a été construite.En effet dans le navigateur de projet, l'entrée sous le projet d'application pour la bibliothèque est toujours rouge indiquant que le fichier n'existe pas.

  • Ajoutez la cible json en tant que dépendance explicite.Pour essayer cela, je ne modifie pas le schéma de construction, mais je vais dans l'éditeur de cible de la cible de mon application et je clique sur le bouton Ajouter sous « Dépendances cibles ».Aucune cible d'autres projets dans l'espace de travail n'apparaît, ce n'est donc pas un démarreur.

  • Faites glisser le projet JSON dans l'autre projet, puis ajoutez la cible en tant que dépendance.C'est ce que j'aurais fait dans Xcode 3.Dans le navigateur de projet, je récupère le projet de bibliothèque et le fais glisser sur le projet d'application.Cela fait apparaître le volet habituel « Ajouter des fichiers », que je ferme simplement en cliquant sur « Terminer ».Il y a maintenant deux entrées pour le projet de bibliothèque dans le navigateur de projet :un au niveau supérieur et un sous le projet d'application.Je peux maintenant ajouter la cible de la bibliothèque en tant que dépendance de la cible de l'application à l'aide de l'éditeur de cible, et créer un lien vers elle sans erreur dans la phase des bibliothèques de liens.Mais il a l'air cassé :il existe plusieurs entrées pour le même projet dans le navigateur.Existe-t-il une autre façon de procéder ?

Quelle devrait être la manière "Xcode 4-ish" de connecter ces cibles dans différents projets dans le même espace de travail ?Cela semblerait insuffisant si plusieurs projets dans le même espace de travail ne pouvaient pas réellement interagir les uns avec les autres.Merci, Graham.

Était-ce utile?

La solution

Je viens de définir un projet de test, à peu près autant que vous décrivez dans la version 3, en créant un nouvel espace de travail et en faisant glisser le projet Xcode, imbriqué comme indiqué.

Vous pouvez supprimer le projet de soeur si vous l'avez déjà.

Frapper la construction à ce sujet et cela fonctionne simplement, autant que je puisse le voir.

paramètres de schéma mise en page de projet

J'imagine qu'il y a une confusion interne de cheminement si vous avez deux projets, et je serais enclin à violer les paramètres de localisation dans "View" -> "Utilitaires" -> "Inspecteur de fichiers" et voyez quel effet qui a.

Entrez la description de l'image ici Entrez la description de l'image ici

Une autre chose à essayer est de définir vos chemins dans Xcode "Préférences ..." -> "Arbres source" et faites-la de la sorte, comme décrit ici: Easy et modulaire Partage de code sur les applications iPhone: bibliothèques statiques et références croisées

hth. Andy w.

Autres conseils

J'ai réussi à obtenir des dépendances entre des projets dans un espace de travail pour travailler comme je l'ai décrit ici: http://blog.carbonfive.com/2011/04/04/USTION-OPEN-SOURCE-STATIC-LIBRAGE-IN-XCODE-4/ .

Malheureusement, je ne trouve pas de moyen d'obtenir XCode de découvrir des dépendances implicites ou d'indexer tout dans la construction comme annoncé.J'ai trouvé une solution de contournement aux deux mais j'espère que moins de configuration manuelle sera nécessaire en tant que matures Xcode 4.

J'allais poser la même question, pensant que ma propre solution ne pouvait pas avoir raison. Mais je ne vois pas cela mentionné ici, et cela semble fonctionner. Clairement Xcode 4 est un travail en cours. :)

J'ai un espace de travail avec deux projets: une bibliothèque statique et une application qui utilise la bibliothèque. Les projets sont des frères et sœurs. Chaque projet a son propre schéma et chaque schéma est défini sur la construction d'une cible. En d'autres termes, j'ai ajouté deux projets à l'espace de travail et c'est ça.

Pour ajouter la bibliothèque statique en tant que dépendance de l'application, je viens de faire glisser le produit libquelette.A du projet de bibliothèque (Navigateur de projet) dans la liste "Link Binary with Bibliothèques" pour la cible de l'application. C'est ça. Maintenant, lorsque je construis l'application, le projet de bibliothèque est construit d'abord, puis relié. Fait intéressant, lorsque je modifierai le schéma de l'application pour utiliser une configuration différente (par exemple, la libération au lieu de débogage), la bibliothèque est construite à l'aide de la même configuration.

Cela fonctionne donc et il y a clairement une vérification automatique de dépendances en cours ici. Mais ça se passe tort. Encore une fois, l'éditeur de schéma / gestionnaire modal et l'absence d'un objet espace de travail dans le navigateur de projet ... Je n'ai jamais pensé que je le dirais, mais le studio visuel UI (BLEH) est beaucoup plus clair.

ma solution anti-balle pour faire ceci:

Créer des paramètres "par décharge de débogage / par architecture" dans les paramètres de construction dans le projet principal (pas la libère), pour inclure soit ../MYLIBPROJECT/BUILD/DEBUG-IPHONEOS ou ../Mylibproject/build/release-IPHonesImulator ou etc ..
Selon la configuration (vous pouvez créer ce type de configuration en cliquant sur le + Ensuite pour déboguer ou publier, puis choisissez "Toute SDK Simulateur iOS" ou "Toute SDK iOS". Vous devez faire cela pour "chemin de recherche de l'en-tête" (au cas où votre bibliothèque copie des fichiers d'en-têtes, ce qui est plus que probable) et pour "chemins de recherche de bibliothèque". Ce qui signifie que pour chaque réglage, vous vous retrouverez probablement avec 4 chemins différents (DEBUG SIM, débogage iOS, version SIM, version iOS). Cela garantirait la configuration des deux projets correspondant.

Maintenant, pour compiler automatiquement la LIB, c'est-à-dire de créer la dépendance, vous pouvez utiliser la "phase de construction -> lien vers binaire avec des bibliothèques -> + -> Sélectionnez le fichier .a" Conseil donné ci-dessus.

C'est la seule façon dont j'ai réussi à avoir quelque chose qui construit et relie correctement à chaque environnement sur Xcode 4.5

Remarque: j'ai même ajouté le drapeau -lmylib dans "Autres drapeaux de liaison", mais je ne suis pas sûr que c'est vraiment nécessaire

J'ai eu un certain succès avec la création de Bibliothèques statiques , bien que ce ne soit pas une solution parfaite.

Je vois les variantes suivantes :

  1. Explicit dependency dans un projet[À propos de]
  2. Implicit dependency dans un espace de travail[À propos de]

Voir le Guide de l'utilisateur Xcode: concepts Xcode -> Espace de travail XCode sous "Projets dans un espace de travail Partager un répertoire de construction".

Tous les projets d'un seul espace de travail partagent un répertoire de construction.Les dépendances sont découvertes automatiquement et construisent si nécessaire:

"xcode examine les fichiers du répertoire de construction pour découvrir des dépendances implicites. Par exemple, si un projet inclus dans un espace de travail construit une bibliothèque liée par un autre projet dans le même espace de travail, XCode construit automatiquement la bibliothèque avant de construire leAutre projet, même si la configuration de construction ne rend pas cette dépendance explicite. Vous pouvez remplacer ces dépendances implicites avec des paramètres de construction explicites si nécessaire. Pour des dépendances explicites, vous devez créer des références de projet. "

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top