web-dev-qa-db-fra.com

Impossible d'ajouter des fichiers binaires incorporés (autres projets) aux dépendances de projet dans XCode

J'ai un espace de travail XCode créé avec XCode 6.0.1. Il comprend 2 bibliothèques (Swift) et une application iOS (Swift) qui dépend de ces 2 bibliothèques. J'avais une configuration stable qui me permettait d'exécuter l'application iOS sur iPhone et sur des simulateurs: Les 2 projets de bibliothèque ont été ajoutés en tant que Binaires incorporés (voir l'image) de l'application.

Maintenant, j'ai XCode 6.1. Récemment, j'ai supprimé le dossier DerivedData dans le dossier ~/Library/Developer/Xcode pendant l'exécution de XCode. Après cela, mon espace de travail ne fonctionnait plus - l'application iOS échouait à se compiler et une erreur de l'éditeur de liens m'indiquait qu'elle ne pouvait pas trouver les projets de la bibliothèque.

J'ai essayé de le résoudre en supprimant les deux bibliothèques de Binaires incorporés du projet d'application - et je ne peux pas les rajouter. Cliquez sur le bouton + sous Fichiers binaires incorporés dans les paramètres du projet pour afficher correctement les projets d'espace de travail, mais la sélection et l'ajout de mon projet de bibliothèque ne les ajoute pas à la liste des Fichiers binaires incorporés . J'ai résolu l'erreur de l'éditeur de liens en créant un nouvel espace de travail. L'application compile mais la façon dont elle relie les bibliothèques est un mystère pour moi: elles ne figurent pas dans la liste Binaires incorporés ou Cadres et bibliothèques liés pas dans le chemin de recherche Frameworks . Il semble qu’il n’y ait aucun lien entre l’application et les bibliothèques dont elle a besoin (et évidemment, lorsqu’elle compile), si ce n’est que les projets de bibliothèques se trouvent dans le même espace de travail.

Pourquoi je ne peux pas ajouter de projets de bibliothèque à Fichiers binaires incorporés ? Est-il normal dans XCode 6.1 que des projets de dépendance soient simplement compilés et intégrés à une application sans être répertoriés ou liés nulle part?

enter image description here

17
Rasto

Ceci est un résumé de ma réponse à la question Xcode n’ajoutera pas “binaire incorporé” après la suppression de “DerivedData”, voir la question originale et la réponse pour plus de contexte et d’informations :

  1. Supprimer tous les projets de structure de l'espace de travail
  2. Effectuez une "construction nette" et/ou supprimez le "DerivedData"
  3. Ajouter le projet dans l'espace de travail
  4. Construisez le projet (éventuellement optionnel)
  5. Dans l'onglet Général de la cible de l'application, cliquez sur le signe + sous "Cadres et bibliothèques liés", sélectionnez le cadre.
  6. Construire et exécuter dans le simulateur (il ne devrait y avoir aucun problème de construction ou d'exécution)
  7. Compilez et exécutez pour le périphérique (cela pourrait provoquer un crash du fait que la structure ne soit pas correctement liée, ignorez ce crash)
  8. Cliquez sur le signe + sous "Fichiers binaires incorporés", sélectionnez le framework. Cela devrait l'ajouter au projet (doublon possible sous "Cadres et bibliothèques liés")
  9. Répéter pour tous les cadres requis
  10. Une fois que la construction et l'exécution (sur le périphérique) sont confirmées, vous pouvez supprimer tout framework dupliqué (et/ou rouge) dans le navigateur de projet ou l'onglet Général cible.
13
rjstelling

Ok, j'ai rencontré le même problème que toi. Après avoir supprimé les données dérivées, je ne pouvais plus relier mes fichiers binaires. Je pense que la raison en est que les données dérivées sont l'endroit où les fichiers binaires sont écrits et liés dans votre projet. 

Ce que j'ai fait pour résoudre a été de choisir mon Framework comme cible de construction. Après l'avoir construite, la cible du Framework est passée du rouge au noir. Je peux voir dans votre capture d'écran qu'il est rouge, ce qui signifie qu'il n'a pas été compilé en binaire et écrit sur le disque. 

Une fois que j'ai fait cela, j'ai pu relier le framework à mon projet car il y avait une référence sur le disque. J'espère que cela t'aides!

5
Hobbes the Tige

Voici comment j'ai résolu le problème:

  1. Construisez le cadre. 

  2. Ouvrez le dossier de construction et faites glisser la structure générée dans le projet d'application (pour qu'il utilise le chemin d'accès à DerivedData).

  3. Ajoutez le cadre à la liste des cadres intégrés.

  4. Dans le Finder, faites une Afficher le contenu sur le fichier xcodeproj de l'application, puis ouvrez project.pbxproj dans votre éditeur de texte préféré.

  5. Recherchez la ligne avec le long chemin DerivedData. Modifiez-le pour qu'il n'y ait pas de nom, le chemin d'accès correspond au nom de la structure et l'arborescence source à BUILT_PRODUCTS_DIR.

Xcode devrait remarquer le changement et la bibliothèque dans le projet d'application sera noire au lieu de rouge et sera maintenant construite et exécutée correctement.

1
Mark Lilback

Nettoyez vos projets et construisez d'abord votre cadre. Par la suite, vous pouvez l'intégrer.

1
NumeroUno

J'ai un problème très similaire et résolu juste hier soir. Décidé de revenir sur ce sujet et de proposer ma solution de contournement, car la solution de rjstelling ci-dessus n'a pas aidé mon cas.

J'ai un espace de travail qui contient deux cadres et une application. L’application utilisait les deux frameworks avec bonheur jusqu’à ce que je sois frappé par un mystérieux compilateur qui décidait d’ajouter une propriété donnant accès à une variable d’instance appelée "cube" d’un type de classe impossible de "_cube" (se plaindre qu'il n'a pas été déclaré alors qu'il travaillait auparavant dans une méthode de définition).

En bref, après un nettoyage, le projet d’espace de travail/application a perdu la trace de la structure intégrée de mon projet iOS 8+. La suppression de la structure intégrée a été la dernière paille de cette ligne de défaillance, ce qui a empêché mon projet de permettre la sélection de structures pour l’incorporation.

Rétablir le projet et l'espace de travail dans une version antérieure ne s'est pas débarrassé du vaudou.

J'ai fini par ajouter les projets de framework à intégrer dans le projet principal de l'application (sous forme de fichiers) et d'introduire des dépendances de cible sur les frameworks.

J'ai ensuite pu ré-intégrer les frameworks et le lien.

En ce qui concerne la chose _cube, je devais spécifier un getter pour la propriété et @synthesize la propriété sous un nom différent. Je n'ai pas d'explication pour celui-ci.

0