web-dev-qa-db-fra.com

Erreur de compilation Xcode / Swift 'nom de fichier utilisé deux fois'

Je suis nouveau sur Swift et je me bats avec une erreur après avoir (éventuellement) correctement installé un framework tiers via CocoaPods.

L'erreur est la suivante.

<unknown>:0: error: filename "MainController.Swift" used twice: '/Users/myname/Desktop/ProjectName/ProjectName/Controllers/MainController.Swift' and '/Users/myname/Desktop/ProjectName/ProjectName/Controllers/MainController.Swift'
<unknown>:0: note: filenames are used to distinguish private declarations with the same name
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1

Pour autant que je puisse me renseigner sur d'autres forums et il semble évident que je dois supprimer l'un des fichiers utilisés deux fois. Cependant, je ne vois pas où ils seraient installés deux fois. Si je supprime le fichier du dossier/Controllers, l'erreur devient `` fichier introuvable '', etc.

Ma question est donc de savoir où se trouvent ces fichiers en conflit et comment puis-je supprimer l'un d'eux en toute sécurité? Ou est-ce plus qu'il n'y a qu'un seul fichier mais qu'il est utilisé deux fois - dans ce cas, comment puis-je arrêter cela?

Merci beaucoup.


Ok, je pense que les commentaires se perdent, alors je clarifie ici pour voir si peut déclencher une réponse car il n'a pas été en mesure de générer et d'exécuter cela depuis hier.

Je n'ai maintenant que les fichiers Swift dans le dossier Pods-> Pods/MainController.

Lorsque je crée, j'obtiens un fichier introuvable. Cependant, le fichier qu'il recherche se trouve dans le dossier App-> Controllers, d'où je l'ai supprimé. Si je mets le fichier là-dedans, j'obtiens l'erreur "utilisé deux fois".

Alors, comment puis-je l'empêcher d'essayer de trouver le fichier dans les contrôleurs et de le rechercher dans les pods?

Merci

37
RobertyBob

Essayez de rechercher, si vous avez ajouté le même ViewController - MainController.Swift deux fois.

Sinon, recherchez class MainController dans la base de code.

Concernant les Pods, il est préférable d'utiliser tous les Pods comme frameworks,

Essayez donc d'utiliser 'use_frameworks!' dans votre Podfile, puis à partir du terminal, réinstallez les modules "pod install ".

8
Ankit Thakur

Vérifiez que le fichier n'est pas inclus deux fois dans les paramètres "Build Phases" "Compile Sources" de la cible. Cela peut se produire lorsque vous fusionnez project.pbxproj.

146
franck

S'il s'agit de données de base et que Xcode ne génère pas les entités pour vous au moment de la construction (vous les avez créées manuellement vous-même) et que vous rencontrez ce problème, il est probable que vous n'ayez pas vérifié la mise à jour de l'entité dans le .xcdatamodelld fichier. Ce qui se passe, c'est que Xcode créera une classe en double de votre classe existante, puisque vous avez demandé à Xcode de générer l'entité au moment de l'exécution.

Dans l'inspecteur de modèle de données, remplacez "Module" par "Module de produit actuel" et "Codegen" par "Manuel/Aucun".
enter image description here

79
Josh O'Connor

L'idée principale est ... oui, vérifiez les classes en double. Mais dans mon cas, je n'en avais pas. J'avais un gros projet, j'ai ajouté WatchKit, beaucoup de choses et à un moment donné j'ai eu une classe "dupliquée". J'ai supprimé le doublon mais le problème est resté. Pour le réparer, j'ai fait ceci:

  • Tout d'abord, faites une sauvegarde du fichier incriminé dans un dossier en dehors de votre projet.
  • Supprimez le fichier en double et le fichier initial
  • Pour chacune de vos cibles: allez dans Build Phases et supprimez TOUTES les mentions du fichier problématique.
  • Ajoutez à nouveau le fichier à votre projet, et le tour est joué!
11
Josh

Je suis tombé sur ce problème en supprimant le fichier utilisé deux fois de Compiler les sources comme image ci-dessous. Sélectionnez le fichier, puis cliquez sur -. Ensuite, nettoyez et construisez.

enter image description here

9
Kris Roofe

Cela peut être dans votre project.pbxproj lorsque vous effectuez une fusion avec github ou un outil similaire.

Cela peut être corrigé en ouvrant le project.pbxproj dans votre éditeur de texte préféré et en supprimant les déclarations en double.

J'espère que cela résoudra votre problème.

J'ajouterais à la réponse de Josh O'Conners en disant que faire les changements qu'il a recommandés était à l'origine de mon problème. J'ai dû nettoyer le dossier de construction en appuyant sur shift-option-command-k pour terminer le correctif.

3
Craig1481

Pour vérifier si le fichier est inclus dans les sources de compilation deux fois sans faire défiler des centaines de mouches, procédez comme suit:

  • sélectionner un fichier dans Xcode
  • allez à l'inspecteur de fichiers sur le panneau de droite (icône en haut à gauche)
  • décochez et cochez à nouveau la case cible

enter image description here

2

Dans le cas des classes de modèle de données de code. Sélectionnez le modèle de données de code, puis sélectionnez l'entité, modifiez la valeur de 'Codegen' en Manuel/Aucun.

Ça m'aide.

0
Yogendra Singh