ios - Xcode 7-Falló la generación de datos de cobertura de código
swift ios9 (19)
¡
link_with
método link_with de
link_with
puede causar este problema!
Estaba obteniendo exactamente el mismo error en xcode 7.2: ningún número de simuladores o reinicios de dispositivos parecían aclararlo.
Después de reconstruir completamente mis objetivos de UITest aunque las cosas funcionaron bien.
Después de pasar mucho tiempo en un archivo git diff masivo del archivo
.pbxproj
, encontré una solución para mi proyecto.
No estoy seguro de si aborda la causa raíz de todos los que están viendo este error, pero definitivamente me aclara las cosas.
De la información del proyecto debajo del "objetivo de implementación", "Configuraciones" enumerará todas las configuraciones posibles para su aplicación. Expanda la configuración que está intentando ejecutar y debería ver una lista de todos sus objetivos. En mi caso, los cocoapods habían agregado automáticamente una configuración base para el objetivo de UITest:
Establezca esto en
none
en el menú desplegable.
A continuación, en el menú de la izquierda, seleccione su objetivo de UITest y luego
build phases
Deberá eliminar
check pods manifest.lock
link binary with libraries
emebd pods frameworks
y
copy pods resources
.
Finalmente, vaya a su archivo pod y verifique si hay menciones de su objetivo u objetivos UITest. En mi caso, había estado especificando en la parte superior de mi podfile:
platform :ios, ''8.4''
use_frameworks!
link_with ''My App'', ''My UITesting Target''
pod ''A Pod'', ''~> 1.0''
En cambio, el podfile debería enumerar dependencias específicas para cada objetivo:
platform :ios, ''8.4''
use_frameworks!
target ''My App'', :exclusive => true do
pod ''A Pod I want to use in my app'', ''~> 1.0''
end
¡Suponiendo que no estuvieras usando ningún pod en tus UITests, el objetivo debería volver a construirse sin errores y las pruebas se ejecutarán!
Tengo entendido que la raíz de este problema es que cada objetivo de UITest construye dos paquetes separados, uno para la aplicación y otro para el controlador de UITest.
Desafortunadamente, cocoapods
link_with
logic modifica todos los objetivos especificados para esperar los pods.framework en su paquete.
Los scripts de la fase de compilación agregan el marco al paquete de la aplicación, pero no el paquete del controlador UITest, por lo tanto, cuando inicia sus pruebas, parece que faltan los marcos del controlador UITest y xcode aborta la instalación.
Si estaba usando pods en sus UITests, debería poder especificarlos de la misma manera:
target ''My UITesting Target'', :exclusive => true do
pod ''Another Pod I want only for UITesting'', ''~> 1.0''
end
Y cuando ejecutas la
pod install
todo debería vincularse correctamente.
Cuando ejecuto mis pruebas me sale un error:
La generación de datos de cobertura de código falló.
No se pueden recuperar los archivos de datos de perfil de ''UIDevice''.
En la consola se imprimió la advertencia:
Se agotó el tiempo de espera de 120 segundos para que se inicie el simulador, el estado actual es 1.
¿Cual es la razon?
Al usar Xcode 9.1 con múltiples objetivos de compilación y un compilador estándar, estábamos trabajando en pruebas de IU y comencé a ver este problema. Entonces, probablemente me odie por esta respuesta, y espero que sea rechazada, PERO esto realmente funcionó para mí: tuve que eliminar por completo Xcode y mi proyecto de mi máquina para que este error desapareciera.
Intenté cada sugerencia en este hilo, algunas veces, intenté borrar archivos de caché, eliminar datos derivados, jugar con la configuración de compilación, actualizar podfiles, limpiar, reconstruir después de cada intento, limpiar el simulador, recrear manualmente los simuladores en ''administrar dispositivos'' . Después de horas y horas de frustración, todavía era un completo misterio por qué esta máquina no podía construir nuestra prueba de IU. Parecía funcionar bien en otras máquinas y en nuestro CI. Además de los elementos en este hilo, modifiqué manualmente el archivo pbxproj para establecer todas las opciones relacionadas con la cobertura del código en "NO".
Finalmente, estaba a un paso de reformatear toda la máquina. Decidí eliminar completamente Xcode siguiendo las sugerencias aquí: : Cómo desinstalar completamente Xcode .
Específicamente, eliminé nuestro espacio de trabajo, salí de todos los programas, eliminé todos los archivos enumerados, borré el contenido y la configuración del simulador, eliminé el simulador, apagué la máquina durante 20 minutos, volví, reinstalé Xcode, cloné el repositorio y listo ! No hay error.
Espero que eso resuelva el problema para alguien. Es la opción ''nuclear'', y nunca debería tener que hacer esto, pero como dije, esto es lo único que funcionó para mí.
Después de mucho tiempo tratando de resolver esto, resultó que tenía que crear un nuevo objetivo de prueba. Luego, después de reiniciar el dispositivo, el problema ya no resurge.
En mi caso, había agregado archivos Swift a un marco que era (hasta entonces) puramente Objective-C. El paquete de prueba no tenía ningún código Swift.
Una vez que agregué un archivo Swift al paquete de prueba, Xcode actualizó automáticamente algunas configuraciones del proyecto y el error desapareció.
Debe mantener el archivo Swift en el paquete de prueba, aunque no contenga ningún código. Evidentemente, Xcode o Cocoapods utilizan la existencia de archivos Swift en el paquete de prueba para determinar si ejecutar las pruebas en "modo rápido".
Estaba teniendo este problema en Xcode 8.3 en Sierra 10.12.4
Abrí la aplicación Keychain Access en mi Mac
Después de unos segundos, recibí varias ventanas emergentes del sistema que me pedían mi contraseña para otorgar permisos a los artículos de Keychain.
Ingresé mi contraseña en las ventanas emergentes, y luego mis pruebas comenzaron a funcionar.
Este problema también puede aparecer cuando usa Cocoapods con un marco donde faltan algunas dependencias. Por ejemplo, si está utilizando el Marco A , y este marco depende del Marco B pero en el Podspec del Marco A no se declara la dependencia.
Experimenté exactamente el mismo error y finalmente lo hice funcionar, estos son los pasos que tomé.
-
Intenté reiniciar Xcode y el simulador, después de limpiar y eliminar la aplicación, eso nunca funcionó.
-
Luego reinicié la Mac como se sugirió, pero aún así no funcionó.
-
Luego elegí un nuevo dispositivo para probar en el simulador, anteriormente estaba usando 5s y cambié a 6, y funcionó.
Curiosamente, cuando cambié al simulador de iPhone 6, mostró el logotipo de Apple con una barra de carga, antes de ejecutar la aplicación y trabajar.
Al volver al simulador de 5s, hizo exactamente lo mismo, con la barra de carga de Apple, que no había hecho antes, y luego los 5s funcionaron.
Por lo tanto, parece ser un problema de simulador, y el cambio a un dispositivo diferente funcionó. Restablecer el contenido y la configuración puede ser la solución para un dispositivo que no funciona.
La causa raíz es probablemente la falla del simulador. Los problemas con el simulador son comunes, especialmente en el primer lanzamiento.
Si el problema se produce incluso después de que el simulador se inicie y se conecte correctamente, publique los detalles del error.
Para que se inicie el simulador, a menudo tengo que cancelar la primera ejecución (después de iniciar Xcode limpiamente) e intentar volver a ejecutarlo varias veces.
Si esto es repetible, ocurre en múltiples proyectos y persiste después del relanzamiento y limpieza de los proyectos, considere enviar un defecto a Apple si la comunidad de no puede ayudar.
Mi problema fue causado por una versión de implementación incorrecta del objetivo unittest. La versión de implementación de la aplicación probada fue 7.0, pero la prueba de la unidad no se configuró correctamente automáticamente. Estaba configurado en 10.0, mientras que la versión de mi simulador era 8.4. Cambie la versión de implementación del objetivo UT a 8.0 en la configuración de compilación y luego todos los problemas desaparecieron.
Pasos que funcionaron en mi caso Eliminar el esquema y hacer clic en Administrar esquema-> Generar esquema automáticamente resolvió el problema en mi caso.
El problema fue causado al instalar el certificado en el simulador y en el llavero
Probé un montón de estas soluciones sin suerte. Desactivé la opción de Cobertura de código en la sección Prueba de mi esquema, que suprimió el error pero las Pruebas no se ejecutaron. Luego noté un montón de cosas en la consola NSLog. En algún lugar, mencionó la referencia a un marco que ya no estaba usando e intentando cargar.
Lo busqué en la aplicación y Build Settings -> Other Linker Flags intentaba cargar el marco que ya no estaba allí.
Eliminé: -framework 3rd_party_libname
Luego las pruebas funcionaron nuevamente. Esto fue confuso, pero compruebe los mensajes de NSLog. Estaba usando XCode 8.3
Resolví este problema, al igual que resuelvo la mayoría de esos problemas de XCode:
-
elimine los archivos de sus proyectos en su
DerivedData
(Xcode>Preferences>Locations>DerivedData→
para saltar allí en el buscador) -
Product>Clean
-
(mantenga presionado el botón Alt)
Product>Clean Build Folder
- Salir de XCode
- Reiniciar XCode
- Elimina tu aplicación de tu dispositivo / simulador
Inténtalo de nuevo. En caso de que aún no funcione, use otro simulador / dispositivo para algunas ejecuciones. Tarde o temprano volverá a funcionar en el original.
Si está integrando su proyecto con un marco dinámico de terceros, es posible que deba agregar una ruta en la configuración de compilación. Busque -> Configuración de compilación -> "Rutas de búsqueda de ruta de acceso" y asegúrese de que incluya la ruta al marco.
Estaba viendo este problema exacto yo mismo después de configurar mi proyecto para usar un marco en el que mi equipo ha estado trabajando. Después de actualizar esta configuración específica, el problema desapareció. En mi caso, la ruta era idéntica a la que ya tenía que establecer para la configuración "Rutas de búsqueda de Framework".
Si está utilizando vainas de cacao, consulte este hilo en el repositorio de Cocoapods: https://github.com/CocoaPods/CocoaPods/issues/5385#issuecomment-226269847
Esto solucionó mi problema:
Copiando la respuesta @dfleming:
Por alguna razón, parece que CocoaPods no está agregando la fase de construcción "[CP] Embed Pods Frameworks" al objetivo de Pruebas de IU al generar el espacio de trabajo del proyecto.
Agregué esto manualmente y las pruebas de IU fueron ejecutables nuevamente.
Esta fase de compilación debe ejecutar el siguiente script: (Reemplace {YourProject} con el nombre de su proyecto)
"${SRCROOT}/Pods/Target Support Files/Pods-{YourProject}UITests/Pods-{YourProject}UITests-frameworks.sh"
También enfrenté el mismo problema:
Intenté las siguientes cosas para diferentes proyectos:
1.Para el proyecto donde tenía algunos marcos de terceros, el problema era que el paquete de prueba no puede encontrar el marco en tiempo de ejecución.
Para esta actualización, seleccione la configuración de compilación de Rutas de búsqueda de ruta de destino agregando
$(PROJECT_DIR)/Frameworks
(suponiendo que mantenga sus marcos en esa ubicación)., Se solucionó mi problema para este proyecto. Puede buscarlo en la siguiente ubicación:
Project file -> Test target -> Build Settings -> Runpath Search Paths
-
En otro espacio de trabajo, cuando cambie mi dispositivo de prueba a otro simulador o cambie el dispositivo en sí. Eso ayudo.
-
Reinicie el xcode o su sistema mac.
espero que te ayude
Tuve este mismo problema, pero se debió a tener un objetivo de prueba y cambiar el nombre del objetivo de la aplicación. Asegúrese de tener un conjunto de aplicaciones de host válido.
- Elija el objetivo de prueba en la página del proyecto
- Debajo de la pestaña General, debe haber un cuadro de selección de Aplicación de host
- Elige el objetivo con el que quieres probar
Usuarios de Cartago:
Esto me sucedió después de agregar un nuevo marco a mi Cartfile.
.framework
la
.framework
pero olvidé arrastrar el archivo
.framework
del Finder a la sección Binarios incrustados de mi objetivo de aplicación.
Una vez que hice eso, el problema desapareció.
(Tenga en cuenta que este es un caso específico del problema general mencionado anteriormente por @Mustafa).