Docenas de "perfiles: label de arco inválida" cuando se ejecuta la cobertura de código en Xcode 5

Cuando ejecuto mi objective de testing con la cobertura de código habilitada en Xcode 5, recibo docenas del siguiente post en la salida de compilation:

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

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

Cualquier idea de lo que significa el post, o cómo suprimir los posts / solucionar el problema, porque desorderan la salida de compilation y hacen que sea difícil encontrar los resultados del caso de testing.

Lo más probable es que esto sea el resultado de que las herramientas de creación no fusionan los resultados actuales en los files de cobertura .gcda existentes. Como Dave Meehan señala aquí , hay una forma bruta de lidiar con esto limpiando la carpeta de creación de productos, pero un enfoque básico less duro es eliminar los files .gcda de los objectives que los generan (para mí, solo el objective de testing) como parte del process de compilation. Dave incluye un ejemplo de script que se includeá como fase de compilation 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é sus testings de unidad se bloquean después de recibir posts como este. La solución que encontré fue que debe asegurarse de que todos los objectives posibles involucrados en su flujo de compilation (incluidas todas las bibliotecas) deben tener estas dos configuraciones de compilation 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 configuration de compilation, encontrará estos como "Generar files de cobertura de testing" y "Flujo de progtwig de instrumento".

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

Pregunta anterior, pero ahora Xcode 7 GM está fuera, y este comportamiento no ha cambiado, miré más profundo. El problema, creo que es que la cobertura del código del objective de la aplicación de testing está en conflicto con la cobertura del código del objective principal.

Suponiendo que en realidad no te importa la cobertura de código de tu objective de testing, estas configuraciones detienen los errores para mí, sin necesidad de scripts adicionales o de eliminar files:

En su objective principal (ya sea un marco o una aplicación) configurado:

  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 las versiones de debugging, pero sus necesidades pueden variar.

Luego, en su objective de testings establecido:

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

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

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

Estoy teniendo el mismo problema. En mi appDelegate bajo la applicationWillTerminate: __gcov_flush(); applicationWillTerminate: Tengo el __gcov_flush(); . Al comentar esto, se eliminan los posts de invalid arc tag en mi salida de compilation.

Estoy investigando más para descubrir por qué sucede esto. Sé que si borro por completo mi proyecto y DerivedData directory DerivedData , estos posts se detendrán durante algunas testings.

EDIT: Parecía haber arreglado esto para mí. En mi appDelegate tenía lo siguiente:

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

GcovTestObserver mal, y después de arreglar esto los posts se detuvieron. Asegúrese de que también tiene una subclass de XCTestObserver en su objective de testing anular la stopObserving de la stopObserving con lo siguiente:

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

Es posible que desee borrar todas las carpetas de datos derivadas. Especialmente si actualizas Xcode o usas más de una versión de Xcode.

En un momento he experimentado esto justo después de actualizar Xcode de 6.2 a 6.3 en nuestro server de integración y hemos visto estos posts en los loggings, así como las classs faltantes en el informe de cobertura generado por frankencover.it . La eliminación de las carpetas DerivedData dentro del server de integración lo corrige.

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

He pasado algún time tratando de descubrir cómo deshacerse de esos posts desagradables y molestos:

perfil: /Users/appfactory/Desktop/WORK/App/trunk/ObjectiveC.gcda: no se puede fusionar el file anterior de GCDA: label de arco corrupto (0x00000000)

Parecía un problema de Xcode 7 que no estaba arreglado en el Xcode 7.1 beta 2 actual.

El problema se debe a la falta de fusión de los files de cobertura .gcda existentes con los resultados actuales.

Lo que probé:

  1. Eliminar esos files .gcda con RunScript – no funciona en mi caso

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

Atención: ¡el file ObjectiveC.gcda puede estar en una location diferente!

  1. Establezca las siguientes configuraciones de compilation en SÍ, que tampoco ayudan

    • Habilitar soporte de cobertura de código a SÍ

    • Genera files henetworkingados de cobertura de testing a SÍ

    • Flujo del progtwig del instrumento a SÍ

  2. La solución en mi caso:

Establezca las siguientes configuraciones de compilation para el objective principal

  • Habilitar soporte de cobertura de código a SÍ

  • Genera files henetworkingados de cobertura de testing a SÍ

  • Flujo del progtwig del instrumento a NO

Establezca las siguientes configuraciones de compilation para el objective de testing (y cualquier otro objective)

  • Habilitar soporte de cobertura de código a NO

  • Genera files henetworkingados de cobertura de testing a NO

  • Flujo del progtwig del instrumento a NO

¡Espero eso ayude!

Para resolver el problema de get los posts "no se puede combinar el file GCDA anterior: label de arco corrupto" en la console, evite generar el file ObjectiveC.gcda, haciendo que "Habilitar modules (C y Objective-C)" ajuste a "NO" en el destino configuraciones