Avertissement Xcode: «Plusieurs commandes de génération pour le fichier de sortie»

494

Je reçois une erreur comme celle-ci:

[WARN] Avertissement: plusieurs commandes de génération pour le fichier de sortie /Developer/B/Be/build/Release-iphonesimulator/BB.app/no.png

[WARN] Avertissement: plusieurs commandes de génération pour le fichier de sortie /Developer/B/Be/build/Release-iphonesimulator/BB.app/d.png

[WARN] Avertissement: plusieurs commandes de génération pour le fichier de sortie /Developer/B/Be/build/Release-iphonesimulator/BB.app/n.png

Mais j'ai vérifié Xcode et je ne vois aucun doublon de ces fichiers. Comme le dit cet article dans les listes de diffusion Apple, il n'y a pas de doublons.

Futur
la source

Réponses:

809

Dans le Navigateur du projet, sélectionnez votre fichier de projet Xcode. Cela vous montrera les paramètres du projet ainsi que les cibles du projet. Regardez dans la phase de construction de "Copy Bundle Resources". Vous devriez trouver les fichiers incriminés dans cette liste deux fois. Supprimez la référence en double.

Xcode se plaint que vous essayez de regrouper deux fois le même fichier avec votre application.

Mark Suman
la source
1
Cela m'arrive quand j'ai supprimé certains actifs du dossier de construction (à l'aide du Finder). Les actifs remplacés par ceux mis à jour avec les mêmes noms et les faisant glisser dans XCode marquant les options "ajouter à la cible". Il semble que XCode se désynchronise en dupliquant ces entrées dans Copy Bundle Resources
brainondev
1
Je voulais ajouter une chose à cela. Si vous vous retrouvez avec une tonne de références en double (comme je l'ai fait), vous pouvez simplement cliquer sur "Valider les paramètres" et il supprimera automatiquement les références en double. Beaucoup plus facile que de les chercher manuellement
Jon Mattingly
1
J'ai eu un problème similaire. Cette réponse était la plus proche. Le fichier <projName> .xcodeproj / project.pbxproj contenait des entrées en double même si le projet n'affichait les fichiers qu'une seule fois. C'était un problème de fusion. l'édition avec vi a fait l'affaire :) Merci de m'avoir pointé dans la bonne direction :)
javatarz
11
Il convient de noter que si vous avez une grande quantité de fichiers dupliqués dans la phase de copie des ressources de l'ensemble, vous pouvez cliquer sur `` Valider les paramètres '' en bas de cette page et XCode vous informera des doublons et les supprimera tous si vous cliquez sur '' Effectuer des modifications ». Enfer beaucoup plus rapide que de les rechercher individuellement.
Yeti42
1
J'ai eu un problème similaire avec les modèles SpriteBuilder lorsque j'ai rajouté le "Published-iOS" au projet. Il s'avère qu'il veut que ce soit une "référence de dossier" et non un groupe, et avait ajouté ce dossier entier dans les "Ressources du bundle de copie". Ainsi, même si la ressource individuelle n'apparaît pas dans cette liste, assurez-vous qu'elle n'est pas ajoutée à partir d'un dossier.
samkass
127

Cela est facilement causé lorsque vous ajoutez des sous-projets basés sur git. Xcode n'est pas assez intelligent pour ignorer le sous-dossier .git même si vous ne pouvez pas le voir à partir du Finder, il sera donc très confus qu'il existe plusieurs fichiers nommés "master" ou "exclude" (fichiers git repo standard). Avec Xcode4, accédez au projet (racine de l'arborescence de gauche), puis cliquez sur la cible de votre application et développez "Copier les ressources du bundle", puis supprimez toutes les références à .git, vous ne devriez pas en avoir besoin dans votre application de toute façon.

slf
la source
43
J'ai tâtonné pendant une seconde, donc cela peut aider quelqu'un: cible de l'application -> phases de construction -> copie des ressources de l'ensemble
jaime
2
J'avais plusieurs fichiers avec le même nom (mais dans des répertoires différents) dans mon projet Xcode. Par accident, l'un des miens avait les deux à l'étape Copier les ressources du bundle, ce qui entraînerait l'écrasement de l'un d'eux dans le bundle d'application résultant. Retirez simplement l'un d'eux.
BastiBen
112

En fait, la réponse à cette question est assez simple.

Dans votre projet Xcode, recherchez les fichiers qui déclenchent l'avertissement et supprimez simplement l'un d'entre eux.

Xcode n'affichera qu'une seule référence de ce fichier dans les résultats de la recherche, mais ne vous arrêtez pas là, allez-y et supprimez-le. (il est préférable de faire une sauvegarde de votre fichier de projet avant de le supprimer)

Maintenant, reconstruisez le projet. L'avertissement devrait disparaître maintenant. (cette réponse concerne une version précédente de xcode)

Futur
la source
Mais les fichiers n'apparaissent plus dans le volet des groupes et des fichiers de XCode. Quel est le problème avec ça?
Tejaswi Yerukalapudi
1
Si vous continuez à avoir des problèmes avec cela, supprimez simplement tous les fichiers de Xcode (ne les supprimez pas sur le disque). Faites-les ensuite glisser à nouveau. Si vous avez encore des problèmes après cela, vous disposez en fait de ressources portant le même nom (peut-être dans des dossiers différents) - recherchez et renommez / supprimez. La sortie Xcode est placée dans un dossier plat, la structure du répertoire est donc ignorée.
n13
52

Ce n'est pas un bogue Xcode, bien que le message d'avertissement ne soit pas suffisamment utile pour décrire la cause réelle.

Ce message d'erreur se produit lorsque vous avez plusieurs fichiers dans votre projet qui portent le même nom. Vous n'avez qu'à supprimer ou renommer les fichiers avec des noms en double et le problème est résolu.

aimacworx
la source
1
Oui, c'est la bonne réponse. Et la situation peut facilement arriver lorsque vous avez des fichiers de ressources, par exemple des pngs avec le même nom mais dans des répertoires distincts sur votre système de fichiers - pendant le processus de construction, ils sont tous copiés dans 1 répertoire, à savoir le bundle d'application.
Brynjar
@Brynjar existe-t-il une solution pour autoriser les images du même nom? ou pour empêcher les images de se regrouper?
Andy
En fait, j'ai compris que vous pouvez créer des références de dossier pour éviter le regroupement.
Andy
Voici un moyen de trouver des fichiers avec un nom en double, quel que soit le répertoire, find . | grep -v \.git | rev | cut -d/ -f1 | rev | sort | uniq -c | sortmais cela n'a pas résolu mon problème
William Entriken
26

Cela se produit si vous avez 2 fichiers portant le même nom dans le projet. Même si les fichiers sont en groupes dans XCode lorsque le projet est compilé, tous les fichiers se retrouvent dans le même répertoire. En d'autres termes, si vous avez /group1/image.jpg et /group2/image.jpg, le projet compilé n'aura qu'un seul des deux fichiers image.jpg.

respectTheCode
la source
17

Comme mentionné précédemment, ce problème peut être constaté si vous avez plusieurs fichiers avec le même nom, mais dans différents groupes (dossiers jaunes) dans le navigateur de projet. Dans mon cas, c'était intentionnel car j'avais plusieurs sous-répertoires chacun avec un "preview.jpg" que je voulais copier dans le bundle d'application:

références de groupe

Dans cette situation, vous devez vous assurer que Xcode reconnaît la référence du répertoire (icône de dossier bleue), pas seulement les groupes.

Supprimez les fichiers incriminés et choisissez "Supprimer la référence" (afin de ne pas les supprimer entièrement):

supprimer les références de groupe


Ajoutez-les de nouveau au projet en les faisant glisser dans le navigateur de projet. Dans la boîte de dialogue qui apparaît, choisissez "Créer des références de dossier pour tous les dossiers ajoutés":

ajouter en tant que références de dossier


Notez que les fichiers ont maintenant une icône de dossier bleue dans le navigateur de projet:

références de dossier


Si vous regardez maintenant sous la section "Copier les ressources de l'ensemble" des phases de construction de la cible, vous remarquerez qu'il existe une seule entrée pour le dossier entier, plutôt que des entrées pour chaque élément contenu dans le répertoire. Le compilateur ne se plaindra pas de plusieurs commandes de génération pour ces fichiers.

Stuart
la source
15

Ce n'est pas un bug. Les assistances Xcode peuvent vous aider. Sélectionnez la cible, à gauche dans le Navigateur du projet. Cliquez sur "Valider les paramètres" en bas des paramètres. Xcode vérifiera les paramètres et supprimera les doublons si possible.

Gunther
la source
14

une autre version de cette situation peut se produire lorsqu'il y a des doublons dans les en- têtes phase de génération des .

pour résoudre ce problème ...

  1. allez à la cible de votre projet
  2. choisir Build Phases
  3. choisir la Headers phase de construction
  4. entrez le nom indiqué dans l'avertissement
  5. remarquez les deux (ou plus) éléments
  6. trouver les +|-cases dans le coin inférieur gauche
  7. sélectionnez l'un des éléments et cliquez sur le -bouton
john.k.doe
la source
7

Dans mon cas, le problème était dû au même nom de cible et de dossier dans un groupe.

Renommez simplement le fichier ou le dossier en conflit pour résoudre le problème.

Dmitry
la source
6

J'ai trouvé une solution assez simple pour cela:

  1. Sélectionnez le fichier à l'origine du problème dans le navigateur de projet
  2. Décochez l'appartenance cible de l'inspecteur de fichiers
  3. Construire le projet
  4. Vérifiez à nouveau l'appartenance cible pour le fichier

L'avertissement est parti! Vérifiez cette image pour référence.

entrez la description de l'image ici

Mahmoud Fayez
la source
5

Je suis presque sûr que cela peut être causé par un bogue XCode 4, au moins dans les cas où je l'ai rencontré.

Cela se produit si vous ajoutez plusieurs fichiers dépendants de la langue au projet en même temps. J'ai découvert cela en regardant à travers les différences git. Je n'ai rien fait dans le commit mais j'ai ajouté de nouveaux fichiers nib localisés. Mais en regardant la différence du fichier project.pbxproj, il a montré un tas de nouvelles références en double ajoutées pour les fichiers qui étaient déjà dans le projet auparavant. Les fichiers qu'il a fait cela aussi m'ont semblé aléatoires.

J'ai reproduit ce même comportement exact plusieurs fois.

La suppression de ces fichiers du projet ne résout pas le problème car elle supprime uniquement la référence d'origine et laisse les doublons. La seule façon de le corriger est de revenir en arrière et de recommencer, ou de modifier manuellement le fichier de projet, ce qui est un très bon moyen de le visser encore plus car il est difficile de dire quels doublons supprimer et vous devez le faire dans une tonne d'endroits différents.

Xcode 4 est juste une énorme déception pour moi.

Steve
la source
Il semble que cela soit corrigé dans XCode 4.2. Dans les versions antérieures, vous pouvez éviter ce bogue en plaçant d'abord le fichier pour lequel vous êtes sur le point d'ajouter des localisations dans son propre "groupe" (dossier virtuel dans le projet). Une fois que vous avez terminé d'ajouter des localisations, vous pouvez le remettre où il était et supprimer le groupe temporaire que vous avez créé.
Steve
Ce n'est pas un bug. Cela est dû à la présence de plusieurs fichiers portant le même nom dans votre projet.
Todd Hopkinson
1
Lorsque vous localisez un fichier, vous êtes censé avoir le même nom de fichier pour chaque localisation, sauf dans des répertoires différents. C'était en effet un bug.
Steve
4

Cela se produit car ur "no.png" "d.png" et "n.png" sont dupliqués dans les ressources. Recherchez simplement supprimer les fichiers dupliqués et supprimez.

user944031
la source
3

L'erreur semble apparaître lorsque vous avez plusieurs références du même fichier. J'avais 2 fichiers du même nom et j'ai eu cette erreur. Lorsque je supprime l'un d'eux, l'erreur disparaît ..

hilla
la source
2

Encore une autre variation sur cette question. J'ai eu le même message, aucune des solutions suggérées précédemment n'a résolu le problème (je n'ai certainement eu qu'une seule copie du fichier incriminé par exemple).

Ma solution a été d'éditer le fichier project.pbxproj dans un éditeur de texte (après avoir quitté XCode et sauvegardé le fichier bien sûr) et supprimer toutes les références au fichier incriminé. Ensuite, après avoir redémarré XCode, j'ai rajouté manuellement le fichier dans le projet et tout allait bien.

(Je soupçonne que ce problème m'est arrivé à cause d'un manuel, c'est-à-dire: non-XCode, fusion du fichier de projet.)

orlanthi
la source
1

Ouvrez le dossier Frameworks dans votre projet et assurez-vous qu'il n'y a que des cadres à l'intérieur. J'ai ajouté par erreur l'intégralité du dossier développeur!

rjobidon
la source
1

J'ai eu le même problème il y a quelques minutes. J'ai mentionné que la modification de la «cible de déploiement» a résolu mon problème.

Martijn Mellens
la source
1

Pour moi, Target> Build Settings> Packaging> Product Name a été défini sur la même chose qu'une autre valeur référencée dans un fichier .plist personnalisé pour mon application. Finalement, en raison de notre processus de construction, cela crée des fichiers en double.

Le pois rouge
la source
1
C'était le problème pour moi, merci!
Léon
0

Swift 3 : (mais aussi les anciennes versions) cela arrive quand j'ai des actifs avec des doublons. Renommez simplement les fichiers avec ce problème et tout se passe bien.

Cela peut arriver aussi lorsque vous avez fait un Assets.xcassetset que vous avez renommé les doublons avec de nouveaux noms, donc après le temps, vous l'avez oublié et supprimez-le pour ajouter les références de dossier, mais celui-ci revient au problème des fichiers en double.

Alessandro Ornano
la source
0

Un moyen simple est,

  • Accéder à la cible de l'application
  • Aller aux phases de construction
  • Fichiers de sortie
  • Supprimez le chemin des fichiers sortis, puis générez le projet. Il fonctionnera avec succès.
Rajesh Maurya
la source
0

La clé était de faire pod deintegrateet de rm *.workspacedéposer! Quelle perte de temps !

Renetik
la source
0

Utilisateurs React-Native. fichier goto -> paramètres de l'espace de travail -> système de construction -> changez-le en système de construction hérité. et il devrait bien se construire maintenant. React-Native n'est pas encore compatible avec le nouveau système de fichiers.

iwasidiotic
la source
0

Commentant use_frameworks! dans PodFile a fonctionné pour moi.

#use_frameworks!

Remarque: a fait cela sur XCode 10.1, pod version 1.8.4

Vishwas Singh
la source
-1

Bien que je sois sûr qu'il y a une meilleure façon, nuking ne m'a pris que moins de 60 secondes, et c'est la seule chose que j'ai pu trouver qui a fonctionné.

  1. Faites glisser le référentiel vers la corbeille.
  2. re-clonez votre repo.
  3. configurez votre repo avec un suivi à distance correct. git remote add <url.git>, ougit remote set-url <url.git>
ScottyBlades
la source