es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

iOS: error de clase ABC implementada en ambos, se utilizará uno de los dos. No se define cuál se usará.

He integrado mis propios dos frameworks en el proyecto, los cuales utilizan una biblioteca estática común en ambos framework.
Cuando ejecuto el proyecto, arroja el siguiente error para las clases de la biblioteca estática (que es común en ambos frameworks) –

objc[64586]: La clase ABC está implementada en /Users/user/Library/Developer/Xcode/DerivedData/Project-hjicsdlhsejzcqbhbqvjpzsdpbem/Build/Products/Debug-iphonesimulator/SDK1.framework/SDK1 (0x1056c7220) y en /Users/user/Library/Developer/Xcode/DerivedData/Project-hjicsdlhsejzcqbhbqvjpzsdpbem/Build/Products/Debug-iphonesimulator/SDK2.framework/SDK2 (0x102074be0). Se utilizará una de las dos. Cuál se utilizará es indefinido.

Cuando ejecuto la aplicación, solo funciona un framework y el otro no.

¡Gracias de antemano!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que hay una clase llamada “ABC” que se implementa tanto en “SDK1.framework” como en “SDK2.framework”. Dado que ambos frameworks se utilizan en el proyecto y la clase está definida en ambos frameworks, hay un conflicto y no está definido cuál se utilizará.

    Para resolver este problema, puedes cambiar el nombre de la clase en uno de los frameworks para que el nombre sea único, o puedes fusionar los dos frameworks en un solo framework para evitar conflictos. Si no es posible o deseable fusionar los frameworks, puedes utilizar la palabra clave “weak_import” para especificar qué framework se debe utilizar para la clase en conflicto.

    Para usar la palabra clave “weak_import”, agrégala a la definición de la clase en el archivo de encabezado del framework que deseas usar para la clase en conflicto. Por ejemplo, si deseas usar la clase “ABC” de “SDK1.framework”, debes agregar la siguiente línea al archivo de encabezado:

    __attribute__((weak_import)) @interface ABC : NSObject
    

    Al utilizar la palabra clave “weak_import”, la clase se resolverá en tiempo de ejecución y el enlazador elegirá la implementación del framework que especificaste.

    En general, es importante asegurarse de que los nombres de las clases y los símbolos sean únicos en todos los frameworks y bibliotecas utilizados en un proyecto para evitar conflictos y comportamiento no definido.

Comments are closed.