¿Qué podría provocar que fallan las comstackciones de cobertura de código habilitadas?

Resumen

Estoy intentando get un informe de cobertura de código de mi proyecto. Sin embargo, cuando bash crear y ejecutar testings, no hay una carpeta CodeCoverage creada en la carpeta de datos derivada.

¿Cómo estoy tratando de hacer esto?

Estoy ejecutando xcodebuild de la siguiente manera:

xcodebuild \ -workspace <some_workspace> \ -scheme <some_scheme> \ -destination <some_destination> \ -derivedDataPath <some_path> \ -enableCodeCoverage YES \ build test

¿Cuál es el problema?

Para mi espacio de trabajo / proyecto fracasa al final con una línea:

xcodebuild: error: Failed to build workspace <some_workspace> with scheme <some_scheme>. Reason: Could not determine bundle identifier for <some_test_target>'s TEST_HOST: "<some_path>/Build/Intermediates/CodeCoverage/Products/Debug-iphonesimulator/<some_product>.app"

Al principio parecía directamente relacionado con el problema TEST_HOST, pero ese no es el caso aquí.

Simplemente no hay una carpeta CodeCoverage:

<some_path>/Build/Intermediates/CodeCoverage

¿Qué he probado?

Intenté lo mismo con un nuevo proyecto limpio, mismo ejecutando el mismo command xcodebuild , lo que tiene éxito. Dentro de la carpeta Build/Intermediates/ existe la carpeta CodeCoverage .

Sin embargo, en mi propio proyecto, que es más complejo, la carpeta Build/Intermediates/ contiene un montón de carpetas *.build (relacionadas con la aplicación y los diversos frameworks, HockeySDK.build , por ejemplo) y PrecompiledHeaders pero no con la carpeta CodeCoverage .

Al mirar a través de la salida de xcodebuild , nunca veo una reference a la carpeta CodeCoverage para mi proyecto. Sin embargo, para el proyecto de testing, la primera mención está en:

Write auxiliary files /bin/mkdir -p /<some_path>/Build/Intermediates/CodeCoverage/Intermediates/<some_project>.build/Debug-iphonesimulator/<some_project>.build/Objects-normal/x86_64

Para mi proyecto veo:

Write auxiliary files /bin/mkdir -p /<some_path>/Build/Intermediates/<some_project>.build/Debug-iphonesimulator/<some_project>.build/Objects-normal/x86_64

Solución alternativa

Algo más que parecía "engañarlo" para que funcione es establecer la Host Application del Host Application en None . Después de hacer esto, construye y testing, pero las testings fallan debido a la falta de host. Sin embargo, esto hace que se cree la carpeta CodeCoverage , y si la Host Application se establece de nuevo correctamente, ejecutar la compilation y las testings funciona bien, con un informe de cobertura de código producido.

Debe asegurarse de que el nombre del package sea igual en todas las configuraciones. Xcode lo modifica en caso de que esté utilizando caracteres no admitidos. Por ejemplo, Xcode reemplaza "-" con "_".

En todas las configuraciones, vaya a:

Project -> Build Settings -> Product Module

y establezca el mismo nombre exacto sin espacios.