ios objective-c objective-c-runtime socketrocket

ios - La clase se implementa en ambos. Uno de los dos será usado



objective-c objective-c-runtime (4)

Visión de conjunto:

El error sugiere que el mismo símbolo / clase se define dos veces.

Solución:

  • Verifique los marcos vinculados para ver si hay duplicados. Si es así, elimina el duplicado
  • Limpiar la carpeta de compilación (Command + Shift + K)
  • Si es un simulador, reinicia el simulador y prueba
  • Si el dispositivo, reinicia el dispositivo y prueba

Mi experiencia:

Me enfrenté al mismo problema dos veces, una vez que se trataba de marcos duplicados y otro simulador de restablecimiento de tiempo.

Tengo un proyecto que tiene una dependencia (instalada a través de CocoaPods) usando SocketRocket y he importado una biblioteca estática de HeapAnalytics. Aparentemente, la biblioteca HeapAnalytics ya usa SocketRocket. No obtengo errores al compilar, pero en tiempo de ejecución recibo lo siguiente:

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

No estoy seguro de cómo manejarlo porque la mayoría de las soluciones que he visto requieren la compilación de la biblioteca estática usted mismo cambia los nombres de clase y tal, y no tengo acceso a la fuente.

¿Alguna recomendación?


¡Escribí ese mensaje de error!

Cambie el nombre de la clase o no enlace en contra de dicha biblioteca.

¿Cómo se configura su proyecto? ¿Hay algún lugar donde explícitamente enlaces contra SR? ¿O es producto de vincular dos bibliotecas estáticas que ya incluyen SR?

Si es lo primero, deje de vincular directamente con SR y simplemente herede la versión que vino con la biblioteca que ya la está utilizando (advertencia: asegúrese de que tenga la versión correcta).

Si es este último, entonces tendrá que modificar una de las bibliotecas.

• En realidad, modifiqué el error. Solía ​​implicar que uno u otro sería utilizado. Pero eso no era realmente lo que estaba pasando y el comportamiento era diferente en diferentes plataformas. Por lo tanto, se cambió para que fuera mucho más preciso al identificar que el comportamiento no estaba definido.


En mi caso, este error apareció cuando innecesariamente agregué un archivo fuente a mi objetivo principal de la aplicación y a mi objetivo de prueba:

Eliminar el objetivo de prueba de Target Membership resolvió:


Tuve esta advertencia durante más de un mes, luego finalmente probé esto y funcionó para mí:

  1. Restablezca el simulador (Menú: Hardware -> Borrar todo el contenido y la configuración ...)
  2. Limpiar el proyecto (Command + Shift + K)
  3. Limpie la carpeta de compilación (Comando + Opción + Mayús + K)
  4. Ejecuta el código en el simulador de nuevo