41 votes

Bibliothèques statiques dans Xcode 4

(Ma question a été posée ici avant, mais avec pas de de travail les réponses que je peux voir. E. g. Xcode4 espace de travail avec la bibliothèque Statique et de projet de projet de l'application)

Je suis en train d'utiliser une bibliothèque fournie par une 3ème partie. Ils fournissent le projet XCode qui construit une libLibraryName.un fichier. Ils vous recommandons d'ajouter le projet comme un sous-projet pour mon propre, puis ajouter le produit libLibraryName.un fichier de l'ensemble des bibliothèques décrits dans mon projet, les paramètres de "Lien Binaire avec les Bibliothèques".

La bibliothèque n'construire correctement: la .un fichier est généré. Mais le projet montre un rouge libLibraryName.un fichier dans le groupe de Produits. Je n'arrive pas à virer au noir. Et le projet parent dit qu'il ne peut pas trouver LibraryName pour la liaison.

Comme un test, j'ai créé un nouveau projet de bibliothèque statique en utilisant XCode 4-statique du modèle de bibliothèque. Ce projet présente le même comportement - le produit ne se présente jamais "noir", même si l' .un fichier est construit. (Edit: il fait tourner le noir, si vous construisez pour l'appareil, pas de simulateur).

Je sais que XCode 4 lieux intermédiaires et produit des fichiers dans un emplacement partagé par défaut. J'ai essayé ce paramètre, et j'ai modifié le paramètre de placer le produit des fichiers dans les dossiers décrits dans les paramètres de construction. Ni travaux.

Les gens ont également suggéré la construction d'un dispositif plutôt qu'un simulateur. J'ai essayé en vain.

Ce qui donne? Comment puis-je obtenir un projet de bibliothèque statique pour reconnaître où il construit le produit, et par la suite de référence de ce produit dans un autre projet?

55voto

TomSwift Points 22012

Beaucoup de cerceau de saut d'obstacles, mais voici mes notes maintenant que je l'ai eu à travailler.

  • Si vous créez un nouveau stock XCode4 iOS "Cocoa Touch Bibliothèque Statique" du projet (et ajouter un peu de code) le projet permettra de renforcer la fine hors de la boîte. Mais le Produit de fichier libLibraryName.un seul devient noir (du rouge, indiquant que le fichier n'existe pas) quand vous faites un dispositif de construire. Un simulateur de construire ne montre pas que la cible a été construit, alors qu'en fait il était.

  • Dans le projet cible l'accumulation de paramètres, le "Par-Configuration de Construire des Produits de" Chemin par défaut est $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) Si vous le changer en autre chose (ou si vous avez mis à niveau le projet de XCode3.x qui est utilisé $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)$(IPHONEOS_DEPLOYMENT_TARGET) comme valeur par défaut, je crois), alors le Produit de fichier libLibraryName.une coutume de tourner en noir. Pour moi, cela dit il y a un bug dans XCode quelque part.

  • Je ne peux vivre sans le fichier Produit devient noir après un build (c'est un bon indicateur, mais bon, peu importe.) Mais je n'ai besoin de mon projet consommateur pour être en mesure de trouver la bonne version de la bibliothèque, que ce soit pour simulateur ou d'un périphérique. Dans un monde idéal, il y aurait un seul .un fichier i386/arm6/bits arm7, mais encore une fois, ce n'est pas ma bibliothèque / bibliothèque de projet.

  • Le XCode4 Guide de Transition est ce que m'a montré la lumière. Il prévoit la création d'un espace de travail qui héberge à la fois des projets, et ils seront à la fois de construire dans le même répertoire build. Je n'étais pas à l'aide d'un espace de travail précédemment, j'ai donc utilisé le Fichier/Enregistrer en tant Qu'espace de travail de commande pour créer le nouveau fichier d'espace de travail. Ensuite, j'ai ajouté de la bibliothèque de projet, en prenant soin de s'assurer qu'il a été placé comme un pair pour mon projet principal et non comme un enfant.

  • Je devais m'assurer que l'espace de travail a été configuré la sortie de la construction dans un dossier commun. Dans l'espace de travail Paramètres de la boîte de dialogue, définissez l'Emplacement de génération réglage à "Lieu de Construire des Produits Dérivés de l'Emplacement des Données"

  • J'ai également eu à faire assurez-vous de cocher la case "partagé" case à cocher pour chaque projet dans la gestion des Régimes de dialogue.

  • Enfin, pour spécifier la bibliothèque de dépendance pour mon projet, j'ai simplement la cible Phases de construction de l'onglet, Lien Binaires avec la section des Bibliothèques, et cliqué sur le"+", puis choisi l' libLibraryName.un fichier de sous le dossier Workspace. Remarque que j'avais essayé cela avant, quand il n'y avait pas d'espace de travail et pas commun construire dir, et le résultat a été que XCode ne pouvais pas trouver la .un fichier au cours de lien.

Tous dit et fait, il fonctionne comme un charme. Je ne peux pas aider mais pense qu'il devrait être beaucoup plus facile que je crois que c'était dans XCode3.

Je serais heureux de lire à propos de quelqu'un d'autre expérience avec tout cela, ou tous les commentaires sur d'autres (plus simple?) façons de faire la liaison bibliothèques statiques fonctionnent bien.

6voto

Halle Points 2586

Découvrez ma réponse ici et de voir si elle vous aide à:

Lier une bibliothèque statique pour un iOS de projet dans XCode 4

Elles sont basées sur mes instructions pour ma propre bibliothèque. Je pense que l'étape manquante dans votre processus original, c'est que vous n'ajoutez pas de bibliothèque statique pour votre projet d'application en tant que cible de la dépendance (à l'étape 3 de mes instructions) en même temps que vous le lien dans "Lien Binaire avec les Bibliothèques". Vous pourriez aussi avoir à faire l'étape #5 en fonction de la façon dont les en-têtes sont liés par le projet de bibliothèque statique.

Quand je fais ce processus avec mes propres applications qui ont des références de projet à la bibliothèque statique projets, il a fait un pas moins que le processus équivalent dans Xcode 3.

3voto

Eonil Points 19404

Prendre un coup d'oeil de ma solution de note et Ouvrir Radar à l'entrée.

La couleur rouge produit nœud est un bug de Xcode. Vous pouvez le faire fonctionner en changeant SDKROOT sur le Projet de paramètre de construction. Objectif construire des paramètres de ne pas travailler pour l'IDE d'affichage et de soutien.

Modifier

Référence pour plus tard.

Actuellement, mon avis est modifié à l'Xcode projet n'est pas complètement en mesure de traiter avec de multiples plates-formes. Bien qu'il peut afficher de multiples plates-formes , mais une seule plate-forme peut être choisi à la fois à l'écran par l' SDKROOT réglage. Si vous sélectionnez iOS, il va utiliser quelque chose comme Debug-iphoneos pour la construction de chemin d'accès. Donc, tous les Mac OS X cibles seront manquantes. Si vous choisissez Mac OS X, il va utiliser quelque chose comme Debug. Donc, tous les iOS cibles les produits seront manquantes.

Je pense que Xcode ont encore des bug interne liée. Il est long le temps d'aller faire Xcode pour être stabilisé.

2voto

Diego Marafetti Points 341

J'ai eu le même problème avec mon équipe. L'un des développeurs a été souffrant de ce problème, cependant mon xcode a été en mesure de compiler et trouvé l'en-tête correctement. BTW: tous les "Paramètres de construction" ont été correctement configuré (toujours à la recherche de chemins de l'utilisateur, l'utilisateur en-tête de chemins, etc).

J'ai réalisé que son projet était dans un répertoire avec des espaces dans son chemin d'accès (../mon projet/blah.xcodeproj). Changer, Xcode, a été en mesure de trouver les en-têtes de la bibliothèque statique dans le même espace de travail.

Juste être conscient de noms de répertoire. Mes deux cents

1voto

Tim Keating Points 2942

Une clarification de détail (après creuser par le biais de la sortie de la construction jusqu'à ce que j'ai commencé à aller croiser les yeux): si vous êtes à la recherche de votre bibliothèque en-têtes sont exportées Build/Products/Debug et votre projet parent est à la recherche de Build/Products/Debug-iphonesimulator, votre bibliothèque est en cours de construction pour OS X, pas iOS. Vous pouvez changer cela dans les "plates-formes prises en charge" dans les "Architectures" de la section paramètres du projet. OS X semble être le paramètre par défaut si vous créez de vanille en C++ statique lib du projet, afin que cette situation est assez facile à rencontrer.

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