web-dev-qa-db-fra.com

La classe est implémentée dans les deux. Un des deux sera utilisé

J'ai un projet qui a une dépendance (installé via CocoaPods) utilisant SocketRocket et j'ai importé une bibliothèque statique de HeapAnalytics. Apparemment, la bibliothèque HeapAnalytics utilise déjà SocketRocket. Je ne reçois aucune erreur lors de la compilation, mais au moment de l'exécution, je reçois les éléments suivants:

Class SRWebSocket is implemented in both [path] and [path].
One of the two will be used. Which one is undefined.

Je ne sais pas comment le gérer car la plupart des solutions que j'ai vues nécessitent de compiler vous-même la bibliothèque statique et de changer les noms de classe, et je n'ai pas accès à la source.

Des recommandations?

36
MrGrinst

J'ai écrit ce message d'erreur! •

Modifiez le nom de la classe ou ne liez pas à ladite bibliothèque.

Comment est configuré votre projet? Y a-t-il un endroit où vous établissez un lien explicite avec SR? Ou est-ce un produit de la liaison avec deux bibliothèques statiques qui incluent déjà toutes les deux SR?

S'il s'agit du premier, alors arrêtez de vous lier directement à SR et héritez simplement de la version fournie avec la bibliothèque qui l'utilise déjà (avertissement: assurez-vous qu'il a la bonne version).

Dans ce dernier cas, vous devrez modifier l'une des bibliothèques.

• En fait, j'ai modifié l'erreur. Cela impliquait que l'un ou l'autre serait utilisé. Mais ce n'était pas vraiment ce qui se passait et le comportement était différent sur différentes plateformes. Ainsi, il a été modifié de sorte qu'il était beaucoup plus précis d'identifier que le comportement n'était pas défini.

47
bbum

Présentation:

L'erreur suggère que le même symbole/classe est défini deux fois.

Solution:

  • Vérifiez les cadres liés pour voir s'il y a des doublons. Si oui, supprimez le doublon
  • Nettoyer le dossier de construction (Commande + Maj + K)
  • Si simulateur, réinitialisez le simulateur et essayez
  • Si l'appareil, redémarrez l'appareil et essayez

Mon expérience:

J'ai rencontré le même problème à deux reprises, une fois qu'il s'agissait de cadres en double et l'autre fois, la réinitialisation du simulateur a aidé.

2
user1046037

Dans mon cas, cette erreur est apparue lorsque j'ai ajouté inutilement un fichier source à la fois à ma cible d'application principale et à ma cible de test:

Target Membership with both targets selected

Suppression de la cible de test de Target Membership résolu:

Target Membership with only one target selected

2
Goodsquirrel

J'ai eu cet avertissement pendant plus d'un mois, puis j'ai finalement essayé cela et cela a fonctionné pour moi:

  1. Réinitialiser le simulateur (Menu: Matériel -> Effacer tout le contenu et les paramètres ...)
  2. Nettoyer le projet (Commande + Maj + K)
  3. Nettoyer le dossier de compilation (Commande + Option + Maj + K)
  4. Exécuter le code sur le simulateur à nouveau
1
LukeSideWalker