wake-up-neo.com

Klasse ist in beiden implementiert. Einer der beiden wird verwendet

Ich habe ein Projekt mit einer Abhängigkeit (über CocoaPods installiert), das SocketRocket verwendet, und ich habe eine statische Bibliothek von HeapAnalytics importiert. Anscheinend verwendet die HeapAnalytics-Bibliothek bereits SocketRocket. Ich erhalte beim Kompilieren keine Fehler, erhalte aber zur Laufzeit folgende Meldungen:

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

Ich bin nicht sicher, wie ich damit umgehen soll, da die meisten Lösungen, die ich gesehen habe, erfordern, dass Sie die statische Bibliothek selbst kompilieren, Klassennamen und dergleichen ändern, und ich keinen Zugriff auf die Quelle habe.

Irgendwelche Empfehlungen?

36
MrGrinst

Ich habe diese Fehlermeldung geschrieben! •

Ändern Sie entweder den Klassennamen oder stellen Sie keine Verknüpfung zu dieser Bibliothek her.

Wie ist Ihr Projekt konfiguriert? Gibt es irgendwo, wo Sie explizit gegen SR verlinken? Oder ist es ein Produkt der Verknüpfung zweier statischer Bibliotheken, die beide bereits SR enthalten?

Wenn dies der Fall ist, beenden Sie die direkte Verknüpfung mit SR und erben Sie einfach die Version, die mit der Bibliothek geliefert wurde, die sie bereits verwendet (Warnung: Stellen Sie sicher, dass sie die richtige Version hat).

In letzterem Fall müssen Sie eine der Bibliotheken ändern.

• Eigentlich habe ich den Fehler geändert. Früher bedeutete das, dass das eine oder andere benutzt wurde. Aber das war nicht wirklich so und das Verhalten war auf verschiedenen Plattformen unterschiedlich. Daher wurde es dahingehend geändert, dass es viel genauer identifizierte, dass das Verhalten undefiniert war.

47
bbum

Überblick:

Der Fehler deutet darauf hin, dass dasselbe Symbol/dieselbe Klasse zweimal definiert wurde.

Lösung:

  • Überprüfen Sie die verknüpften Frameworks, um festzustellen, ob Duplikate vorhanden sind. Wenn ja, entfernen Sie das Duplikat
  • Bereinigen Sie den Build-Ordner (Befehl + Umschalt + K)
  • Wenn dies der Fall ist, setzen Sie den Simulator zurück und versuchen Sie es erneut
  • Wenn dies der Fall ist, starten Sie das Gerät neu und versuchen Sie es erneut

Meine Erfahrung:

Ich war zweimal mit demselben Problem konfrontiert, einmal waren es doppelte Frameworks und das andere Mal half das Zurücksetzen des Simulators.

2
user1046037

In meinem Fall ist dieser Fehler aufgetreten, als ich meinem Haupt-App-Ziel und meinem Test-Ziel unnötigerweise eine Quelldatei hinzugefügt habe:

Target Membership with both targets selected

Entfernen des Testziels aus Target Membership Ich habe es gelöst:

Target Membership with only one target selected

2
Goodsquirrel

Ich hatte diese Warnung seit mehr als einem Monat, dann habe ich es endlich versucht und es hat bei mir funktioniert:

  1. Zurücksetzen der Simulator (Menü: Hardware -> Alle Inhalte und Einstellungen löschen ...)
  2. Bereinigen das Projekt (Befehl + Umschalt + K)
  3. Bereinigen das Erstellungsordner (Befehl + Wahl + Umschalt + K)
  4. Ausführen den Code auf dem Simulator erneut
1
LukeSideWalker