Comstackr, créer ou archiver des problèmes avec Xcode 4 (et ses 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 la mise à niveau de projets à partir d’anciens xcode s).

Cependant, beaucoup de problèmes peuvent être résolus en suivant les mêmes 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 de fichier .ipa
  • Xcode 4 ne parvient pas à comstackr en raison d’erreurs de préprocesseur
  • Xcode 4 ne peut pas trouver les en-têtes
  • Le code Xcode 4 complet ne fonctionne pas
  • Les dépendances de projet ne seront pas compilées
  • L’ajout d’une dépendance entraîne l’un des problèmes ci-dessus

Question originale

Titre: “Fichier de problème lexical ou 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 d’archiver les erreurs 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 de googler a montré que beaucoup de gens ont ce problème mais pas de solution. Tout le monde a une solution ou même un indice.

Mise à jour: les chemins de recherche des en- user header sont définis sur ${BUILT_PRODUCTS_DIR} dans toutes les configurations. Il construit bien en utilisant 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, par conséquent, dans le package .xcdatamodeld . Cependant, les en-têtes sont tous copiés dans le répertoire des en-têtes publiques lors de la création de la bibliothèque.

NB: Les étapes ci-dessous résoudront 90% de vos problèmes d’archives Xcode. Toutefois, à partir des commentaires, il est conseillé de commencer par quitter Xcode . Cela peut vous faire économiser des heures de réglage des réglages.

  1. Vérifiez que les “chemins d’en-tête utilisateur” sont corrects (Ajouter “” aux chemins des espaces, à la fois dans votre projet et dans vos dépendances)
  2. Définissez “Toujours rechercher les chemins d’utilisateur” sur OUI
  3. Créez un appel de groupe “Indexing Headers” dans votre projet et faites glisser les en-têtes vers ce groupe, N’ajoutez à aucune cible lorsque vous y êtes invité. Cela inclut tous les en-têtes de votre fichier .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 configuration “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” sur votre cible à $(LOCAL_APPS_DIR)
  7. Modifiez le paramètre de génération cible “Analyser tous les fichiers sources pour les inclure” à YES. ( lien )
  8. Avec les nouvelles versions de Xcode (> 4.2), vous souhaiterez peut-être lire cette question relative aux espaces de travail.
  9. Supprimer manuellement les fichiers project.xcworkspace de tous les projets référencés

J’ai eu le même problème dans XCode 4: “Problème Lexical ou 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é inclus correctement et indexés dans le projet.

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

J’ai constaté que le problème a disparu lorsque j’ai modifié le paramètre de construction cible “Analyser tous les fichiers sources pour les inclure” de non à oui.

J’ai pu résoudre ce problème sans modifier les parameters de construction en copiant simplement les fichiers .h dans le répertoire du projet dans le Finder. Je ne les ai PAS ajoutées au projet. Le simple fait de les avoir dans le répertoire du système de fichiers du projet semblait être suffisant pour permettre aux liens implicites de Xcode de fonctionner correctement. Plus de détails ici .

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’œil aux frameworks de recherche du framework et j’ai remarqué que j’avais

  • $ (hérité)
  • “$ (SRCROOT)”
  • “$ (SRCROOT) / mon / correct / chemin”

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

Ma solution était de changer mon

 #import "HeaderFile.h" 

à

 #import  

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

Le problème s’est résolu quand j’ai défini

Construire les parameters-> Projet-> Chemins de recherche sur Oui

J’avais les mêmes – 2 cibles dans mon projet ( Project et ProjectTest de GHUnit ). Lorsque mon schéma a été configuré sur Project , l’importation de était un problème de «fichier de problème lexical ou préprocesseur introuvable» . Mais quand j’ai défini comme schéma ProjectTest , tout allait bien. J’ai donc ajouté GHUnitIOS.framework dans Project .

Il semble que vos chemins de recherche d’en-tête ne soient pas correctement configurés dans vos parameters de construction pour le schéma actif. Vérifiez-les et mettez à jour votre question avec le paramètre actuel.

J’ai des problèmes similaires sur le simulateur, mais pas le périphérique et mes champs de recherche dans l’en-tête sont vides (semble être par défaut). Mais changer 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 append votre projet et voir si cela vous aide. Maintenant, j’examine pourquoi.

J’obtenais cette erreur “fichier introuvable” pour un fichier .h particulier dans mon projet. J’ai résolu le problème en supprimant le fichier .h du projet (en sélectionnant “Supprimer les références”) et en le rajoutant.

Ajout de plusieurs variantes: j’ai eu deux instances de foo.m dans la phase de Comstack Source , dont certaines ont provoqué la création de “Header not found” pour foo.h

Une autre chance:

Dans le projet d’espace de travail: regardez dans la cible pour la section Construire les phases. Comme beaucoup de manuels l’indiquent, vous devez avoir une phase de création de fichiers de copie pour copier tous vos en-têtes, iOS Framework ne pouvant pas contenir de fichiers d’en-tête à partager (c’est mon cas).

Choisissez l’option Copier les fichiers comme destination “Répertoire de produits”. Ou un autre répertoire de votre type où les en-têtes résideront.

Cela a fonctionné pour moi. Le répertoire de compilation pour Archive (ou Release) est probablement très différent de celui prévu dans build pour Debug.

Vérifiez également dans vos parameters d’espace de travail votre répertoire de construction.

XD

Pour moi, ce problème s’est produit après avoir ajouté de nouveaux fichiers au projet; un blanc .m et .h dérivé de NSObject. Voici comment je l’ai résolu:

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

Je les ai ensuite rajoutés après et cela a aussi fonctionné.

Certainement un bug dans xCode …