2011-12-01 10 views
8

Estoy incluyendo una biblioteca de terceros (fuentes) con mi biblioteca estática. Es solo para dispositivo (ya que incluye algunas rutinas de ensamblaje ARM) y no deseo construirlo para el simulador (solo quiero que mi aplicación compile allí para poder probar la GUI).Compilar diferentes archivos para dispositivo/simulador en XCode

  • Crear otro objetivo para el simulador solamente no es una opción ya que mis proyectos hacen referencia a mi biblioteca como una dependencia y sería una pesadilla mantenerla.
  • Agregar #if (TARGET_OS_IPHONE) para esos archivos tampoco es una opción, ya que estos no son mis fuentes originales y me gustaría actualizarlos fácilmente para las actualizaciones (hay más de 200 archivos allí y no los uso para modificar todos ellos)

estoy buscando una forma (similar a #IF (TARGET_OS_IPHONE) en archivos de origen) que funcionará desde el propio IDE (por lo que se puede excluir un archivo del proceso de construcción real basado en mi arquitectura de destino). Lo único que encontré es una opción para excluir/incluir un archivo de un objetivo, pero no para una arquitectura específica.

¿Hay alguna forma de establecer las condiciones de arquitectura para archivos específicos?

+0

¿Qué idioma tiene la interfaz de la biblioteca, Obj-C, C++ o C simple? ¿Y cuántos métodos contiene la interfaz? – Kay

+0

Actualmente tengo varias bibliotecas, la mayoría en C++ y pocas en Obj-C. No se requieren todos para el simulador (todos incluyen procesamiento de audio/video), pero al menos quiero que el proyecto se construya correctamente en el simulador ya que es más rápido probar la IU allí. –

+0

Parece que no hay una solución fácil. Si es posible, intente separar todas las llamadas a la biblioteca en una o más fachadas creadas por fábricas abstractas en función del objetivo. A continuación, utilice objetos simulados para el código x86 – Kay

Respuesta

1

Su mejor opción sería separar la biblioteca de terceros en un nuevo objetivo que la construya como un marco estático. Establézcalo como una dependencia para su proyecto y luego configure el marco estático para que se enlace condicional como lo describe Apple aquí: http://developer.apple.com/library/ios/documentation/Xcode/Conceptual/ios_development_workflow/115-Configuring_Applications/configuring_applications.html#//apple_ref/doc/uid/TP40007959-CH19-SW7

Puede agregar un nuevo objetivo seleccionando el Proyecto en el navegador del proyecto y luego presionando el Agregar destino botón en la parte inferior del panel Editor. Puede configurar una biblioteca estática de Cocoa Touch y luego asignar los archivos .m o .c relevantes para que pertenezcan solo a ese objetivo. A continuación, seleccione el objetivo de su aplicación y agregue el marco estático en la sección "Dependencias de destino" de la pestaña Crear fases.

+0

Esto es exactamente lo que estaba buscando, ¡gracias! –

+0

¿Cuál es el enlace actualizado a este recurso? – Tobias

Cuestiones relacionadas