¿Puedes crear un objetivo "superconjunto" en Xcode?
dependencies target (3)
En Xcode, puede crear objetivos que tengan dependencias directas entre sí. Hay una serie de objetivos de creación de productos que pueden ayudar con esto en la categoría Otros al agregar un nuevo objetivo, dependiendo de qué tan simple o complicado sea su configuración. La creación de objetivos específicos para ejecutar pruebas unitarias con una dependencia directa del objetivo principal del proyecto es muy común y está documentada por Apple y en varios blogs.
En su situación, sin embargo, es posible que tenga que realizar muchos ajustes en el nuevo objetivo de prueba de UI, pero una vez que esté configurado, será muy fácil de mantener. Al no conocer su situación exacta, es imposible darle una respuesta paso a paso, pero aquí están las pautas generales (ajuste según su situación):
- Crea la copia de tu objetivo original ya que la mayoría de tus configuraciones serán las mismas.
- Seleccione su nuevo objetivo y abra el inspector (⌘I)
- En Dependencias directas , haga clic en el botón + y seleccione su objetivo principal.
- Configure el nuevo objetivo según lo desee, con documentación adicional / fuente / reglas o lo que sea.
Si prefiere arrastrar y soltar cosas, también puede arrastrar su objetivo original (desde el triángulo de divulgación de Objetivos ) a su nuevo objetivo y configurará automáticamente la dependencia.
Ahora, seleccione su objetivo de prueba como el objetivo activo y siempre se compilará con esas reglas. Además, si agrega / cambia la fuente en el objetivo principal, se reconstruirá adecuadamente al construir su objetivo de prueba ... no es necesario recordar agregar un archivo de origen al objetivo de prueba también. Sugiero tomarse un tiempo para leer los diversos documentos de Xcode y jugar con muchas de las plantillas de destino disponibles ... a largo plazo, realmente ayuda a que el uso del producto sea mucho más eficiente. Hay muchas cosas ingeniosas que se pueden hacer con bastante facilidad en Xcode si sabes cómo, incluso con proyectos muy grandes o complejos.
A los efectos de pruebas unitarias, me gustaría crear un objetivo de proyecto de iPhone en Xcode que incluya todos los archivos de la aplicación de lanzamiento, además de algunos archivos adicionales que contienen código útil para las pruebas de la unidad de IU.
Puedo hacer esto duplicando el objetivo de la aplicación original; sin embargo, el problema con esto es que cada vez que agrego un nuevo archivo fuente al destino de la aplicación, también necesito agregarlo al objetivo UnitTestUI. No es gran cosa, simplemente es un inconveniente recordar siempre agregar archivos a ambos objetivos.
¿Hay alguna forma de configurar una dependencia para que cada archivo agregado al destino de la aplicación original también se agregue automáticamente al objetivo de prueba de la unidad?
No, no hay ¿Hay alguna razón particular por la que desee que cada archivo en su objetivo de prueba de unidad? Esto incluiría main.m y todas las clases que no está probando (como quizás sus clases de vista). De hecho, si main.m se incluye en su Prueba de unidad, ¿cómo funcionaría su prueba de unidad incluso correctamente?
Resolví el problema construyendo la mayor parte de mi aplicación como biblioteca estática, que está vinculada a los objetivos de prueba de la aplicación y la unidad.
Los objetivos en mi proyecto se ven así:
- libMyApp
- compilar archivos .m
- MyApp.app
- libMyApp (dependencia)
- Enlace con la biblioteca: libMyApp.a
- UITest.app
- libMyApp (dependencia)
- Enlace con la biblioteca: libMyApp.a
De esta forma puedo agregar archivos .m
solo al destino "libMyApp" y tenerlos disponibles tanto en la aplicación como en las pruebas, y ni siquiera tienen que volver a compilarse.
El único problema es que la biblioteca estática no parece ser compatible con las categorías de Objective-C, así que aún tengo que agregarlas a cada objetivo por separado.