Pregunta


Algunos antecedentes: he creado un marco personalizado utilizando la guía de Diney en http://dbin.com/blog/2011/07/universal-framework-iphone-ios-2-0/

Está construido tanto para ARMV6 / ARMV7, es un marco basado en ARC, compilado con un objetivo de despolyamiento de 4.3.

Cuando pongo el marco resultante en un proyecto 5.0, funciona muy bien, pero cuando lo pongo en un proyecto 4.3 (arco o no arco, no importa), obtengo lo siguiente que realmente no puedo entender ...

También he intentado agregar Libarclite. Un manualmente, pero no cambió nada.

ld: símbolo duplicado _objc_etrainedObject en /users/freak4pc/project/myframework.framework/myframework y /develoveloper/platforms/iphonos.platform/developer/usr/lib/arc/libarclite_iphoneos.a(carclite.o) para el comando arquitectura /Platforms/iphonesos.platform/developer/usr/bin/clang falló con el código de salida 1

Agradecería cualquier ayuda en esto.
Gracias
Shai

¿Fue útil?

Solución

Estoy luchando con el mismo problema. La solución es establecer el objetivo de implementación de su marco a iOS5 (verifique si eso no tiene otros problemas).

Entonces tú deber Use ARC en el proyecto maestro si se dirigirá a iOS4, de lo contrario, falta Libarclite. Mi solución será suministrar dos marcos, dependiendo de si usan ARC o no.

Aquí hay dos enlaces al foro de desarrollo de Apple con un poco más de información:https://devforums.apple.com/message/539344#539344

https://devforums.apple.com/message/588316#588316

Actualización: hay una mejor manera. Simplemente construya su biblioteca estática con el objetivo mínimo de iOS5 y agregue manualmente /developer/platforms/iphoneos.platform/developer/usr/lib/arc/libarclite_iphoneos.a (y /developer/usr/lib/arc/libarclite_iphonesimulator.a) si es su proyecto es no Usar ARC y necesita soporte para iOS4.

Actualización 2: en realidad, solo use la bandera de enlace -fobjc -arc; Esto vinculará Libarclite con la biblioteca si aún no está allí. Mejor solución.

Otros consejos

¡Vaya, ese fue un viaje duro pero finalmente lo resolví!

Lo que provocó la idea final fue el comentario de @Steipete, es una situación un poco compleja, así que trataré de explicarla a cualquiera que pueda haber cruzado este problema también.

  1. La compilación de un marco habilitado para ARC en iOS 4.3 se unirá automáticamente a Libarclite. So to "Bridge" 4.3 ARC con 5.0 ARC. Cuando este marco se importó a un proyecto 4.3, Arclite en realidad se vinculó dos veces, una vez para el marco (que es 4.3), y una vez para el proyecto en sí, lo que causó el error de "símbolo duplicado", lo que significa que el marco debe compilarse en 5.0, y el proyecto puede ser 4.3. Pero entonces ;
  2. Mi marco es usar el trabajo de Afnet de @Mattt para realizar solicitudes HTTP y el análisis JSON de diferentes API. AfNetworking verifica automáticamente mientras se compila si su objetivo es iOS5, y si es así, usa NSJSONSerialization, de lo contrario, volvería a cualquier biblioteca JSON importada como JSONKit.
  3. Al compilar mi marco habilitado para el trabajo de Afnet para iOS5 (para evitar el problema n. ° 1), se adjuntaría automáticamente NSJSONSerialization, que causará una excepción en 4.3 proyectos, lo que significa que tendría que buscar manualmente las instrucciones de compilación y eliminar las llamadas a NSJSONSerialization Antes de compilar, por lo que volvería automáticamente a la biblioteca compatible con 4.3 (en mi caso JSONKit). Esa condición de compilación se encuentra en AfhttpClient.m y AfjsonRequestOperation.m (por ejemplo #if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_4_3 || __MAC_OS_X_VERSION_MIN_REQUIRED > __MAC_10_6)
  4. Después de eliminar esas condiciones, compilé con éxito mi marco para iOS5 con JSONKIT en lugar de NSJSonserialization, y pude usarlo con éxito en mi proyecto iOS4.3.

Espero que esto ayude a cualquier otra persona que pueda luchar con esto durante un par de días como yo :)

Shai.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top