it-swarm.com.ru

Класс реализован в обоих. Один из двух будет использован

У меня есть проект, который имеет зависимость (установленную через CocoaPods) с помощью SocketRocket и импортировал статическую библиотеку из HeapAnalytics. Очевидно, библиотека HeapAnalytics уже использует SocketRocket. Я не получаю ошибок при компиляции, но во время выполнения получаю следующее:

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

Я не уверен, как с этим справиться, потому что большинство решений, которые я видел, требуют компиляции статической библиотеки, сами меняют имена классов и тому подобное, и у меня нет доступа к источнику.

Любые рекомендации?

36
MrGrinst

Я написал это сообщение об ошибке! •

Либо измените имя класса, либо не связывайтесь с указанной библиотекой.

Как настроен ваш проект? Есть ли где-нибудь, где вы явно ссылаетесь на SR? Или это продукт связывания двух статических библиотек, которые уже содержат SR?

Если первое, прекратите связывание с SR напрямую и просто унаследуйте версию, поставляемую с библиотекой, уже использующей ее (предупреждение: убедитесь, что она имеет правильную версию).

Если последнее, то вам придется изменить одну из библиотек.

• На самом деле, я изменил ошибку. Раньше подразумевалось, что один или другой будет использоваться. Но это не совсем то, что происходило, и поведение на разных платформах было разным. Таким образом, он был изменен так, чтобы было гораздо точнее определить, что поведение не определено.

47
bbum

Обзор:

Ошибка предполагает, что один и тот же символ/класс определяется дважды.

Решение:

  • Проверьте связанные рамки, чтобы увидеть, есть ли какие-либо дубликаты. Если так, удалите дубликат
  • Очистить папку сборки (Ctrl + Shift + K)
  • Если симулятор, то перезагрузите симулятор и попробуйте
  • Если устройство, перезагрузите устройство и попробуйте

Мой опыт:

Я сталкивался с одной и той же проблемой дважды: однажды это были дублирующие фреймворки, а другой симулятор сброса времени помог.

2
user1046037

В моем случае эта ошибка возникала, когда я без необходимости добавлял исходный файл как к основной цели приложения, так и к цели тестирования:

Target Membership with both targets selected

Удаление цели теста из Target Membership решил это:

Target Membership with only one target selected

2
Goodsquirrel

У меня было это предупреждение больше месяца, затем я наконец попробовал это, и это сработало для меня:

  1. Сброс the симулятор (Меню: Оборудование -> Удалить все содержимое и настройки ...)
  2. Очистить проект (Command + Shift + K)
  3. Очиститьсборка папки (Command + Option + Shift + K)
  4. Выполнить код на симуляторе снова
1
LukeSideWalker