Xcode 4 et imbriqués les projets de l'en — tête des fichiers non trouvés
Je vais avoir une myriade de problèmes avec Xcode 4 et imbriqués les projets qui fonctionne bien sous Xcode 3.2. Voici un très basique, je ne peux pas résoudre:
Je suis en train de construire un cadre de cacao qui a besoin d'un autre cadre de cacao pour qui j'ai de la source. J'ai donc effectuer les étapes habituelles:
- Faites glisser le
.xcodeproj
fichier de cadre dans mon principal projet de cadre - Dans mon cadre principal dans le cadre des OBJECTIFS > MyFramework > Phases de construction > Cible Dépendances: Ajouter la imbriquée cible du projet
- Assurez-vous que les fichiers d'en-tête de la imbriquée cadre public
- Dans Xcode Paramètres > les Emplacements > Construire Emplacement je l'ai mis à Lieu de construire des produits dérivés de l'emplacement des données (recommandé)
- Produits de construction de chemin de de deux objectifs sont fixés à
${BUILT_PRODUCTS_DIR}
et me disent qu'ils sont à la DerivedData/Debug (ou Libération) emplacement - Paramètres de l'Architecture pour les deux cibles sont identiques
Puis j'ai frappé [CMD] + B à construire et il me dit qu'il ne trouve pas les fichiers d'en-tête de la imbriquée cadre. Quand j'ai vérifier les paramètres, en-Tête Utilisateur Chemins de Recherche contenir le chemin d'accès à DerivedData/Debug, et à l'intérieur il est imbriquée cadre cibles avec les fichiers d'en-tête dans Versions/A/en-Têtes,.
Je suis assis ici, quelqu'un à une idée de ce que je fais mal?
Le problème disparaît lors de la construction de Debug lorsque je change la en-tête Utilisateur chemins de recherche à ${BUILT_PRODUCTS_DIR}/MyFramework.framework/Headers
. Toutefois, cela ne fonctionne pas lors de la construction de Distribution, comme les cadres, puis utiliser leur Libération paramètres, qui se termine par un répertoire différent...
Ma solution temporaire est également définir une Distribution configuration imbriquée des projets. De cette façon, les en-têtes sont trouvés et le linker peut lier correctement.
- Trouvé une solution à cela? J'ai ce problème aussi. Uniquement pour les réseaux Ad Hoc, assez étrangement. App Store de la Distribution des œuvres....
- Non, pas encore. N'a pas besoin de soumettre cette application particulière ces derniers temps, donc je n'ai pas été touchée par le problème en un moment.
- Je vois, j'ai maintenant posté ma "réponse". Nous vous souhaitons la chance dans la résolution de votre problème!
Vous devez vous connecter pour publier un commentaire.
Voici ma synthèse des connaissances à ce jour:
Oublier l'ensemble public en-tête de chose avec Xcode, c'est un pain PITA et ne fonctionne pas correctement lors de l'archivage de votre application. Au lieu de cela, ont toutes statique de la bibliothèque de fichiers d'en-tête sur la projet niveau et de dire à votre application où le trouver.
À soulager votre douleur en vous assurant que toutes les cibles ont le même nom pour la configuration de build (c'est à dire ajouter un "ad Hoc" et de "Déploiement" de la configuration pour les bibliothèques statiques).
Dans les paramètres de construction de la, point les en-Tête de Chemins de Recherche (si vous utilisez
#include <file.h>
) ou en-Tête Utilisateur Chemins de Recherche (si vous utilisez#include "file.h"
) dans le répertoire du projet de bibliothèque statique. Si le projet de bibliothèque statique est à l'intérieur de votre répertoire app, utilisez ceci:"$(PROJECT_DIR)"
(récursive activé)Si vous avez un répertoire qui contient a) le projet de bibliothèque statique et b) de votre application, alors cela devrait fonctionner:
"$(PROJECT_DIR)/.."
(récursive activé)Si le sous-module contient des bibliothèques compilées, définissez votre de la Bibliothèque des Chemins de Recherche à:
"$(TARGET_BUILD_DIR)"
Assurez-vous que tous les statiques de projets de bibliothèque que vous utilisez ont Sauter Installer ensemble de
YES
.De nouveau, pas de fichiers d'en-tête (Phases de construction » Copie des en-Têtes) dans l'une des bibliothèques statiques, sinon Xcode ne sera pas en mesure de les archiver une application.
Assurez-vous de dire Xcode quand pour construire les bibliothèques statiques, comme le montre dans ce Tech Doc d'Apple.
Vieille Réponse:
Je n'ai toujours pas trouvé une vraie solution à ce problème avec les bibliothèques statiques. Ce qui fonctionne pour moi est:
$(BUILT_PRODUCTS_DIR)
à l'Utilisateur d'en-Tête des chemins de Recherche pour la demande (avec récursive vérifié) -> il est utilisé lors de l'exécution de l'applicationCela fonctionne, l'application détecte les fichiers d'en-tête et construit lui-même, il finit par en DerivedData//Build/Produits/AdHoc-iphoneos/comme une Application bundle. Suivant ces instructions simples (lien mort) à partir de TestFlightApp.com je peux préparer cette Application en une de l'IAP et de l'envoyer autour de. Il suffit de la sélectionner à Archive l'application à partir de Xcode n'a de nouveau pas trouver les en-têtes, même si ils sont vraiment dans le AdHoc-iphoneos répertoire de construction.
../
, il est seulement nécessaire pour les non-imbriquées projets. Mes projets sont imbriqués et il fonctionne très bien, même pour un projet complexe, à l'aide d'un wrapper cadre autour d'un C-bibliothèque (Redland-ObjC) qui comprend C-les en-têtes. Avez-vous essayé d'Archivage d'une Application avec$(TARGET_BUILD_DIR)
?(Comme de Xcode 5.1)
Lorsque le sous-projet est construit par XCode, le sous-projet de l'en-tête des fichiers sont copiés dans le répertoire de construction. Lors de l'archivage, il semble que cette copie le répertoire de destination n'est pas ajouté à l'en-tête/include chemin de recherche. Vous aurez envie d'aller à vos Paramètres de construction et d'ajouter
à la Tête des Chemins de Recherche" pour le schéma à utiliser pour l'archivage.
Si vous ne savez pas quel système est utilisé pour l'archivage, allez à la Produit -> Système -> Modifier les Schémas et regarder pour l'Archivage dans la colonne de gauche.
Assurez-vous que votre tiers cadre est ajouté en tant que «groupe» de votre projet principal, de sorte que vous pouvez voir dans votre projet de la hiérarchie...
.framework
de laEXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES
paramètre de construction, puis ajoutez le cadre comme vous le dites, maintenant ça fonctionne! Merci!.framework
dansEXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES
! FKN MIRACLE!!!J'ai eu le même problème et j'ai pu résoudre le problème en mettant l'option "Emplacement de Build" pour Placer des produits de construction dans les emplacements indiqués par les cibles"
J'ai eu ce problème: j'ai pu développer à la fois le Débogage et l'App Store configurations, mais pas Ad Hoc. Bâtiment Ad Hoc m'a donné des erreurs parce qu'il ne pouvait pas trouver .h les fichiers nécessaires par des projets.
S'est avéré que j'avais l'expiration d'un provisionnement en attente dans ma configuration. J'ai mis à jour que de provisionnement lien et maintenant je peux à la fois construire Ad Hoc et d'utiliser la fonctionnalité d'Archivage à l'emballage.
M'a pris des heures pour le comprendre! Mon esprit n'a tout simplement pas sauter de disparus .h les fichiers d'erreurs de provisionnement juste par lui-même. =) Il pourrait y avoir eu une erreur ou un avertissement de se plaindre de l'absence de provisionnement, mais si elle est donc bien enterré parmi les centaines de .h les erreurs liées.
Release
construit le répertoire des fichiers pour les bibliothèques statiques lors de la construction de l'applicationAdHoc
. Peut-être que je suis trop exigeant...J'ai eu le même problème avec une Configuration nommé "Ad Hoc" (comme par TestFlight recommandation à http://help.testflightapp.com/customer/portal/articles/402782-how-to-create-an-ipa-xcode-4) et le principal projet n'a pas pu trouver certaines des en-têtes de la imbriquée projets. J'ai renommé le projet "ad Hoc" (sans les espaces) et le problème a disparu; semble espaces peuvent gâcher l'en-tête de la recherche de chemins dans certains cas, bien que je n'ai pas compris les détails de quand qui pourrait se passer et pourquoi.
J'ai eu ce problème avec un imbriquée projet qui a construit une bibliothèque statique. J'ai trouvé ce doc sur les pommes de site qui a complètement sauvé ma vie.
http://developer.apple.com/library/ios/#DOCUMENTATION/Xcode/Conceptual/ios_development_workflow/AA-Developing_a_Static_Library_and_Incorporating_It_in_Your_Application/archiving_an_application_that_uses_a_static_library.html
Je suis tellement content que je n'avais pas à muck autour de avec la dérivée chemins de données.
Pour moi, ce qui s'est passé après un GIT merge, qui a créé de nombreux conflits, l'un d'entre eux liés au fichier de projet. Après la fusion, je suis sûr que la structure du fichier de projet changé.
Ce que j'ai fait était d'aller dans le projet "Build Settings", puis cherchez "Toujours à la Recherche de Chemins de l'Utilisateur" et en la tournant à
Yes
.Je suppose que la fusion a tourné ce booléen à
No
, par conséquent, le projet n'a pas été à la recherche dans les bons endroits pour les fichiers d'en-tête.