Las testings dejan de funcionar en Xcode 8 Error TEST_HOST

Quiero comenzar las testings bajo Xcode 8 y falla al principio. Mi error es:

No se pudo determinar el identificador de package para TEST_HOST de MyProjectTest: "/Users/jakubmazur/Library/Developer/Xcode/DerivedData/MyProject-ejeepybggxvekxajlyngopeahiex/Build/Intermediates/CodeCoverage/Products/Testing-iphonesimulator/MyProject.app"

¿Alguna idea de lo que está mal aquí? Trato de limpiar el proyecto, nada. En la Build Settings en mi objective en Packaging y cambio de identificador de package de producto depende de la configuration en mi esquema. Puede tener algo que ver con eso, pero no estoy seguro.

– EDITAR

Ok figura cómo networkingucir el problema. Cuando cambio las configuraciones en el esquema para usar Build Configuration Debug lugar de Testing parece funcionar, pero necesito una configuration separada para la testing.

Por alguna razón, la configuration de "Aplicación de host" en la image a continuación fue el problema para mí. Seleccionar el objective adecuado solucionó esto.

Esto terminó modificando los siguientes valores en mi xcodeproj:

  • BUNDLE_LOADER = "$ (TEST_HOST)";
  • TEST_HOST = "$ (BUILT_PRODUCTS_DIR) / myappname.app/myappname";

Bien, descúbrelo. Hay un problema con los packages de nombres. Lamentablemente, hay un problema con Xcode. Estaba usando diferentes nombres de modules para diferentes configuraciones. Build Settings a Project -> Build Settings -> Product Module Name cambio en todas las configuraciones para el mismo nombre sin espacios.

Hay un caso más que podrías encontrar. Si necesita diferentes nombres de productos para el destino principal (por ejemplo, Depuración, Puesta en escena, Producción) e intente utilizar el selector de Aplicación de host Xcode, escribirá valores incorrectos en la configuration de compilation TEST_HOST.

Y aunque el post de error que ve es sobre el identificador de package en la configuration de debugging, Xcode se queja de TEST_HOST en la configuration de lanzamiento .

Lo arreglé cambiando manualmente la configuration de compilation TEST_HOST. Por ejemplo, si tiene ProductName en el destino principal establecido en AppDebug en Depuración y AppRelease en la configuration de Versión, su TEST_HOST debería seguir:

Qué establece Xcode:

 $(BUILT_PRODUCTS_DIR)/AppDebug.app/AppDebug 

Lo que necesita establecer:

 Debug configuration: $(BUILT_PRODUCTS_DIR)/AppDebug.app/AppDebug Release configuration: $(BUILT_PRODUCTS_DIR)/AppRelease.app/AppRelease 

Parece que hay varios errores en Xcode8 que pueden causar esto. Sin embargo, he encontrado una solución para el caso donde Xcode intenta encontrar la aplicación TEST_HOST dentro de la carpeta Intermediates/CodeCoverage/ . (Probé todas las demás soluciones con los nombres de los modules, etc., y no funcionó para mí).

El problema en sí mismo parece ser que Xcode ni siquiera intenta build la aplicación antes de ejecutar las testings. Sin embargo, una vez que Xcode pueda encontrar el TEST_HOST en la carpeta, se rebuildá al iniciar las testings. Así es como podemos encontrar el path a nuestro alnetworkingedor.

Dos posibles soluciones:

Si no tiene que tener cobertura de código: vaya a la configuration de generación de su objective de testing de unidad y establezca Enable Code Coverage Support en No y desactive la cobertura de código en la configuration de testing de su esquema de compilation. (Editar esquema, select Prueba a la izquierda). Si desea ejecutar sus testings de unidad y get el post de error de TEST_HOST, intente crear ( CMD + B ) o ejecutar su aplicación. Entonces puedes ejecutar tus testings sin ese error. Voilá

Si necesita cobertura de código: puede seguir una cierta solución para get esa carpeta de Intermediates/CodeCoverage/.. Una vez que la aplicación esté dentro de Xcode, se rebuildá para las testings de unidad como debería, pero debes completarla una vez. Así es como lo haces:

  • En la aplicación y el objective de la testing de la unidad, select No para "Habilitar soporte de cobertura de código"
  • Luego, en la pestaña "General" del objective de la testing de la unidad, configure la aplicación host de testing en "Ninguno".
  • Desmarca "Permitir probar Host API"
  • Intente comenzar las testings unitarias. Xcode ahora al less intentará build. Si Xcode da un error de compilation (a veces Xcode se queja de Cocoapods aquí en mi experiencia), intenta build una vez más.
  • Vuelva a verificar "Permitir probar API de host" nuevamente en el objective de Prueba de unidad
  • Intente ejecutar las testings nuevamente como se indicó anteriormente. Xcode debería quejarse.
  • Ahora configure el host de testing para la aplicación.
  • Ahora las testings deben ejecutarse. (Hasta que ejecute una limpieza, tendrá que volver a hacer estos pasos …)

Lo sé, es molesto. Pero es la única solución al problema hasta ahora.

Bajo el objective de testing >> Configuración de compilation >> Prueba >> Host de testing , puede ver el file .app que se debe usar para probar.

Para mí **. El nombre del file de la aplicación era incorrecto. Y lo he reemplazado con la aplicación ** / Build / Intermediates / CodeCoverage / Products / Debug-iphonesimulator / **. (Verifique el file .app presente en este directory).

Lo que he descubierto es que las testings no se ejecutarán a less que hayas creado y ejecutado el mismo objective con el que estás ejecutando las testings en el dispositivo / sim en el que estás probando.

Por ejemplo, si ejecuto las testings en la producción de destino, tendré que crear y ejecutar la producción de destino en el dispositivo / sim antes de que pueda ejecutar las testings. Si no hice eso, me dará el mismo error.

Me encontré con este error mucho y, finalmente, descubrí que fue causado por la variación de PRODUCT_NAME entre las configuraciones de generación de debugging y lanzamiento.

Estábamos haciendo esto para que las comstackciones de Debug tuvieran un nombre de aplicación diferente cuando se instalaron en el teléfono (así como un id de package diferente para que pudiéramos instalarlas junto a las comstackciones de App Store).

Revertimos ese cambio y agregamos una nueva configuration de APP_DISPLAY_NAME a la configuration de compilation, variamos eso entre los types de compilation y cambiamos el Info.plist para usar $ (APP_DISPLAY_NAME) en lugar de $ (PRODUCT_NAME).

Después de hacer eso, es importante entrar en el objective de testing en el proyecto y asegurarse de que la configuration 'Aplicación de host' en General esté realmente establecida en su aplicación.

Este es un error en Xcode en este momento. Ver http://www.openradar.me/28095069 .