36 votes

Quelle est la bonne façon de configurer les espaces de travail XCode 4 pour créer des dépendances en cas de besoin?

Mon cas est simple, un espace de travail avec deux frère projets: l'un principal (iOS) de l'app et un projet qui génère plusieurs statique de la bibliothèque de cibles utilisées par l'application.

Voici comment j'ai configuré le build:

  • rappelé à l'utilisateur d'en-tête de la recherche de chemin d'accès dans l'application principale de paramètres de construction de la bibliothèque de l'emplacement du projet (par l'intermédiaire d'un arbre source)
  • dans mon application principale cible de l'éditeur -> phases de construction -> "Lien Binaire Avec les Bibliothèques de la section", a ajouté la bibliothèque de produits que je veux utiliser.
  • dans le schéma, coché "Trouver Dépendances Implicites'

Après un nettoyage (et de suppression des données dérivées), un renforcement des filets de moi cette erreur lors de la compilation du projet principal:

ld: library not found for -lChipmunk
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang failed with exit code 1

Bien sûr, si je regarde dans le nouvellement créé données dérivées, le seul objet des fichiers trouvés sont pour l'application principale, pas les bibliothèques. Une généralisation de "trouver" pour *.o fichiers ne révèlent rien de pertinent, de sorte que les bibliothèques ne sont pas perdus, ils ne sont certainement pas en cours de construction.

Quelques points supplémentaires:

  • quand j'ai demandé à ce sujet sur le dev Apple forums, il a été suggéré que je devrais ajouter explicite deps dans la cible principale de l'Phases de construction->Cible des Dépendances de l'éditeur. Mais vous ne pouvez ajouter deps ici pour cibles dans le même projet ou sous-projets; dans mon cas, j'ai l'app et les projets de la bibliothèque comme lieu de travail frères et sœurs.
  • si je construis chaque bibliothèque manuellement avant que le construire, tout est très bien.

Mise à jour:

J'ai trouvé une solution de contournement, qui consiste à ajouter tous les deps' objectifs dans la "construction" d'une partie de l'application principale du régime. J'avais essayé cela avant, sans succès, mais n'avais pas réalisé que je pouvais faire glisser les cibles autour de la liste pour obtenir le droit de construire de l'ordre. S'appuie désormais se produire dans le bon ordre, à la fois après un nettoyage, et après des changements dans la bibliothèque ou de l'application principale source.

Je pars de la question ici, parce que manuellement le tri d'un ordre de construction sûrement ne devrait pas être nécessaire. Il y a quelque chose de mal avec la façon dont j'ai des choses mis en place.

41voto

christoph Points 1077

Modification du régime (l'échange entre construire cibles, onu-/cochez la case "Paralléliser Construire" et/ou "Trouver les Dépendances Implicites") ne fonctionne pas pour moi. J'ai toujours eu à nettoyer la construction du projet, après tout changement de code dans la lib statique. La recherche de dev forums, j'ai enfin trouvé cette réponse, qui fait des merveilles.

Assurez-vous que l'Identité et le Type de l'inspecteur est de montrer et de sélectionner le libWhatever.un fichier dans votre projet d'application (pas de la bibliothèque). Si vous voyez Emplacement: par rapport aux Projets en cours (ou par rapport à un Groupe], c'est votre problème.

  1. Cliquez Relatifs au Projet et à le modifier par rapport à Bâtir Produits.
  2. Cela va changer le type de lien, mais ça va encore être rompu.
  3. Cliquez sur le bouton localisation et de trouver le fichier de sortie.

L'ajout d'une lib statique à un projet existant via des Phases de construction -> Lien Binaire avec les Bibliothèques rend automatiquement "par rapport au Groupe" (si les deux sont frères et sœurs dans le même espace de travail). Changer son emplacement, de la manière décrite ci-dessus ne résout le construire problème de dépendance et dans le projet de navigateur de votre .un fichier doit apparaître en lettres noires (au lieu de rouge).

8voto

Jonah Points 11568

J'ai décrit la manière dont j'ai été la mise en place de plusieurs projets dans un espace de travail ici: http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/

Je suis d'accord que de régler manuellement la cible de construction de l'ordre dans le régime devrait être inutile, basé sur Xcode de la documentation, mais c'est la meilleure solution que j'ai trouvé jusqu'à présent.


Edit: dès que possible je vous recommande d'utiliser https://github.com/CocoaPods/CocoaPods pour gérer les dépendances d'un projet à ce stade.

2voto

Jeffy Points 450

Essayez de faire glisser le projet de bibliothèque dans le projet principal:

Référence du projet de bibliothèque dans le projet principal

1voto

Brennan Points 4532

0voto

Ben G Points 2106

Dans mon cas, la seule façon dont je pourrais avoir cette construction de frère est en ajoutant manuellement le chemin "../MyLibProject/build/Debug-iphoneos" (vérification récursive pour en être sûr) dans mes Paramètres de construction -> Chemins de recherche de bibliothèque. L'ajout du fichier .a dans le projet principal seul n'a pas empêché l'erreur "lib introuvable" au moment du lien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X