ios objective-c xcode code-coverage

ios - Decenas de "perfiles: etiqueta de arco no válida" cuando se ejecuta la cobertura de código en Xcode 5



objective-c code-coverage (7)

Cuando ejecuto mi objetivo de prueba con cobertura de código habilitada en Xcode 5, obtengo docenas del siguiente mensaje en el resultado de compilación:

profiling:invalid arc tag (0x...)

No parece afectar las pruebas, ya que se completan con éxito, y también los archivos de cobertura GCDA se generan como se esperaba.

Alguna idea de lo que significa el mensaje, o cómo suprimir los mensajes / corregir el problema, porque complican el resultado de compilación y dificultan la búsqueda de los resultados del caso de prueba.


Es posible que desee borrar todas las carpetas de datos derivados. Especialmente si actualiza Xcode o usa más de una versión de Xcode.

Hubo un momento en que experimenté esto justo después de actualizar Xcode de 6.2 a 6.3 en nuestro servidor de integración y hemos visto estos mensajes en los registros y faltan clases en el informe de cobertura generado por frankencover.it . La eliminación de las carpetas DerivedData dentro del servidor de integración lo corrige.

find /Library/Developer/XcodeServer -name DerivedData -print0 | xargs -0 rm -rf


Estoy teniendo el mismo problema. En mi appDelegate en applicationWillTerminate: Tengo __gcov_flush(); . Al comentar esto, se eliminan los mensajes de invalid arc tag en mi salida de compilación.

Estoy investigando más para descubrir por qué sucede esto. Sé que si borro completamente mi proyecto y DerivedData directorio DerivedData , estos mensajes se detendrán durante algunas ejecuciones de mis pruebas.

EDITAR: parecía haber arreglado esto para mí. En mi appDelegate tuve lo siguiente:

#ifdef DEBUG + (void)initialize { [[NSUserDefaults standardUserDefaults] setValue:@"XCTestLog,GcovTestObserver" forKey:@"XCTestObserverClass"]; [super initialize]; } #endif

GcovTestObserver mal GcovTestObserver , y después de arreglar esto los mensajes se detuvieron. Asegúrese de tener también una subclase de XCTestObserver en su objetivo de prueba que stopObserving con lo siguiente:

- (void) stopObserving { [super stopObserving]; UIApplication* application = [UIApplication sharedApplication]; [application.delegate applicationWillTerminate:application]; }


He dedicado un tiempo a tratar de encontrar la manera de deshacerme de esos mensajes desagradables y desagradables:

creación de perfiles: /Users/appfactory/Desktop/WORK/App/trunk/ObjectiveC.gcda: no se puede combinar el archivo GCDA anterior: etiqueta de arco dañado (0x00000000)

Parecía un problema de Xcode 7 que no se solucionó en la versión actual de Xcode 7.1 beta 2.

El problema se debe a que no se fusionaron los archivos de cobertura .gcda existentes con los resultados actuales.

Lo que probé:

  1. Elimine esos archivos .gcda con RunScript - no funciona en mi caso

echo "Eliminar archivos .gcda" echo "$ {OBJECT_FILE_DIR_normal} / $ {CURRENT_ARCH}"

Atención: ¡el archivo ObjectiveC.gcda puede estar en una ubicación diferente!

  1. Establezca las siguientes configuraciones de compilación en SÍ, que tampoco ayudan

    • Habilite la compatibilidad de cobertura de código para SÍ

    • Genere archivos de cobertura de prueba heredados en SÍ

    • Flujo del programa de instrumentos a SÍ

  2. La solución en mi caso:

Establezca las siguientes configuraciones de compilación para el objetivo principal

  • Habilite la compatibilidad de cobertura de código para SÍ

  • Genere archivos de cobertura de prueba heredados en SÍ

  • Flujo del programa de instrumentos a NO

Establezca las siguientes configuraciones de compilación para el objetivo de prueba (y cualquier otro objetivo)

  • Habilite la compatibilidad de cobertura de código para NO

  • Genere archivos de cobertura de prueba heredados a NO

  • Flujo del programa de instrumentos a NO

¡Espero eso ayude!


Lo más probable es que esto se deba a que las herramientas de compilación no fusionaron los resultados actuales en los archivos de cobertura .gcda existentes. Como Dave Meehan señala aquí , hay una forma de lidiar con esto limpiando la carpeta de creación del producto, pero un enfoque menos duro es eliminar los archivos .gcda de los objetivos que los generan (para mí, solo el objetivo de prueba) como parte del proceso de construcción. Dave incluye un script de muestra para ser incluido como una fase de compilación, o, en la raíz del proyecto a mano:

find . -name "*.gcda" -print0 | xargs -0 rm


Para los usuarios de Xcode 7, es posible que se haya preguntado por qué las pruebas de unidad se bloquean después de recibir mensajes como este. La solución que encontré fue que debe asegurarse de que todos los posibles objetivos involucrados en su flujo de compilación (incluidas todas las bibliotecas) deberían tener estas dos configuraciones de compilación configuradas en NO:

GCC_GENERATE_TEST_COVERAGE_FILES = NO; GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO;

Si busca la sección "Generación de código" en la configuración de compilación, los encontrará como "Generar archivos de cobertura de prueba" y "Flujo de programa de instrumento".

Para obtener más información, consulte https://developer.apple.com/library/ios/qa/qa1514/_index.html


Para resolver el problema de obtener mensajes de "no se puede fusionar el archivo GCDA anterior: etiqueta de arco dañado" en la consola, evite generar el archivo ObjectiveC.gcda, estableciendo la opción "Habilitar módulos (C y Objective-C)" en "NO", en el destino configuraciones.


Una vieja pregunta, pero ahora Xcode 7 GM está fuera, y este comportamiento no ha cambiado, eché un vistazo más profundo. El problema, creo, es que la cobertura del código del objetivo de la aplicación de prueba está en conflicto con la cobertura del código del objetivo principal.

Suponiendo que en realidad no le importe la cobertura de código de su objetivo de prueba, esta configuración me detiene los errores, sin necesidad de guiones adicionales ni de eliminar archivos:

En su conjunto de destino principal (ya sea un marco o una aplicación):

Enable Code Coverage Support to YES Generage Legacy Test Coverage Files to YES Instrument Program Flow to YES

Para mis propósitos, solo hice esto para compilaciones de Debug, pero sus necesidades pueden variar.

Luego, en su conjunto de objetivos de Pruebas:

Enable Code Coverage Support to NO Generage Legacy Test Coverage Files to NO Instrument Program Flow to NO

Esto ha resuelto los mensajes de error y todavía permite que los archivos de cobertura de código se creen de manera adecuada.

Una vez más, la pregunta es antigua, pero como el error todavía se emite en XCode 7, encontré que esta solución funciona mejor que eliminar archivos con scripts especiales.