web-dev-qa-db-fra.com

Compiler, compiler ou archiver des problèmes avec Xcode 4 (et dépendances)

Cette question a évolué au cours des dernières semaines pour couvrir des problèmes plus généraux liés à xcode4 (et aux projets de mise à niveau plus anciens (xcode s).

Cependant, bon nombre des problèmes peuvent être résolus en suivant le même ensemble d'instructions.

Si vous rencontrez l'un des problèmes suivants, essayez les méthodes de la réponse acceptée:

  • Xcode 4 ne parvient pas à archiver une application
  • Xcode 4 crée une archive inutilisable
  • Xcode 4 ne crée pas un .ipa
  • Echec de la compilation de Xcode 4 en raison d'erreurs du préprocesseur
  • Xcode 4 ne peut pas trouver les en-têtes
  • Le code complet de Xcode 4 ne fonctionne pas
  • Les dépendances du projet ne seront pas compilées
  • L'ajout d'une dépendance pose l'un des problèmes ci-dessus.

Question originale

Titre: "Fichier de problème lexical ou de préprocesseur introuvable" dans Xcode 4

J'ai un projet dans Xcode 4 qui va bien se construire et s'exécuter sur le périphérique et le simulateur, mais lorsque vous essayez de l'archiver, des erreurs se produisent lors de la recherche de fichiers d'en-tête associés à une bibliothèque statique:

In file included from /Volumes/Development/Path/LBProject/LBProject/LBProject-Prefix.pch:15:
In file included from /Volumes/Development/Path/LBProject/LBFDefines.h:23:
In file included from /Volumes/Development/Path/LBProject/Classes/LBProjectAppDelegate.h:11:
In file included from /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDirectoryManager.h:10:
/Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDataModel.h:11:9: fatal error: 'Merchant.h' file not found [1]
 #import "Merchant.h"
         ^
1 error generated. 

Xcode donne l'erreur

lexical or preprocessor issue file not found 

Beaucoup Google a montré que beaucoup de gens avaient ce problème mais pas de solution. Tout le monde a un correctif ou même un indice.

Mise à jour: Le user header les chemins de recherche sont définis sur ${BUILT_PRODUCTS_DIR} dans toutes les configurations. Il se construit bien avec n’importe quelle configuration, sauf lors de l’archivage.

Mise à jour 2: Merchant.h est une classe de données de base générée automatiquement et donc à l'intérieur de .xcdatamodeld package, toutefois, les en-têtes sont tous copiés dans le répertoire des en-têtes publics lors de la construction de la bibliothèque.

96
rjstelling

NB: Les étapes ci-dessous résoudront 90% des problèmes d’archivage de votre Xcode. Toutefois, à partir des commentaires, nous vous suggérons d’essayer d’abord de quitter Xcode . Cela peut vous faire économiser des heures de mise au point.

  1. Vérifiez que les "chemins d’en-tête de l’utilisateur" sont corrects (ajoutez "" aux chemins pour les espaces, à la fois dans votre projet et dans les dépendances)
  2. Définissez "Toujours rechercher les chemins d'utilisateur" sur OUI
  3. Créez un appel de groupe "Indexation des en-têtes" dans votre projet et faites glisser les en-têtes vers ce groupe, NE PAS ajouter à toutes les cibles à l'invite. Cela inclut tous les en-têtes à l'intérieur de votre . Xcdatamodeld, vous devrez cliquer avec le bouton droit de la souris et afficher le contenu du paquet pour les trouver.
  4. Pour toutes les dépendances, définissez le paramètre de construction "Ignorer l'installation" sur "Oui"
  5. Déplacement des en-têtes "publics" dans les phases de construction vers "Projet"
  6. Définissez le paramètre de construction "Répertoire d'installation" de votre cible sur $(LOCAL_APPS_DIR)
  7. Modifiez le paramètre de construction cible "Analyser tous les fichiers source pour les inclus" en YES. ( link )
  8. Avec les nouvelles versions de Xcode (> 4.2), vous voudrez peut-être lire cette question relative aux espaces de travail.
  9. Manuellement , supprimez les fichiers project.xcworkspace de tous les projets référencés.
118
rjstelling

J'ai eu le même problème dans XCode 4: "Problème lexical ou du préprocesseur MyFile.h introuvable". Cependant, MyFile.m n'était pas une bibliothèque statique, mais une classe standard. Et MyFile.m et MyFile.h ont été correctement inclus et indexés dans le projet.

Alors ... j'ai quitté XCode et le simulateur, puis je les ai redémarrés et le problème a disparu.

13
richardsun

J'ai constaté que le problème avait disparu lorsque j'ai modifié le paramètre de construction cible "Analyser tous les fichiers source pour les inclus" de non à oui.

11
doc taco

J'ai pu résoudre ce problème sans modifier aucun des paramètres de construction en copiant simplement les fichiers .h dans le répertoire du projet dans le Finder. Je ne les ai pas du tout ajoutés au projet. Le simple fait de les avoir dans le répertoire du système de fichiers du projet semblait suffisant pour permettre à la liaison implicite de Xcode de fonctionner correctement. Plus de détails ici .

6
David Avendasora

Ma solution était de changer mon

#import "HeaderFile.h"

à

#import <FrameworkName/HeaderFile.h>

et tout a recommencé à fonctionner. Ce qui était inhabituel, c’est qu’il avait cessé de fonctionner soudainement après avoir été construit plusieurs fois.

4
slcott

J'ai eu un problème étrange comme celui-ci. Changer "Analyser tous les fichiers de ressources ..." en Oui n'a pas aidé. J'ai jeté un coup d'oeil aux chemins de recherche de cadre et ai remarqué que j'avais

  • $ (hérité)
  • "$ (SRCROOT)"
  • "$ (SRCROOT)/my/correct/path"

Cela semblait juste mais échouait toujours. J'ai ensuite essayé de réorganiser l'ordre de 2 et 3 et tout d'un coup, tout s'est bien déroulé. Donc, je ne sais pas pourquoi c'était un hickup, mais je voulais l'ajouter à la liste des choses à essayer au cas où cela aiderait quelqu'un d'autre.

4
dizy

Le problème s'est résolu quand j'ai mis

Construire Paramètres-> Projet-> Chemins de recherche à Oui

2
Karolyn

J'ai eu le même - 2 cibles dans mon projet (Project et ProjectTest de GHUnit). Lorsque mon schéma a été configuré pour Project, l'importation de <GHUnitIOS/GHUnit.h> était le problème de "fichier de problème lexical ou de préprocesseur introuvable". Mais quand j'ai défini comme un schéma ProjectTest, tout allait bien. Donc, j'ai ajouté GHUnitIOS.framework dans Projet aussi.

2
goodliving

Je recevais cette erreur "fichier non trouvé" pour un fichier .h particulier dans mon projet. J'ai résolu le problème en supprimant ce fichier .h du projet (en sélectionnant "Supprimer les références") et en le rajoutant.

1
cduhn

On dirait que vos chemins de recherche d'en-tête sont incorrects et non configurés correctement dans vos paramètres de construction pour le schéma actif. Vérifiez-les et mettez à jour votre question avec le paramètre actuel.

1
Joshua Nozzi

Ajout de plus de variante: J'ai eu deux instances de foo.m dans le Compile Source phase de construction, causée par certains "En-tête non trouvé" pour foo.h.

1
freespace

J'ai des problèmes similaires sur le simulateur, mais pas l'appareil et les champs de mon chemin de recherche d'en-tête sont vides (il semble être par défaut). Mais le changement d’espaces de travail semble avoir résolu le problème. Vous pourriez peut-être essayer de créer un nouvel espace de travail, y ajouter votre projet et voir si cela vous aide. Maintenant, je cherche pourquoi.

1
Norman G

Une autre chance:

Dans le projet d'espace de travail: regardez dans la section Cible pour les phases de construction. Comme de nombreux manuels l'indiquent, vous devez disposer d'une phase de création de fichiers pour copier tous vos en-têtes vers un autre emplacement, car iOS Framework ne peut pas contenir de fichiers d'en-tête à partager (c'est mon cas).

Choisissez pour ces options Copier les fichiers comme destination "Répertoire des produits". Ou un autre répertoire de votre comme où les en-têtes résideront.

Cela a fonctionné pour moi. Le répertoire de construction pour Archive (ou version) est probablement très différent de celui attendu dans la construction pour Debug.

Vérifiez également dans les paramètres de votre espace de travail votre répertoire de construction.

XD

1
SyntheticMeshwork

Pour moi, ce problème est survenu après que j'ai ajouté de nouveaux fichiers au projet. un espace vide .m et .h dérivé de NSObject. Voici comment j'ai résolu le problème:

  1. XCode fermé et redémarré
  2. Supprimé les deux nouveaux fichiers via XCode
  3. Recompilé avec succès

Je les ai ensuite rajoutées ensuite et cela a également fonctionné.

Certainement un bug dans xCode ...

0
g-dog