Pregunta

Estoy trabajando en una aplicación iOS donde uso bibliotecas de terceros. Quiero migrar mi proyecto para usar ARC, pero las bibliotecas de terceros todavía están utilizando la antigua administración de memoria. Por lo tanto, quiero separar el código de terceros y ponerlo en un proyecto separado sin ARC, y luego de alguna manera enlace ese proyecto en mi proyecto iOS-APP, para que se construyan juntos utilizando la misma configuración.

¿Es esto posible hacer de una manera muy simple, o es mejor desactivar el arco para los archivos individuales? (parece muy tedioso ...)

¿Puedo usar un espacio de trabajo? ¿Dónde un proyecto es mi aplicación iOS y la otra solo contiene código de terceros?

He jugado un poco y busqué mucho en Google, pero simplemente no parece haber una alma simple, ¿o me equivoco?

¿Fue útil?

Solución

Así que lo descubrí yo mismo, con mucha ayuda de diferentes blogs. Algo que este básico debería ser más trivial y bien documentado ... pero aquí vamos, esto es lo que hice para obtener una biblioteca para Asihttprequest:

  1. Crea un nuevo proyecto de iOS. Seleccione la plantilla 'Cocoa Touch Static Library'. Llámalo como quieras. No desea marcar el "Contado de referencia automático", ya que AsihttpRequest no lo admite.
  2. Seleccione una ubicación para su proyecto de biblioteca (importará más adelante).
  3. Elimine el archivo predeterminado .h- y .m creado por xcode.
  4. Arrastre y suelte los archivos asihttprequest en el proyecto
  5. Puede agregar los marcos de los que depende AsihttpRequest, pero de todos modos tendrá que agregarlos a su proyecto principal, por lo que no es necesario.
  6. Intente construir el proyecto, debe hacerlo sin errores.
  7. Abra su proyecto principal
  8. Desde Finder, arrastre su biblioteca .proj-archivo en su proyecto principal (en Xcode, para que 'aterrice' en el archivo principal del proyecto)
  9. El proyecto de la biblioteca ahora debería aparecer en su proyecto principal (todavía en Xcode). Debe ser expandible y también debería poder ver los archivos del proyecto de la biblioteca. Si no es así, intente cerrar todos los proyectos abiertos y vuelva a abrir el proyecto principal.
  10. Seleccione el proyecto principal y seleccione el objetivo. En Fases de compilación: enlace binario con bibliotecas, haga clic en el +-fin.
  11. En la lista de marcos, debe ver su proyecto de biblioteca (llamado algo como libname.a). Seleccione ese archivo
  12. El archivo recién agregado puede aparecer rojo en la lista de marcos, no se preocupe, funciona de todos modos. Supongo que es un error.
  13. Aún bajo el objetivo, vaya a la configuración de construcción
  14. Bajo las rutas de búsqueda de encabezado Agregue la ruta de búsqueda relativa a donde están la biblioteca .h-archivos. Esto es relativo a sus proyectos principales .Proj-File. (Por ejemplo ../SEME FOPERIOR/LIBPROJECT/)
  15. Esperemos que su proyecto principal se desarrolle sin errores y el proyecto de la biblioteca se construirá al mismo tiempo, utilizando la misma configuración que el proyecto principal.

No tengo idea de si este es un buen enfoque o si hay alguna forma más fácil de hacerlo. Sin embargo, me gusta esto, ya que puedo usar el proyecto de la biblioteca en varios proyectos. Y si quiero actualizar el proyecto de la biblioteca, solo tengo que hacerlo en un solo lugar, y los otros proyectos también se actualizarán, ya que todos hacen referencia al mismo proyecto.

Edición1:Tuve algunos problemas con los proyectos de la biblioteca utilizando categorías de objetivos C. recibí selector no reconocido enviado a instancia Errores en tiempo de ejecución al intentar llamar a esos métodos. Este problema se resolvió siguiendo la respuesta dada aquí.

  1. Vaya a la configuración de la configuración del objetivo en el proyecto principal y agregue -objc a la entrada llamada otras banderas de enlace

Edit2:encontré este plantilla para crear marcos universales. No lo he probado, pero supongo que algo como esto también funcionaría.

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