Crashlytics no envía un informe de bloqueo desde el iPhone

85

Configuré Crashlytics en mi única aplicación de iOS e instalé la aplicación en un dispositivo real. Mi panel de Crashlytics muestra que he agregado correctamente la aplicación. Sin embargo, no envía un informe de fallos. Mi velocidad de Internet no es tan buena. Pero puedo consultar mis correos electrónicos desde este dispositivo. ¿Alguien puede adivinar dónde está el problema?

farhad rubel
fuente
5
Tengo el mismo problema con el servicio de Crashlytics. Los informes de fallas del dispositivo nunca se envían (en mi experiencia), solo desde el simulador. Terminé usando informes de fallas y manejo de errores de Crittercism.
Sam Spencer
Lo mismo me pasa a mí. Pruebe su aplicación con otro dispositivo que no sea el dispositivo de desarrollo real, de esta manera puede obtener informes de fallas.
Samet DEDE
Sí, estoy usando mi dispositivo de desarrollo. ¿Está creando el problema?
farhad rubel
1
Sin una descripción completa de la configuración o un proyecto de prueba, esto es imposible de responder. Debe comunicarse con el soporte de crashlytics. Las conjeturas salvajes no ayudan.
Kerni
3
Estoy tan asombrado de que alguien de Crashlytics haya visto mi publicación en StackOverflow y se haya puesto en contacto conmigo por correo electrónico; Me está ayudando a resolver este problema. Veamos qué pasa.
farhad rubel

Respuestas:

81

El depurador de Xcode NO permite que Crashlytics procese informes de fallos. Sí, eso me pareció extraño incluso cuando lo leí por primera vez, pero es un hecho ( Fuente ). Esa es la razón por la que nunca vemos un informe de fallas cuando:
- ejecución de la aplicación en Simulator
- ejecución de la aplicación en iDevice compilando y ejecutando directamente desde Xcode con el depurador activado.

Para asegurarse de que se informe un bloqueo durante la prueba ( copiado del sitio de asistencia de Crashlytics ):
1. Inicie el simulador
2. Presione detener
3. Inicie su aplicación y fuerce un bloqueo
4. Vuelva a iniciar la aplicación desde el simulador
5. Consulte el informe de bloqueo en el panel de control web.

EDITAR:

Añadida una referencia; Crashlytics también proporciona un artículo breve sobre una forma rápida de forzar un bloqueo .

Saurabh Hooda
fuente
6
Eso me ayudó. También he descubierto eso en algunos casos. Crashlytics no enviará el informe de fallas a menos que la aplicación se abra nuevamente. Para reiterar: el usuario experimenta un bloqueo. El usuario vuelve a abrir la aplicación. Crashlytics envía un informe de fallos anterior.
tambykojak
1
@tambykojak, esto probablemente se deba al hecho de que los bloqueos de iOS son bastante volátiles en la mayoría de los casos y la ruta más segura es enviar un informe de bloqueo en la próxima carga de la aplicación en lugar de enviarlo de inmediato. Muchas herramientas de informes de fallos utilizan este paradigma en iOS y otros controladores de fallos que no son de VM.
pixelknitter
2
Gracias. Esto debe marcarse como respuesta correcta :)
iMemon
¿Necesito cargar algún dsyms en este caso? Si es así, ¿dónde puedo encontrarlos?
SoliQuiD
los enlaces están muertos.
Luky
66

Mi ser es tarde pero trabaja al 100%

Realice algunos cambios en la configuración de construcción del proyecto como en la imagen de abajo

ingrese la descripción de la imagen aquí

y siga estas instrucciones.

Anand Suthar
fuente
Incluso después de deshabilitar Bitcode, seguía teniendo errores de dSYMS de vez en cuando, y el 100% del tiempo cuando depuraba con el simulador. Esto lo arregló. Gracias.
user3344977
Al cambiar esta configuración, pude ver bloqueos en la plataforma de
base de fuego
20

La razón principal por la que cualquier informador de accidentes no funciona en iOS es debido a la interferencia de diferentes informadores de accidentes. Sin embargo, con Crashlytics específicamente, podría haber algo específico para ellos que provoque que el informe de bloqueo no se informe.

El depurador de Xcode NO permite que Any Crash Reporter procese informes de fallas. Esto se debe a que XCode anula cualquier enlace en las devoluciones de llamada de manejo de fallas. Esto solo sucede cuando:

  • ejecución de la aplicación en el simulador (con depurador activado)
  • ejecutar la aplicación en iDevice compilando y ejecutando directamente desde Xcode con el depurador activado.

Para asegurarse de que se informe de un bloqueo durante la prueba ( http://support.crashlytics.com/knowledgebase/articles/92523-why-can-ti-have-xcode-connected- ):

  1. Simulador de lanzamiento
  2. Presione detener
  3. Inicie su aplicación y fuerce un bloqueo
  4. Reinicie la aplicación desde el simulador
  5. Consulte el informe de fallos en el panel web.

Si bien un video súper antiguo sigue siendo relevante, aquí hay un video de los pasos anteriores (ejemplo de Crittercism): https://www.youtube.com/watch?v=sU6Su3PBFH4

pixelknitter
fuente
1
Crashlytics se deshabilita cuando detecta un depurador adjunto. No porque no funcione, sino porque evitará que el depurador funcione correctamente. Crashlytics usa los mismos mecanismos que usa el depurador, y sería realmente frustrante para el SDK estropear el flujo de depuración normal. Como referencia, escribí la mayor parte del SDK de Crashlytics.
Mattie
8

Para mí, el problema era que el dispositivo estaba conectado a mi Mac :) De esta fuente :

Además, si tiene su dispositivo conectado a su Mac, el depurador de XCode también intervendrá. Así que simplemente desconecte el dispositivo antes de probar :)

Fengson
fuente
7

Encontré una solución usando los siguientes pasos
1. Vaya a Editar esquema 2. Ejecute -> Información 3. Cambie la configuración de compilación para liberar. Ahora ejecuta la aplicación, ciérrala. Recibirás correo.

Gurjinder Singh
fuente
6

Recientemente nos encontramos con este problema y descubrí que en algún momento se eliminó el script de compilación. Volver a agregarlo con lo siguiente solucionó el problema para nosotros:
./Crashlytics.framework/run <your_api_key> <build_secret>

Nota: Cuando utilice Cocoapods, querrá que nos proporcione lo siguiente en lugar de lo anterior ( fuente ): ./Pods/CrashlyticsFramework/Crashlytics.framework/run

Agregar un script de compilación:

  1. Para agregar una fase de construcción de ejecución de script en Xcode 6, seleccione el destino de su aplicación en su proyecto, luego seleccione "Fases de construcción".
  2. Haga clic en el pequeño icono "más" y seleccione "Nueva fase de ejecución del script de ejecución".
  3. Ahora debería ver una sección Ejecutar script en el medio de las opciones de la fase de compilación, como se muestra arriba.
  4. Dentro del cuerpo de Run Script Build Phase, pegue el script.

La cita anterior proviene del tutorial visual de Crashlytics , al que se hace referencia en esta publicación .

Nota: originalmente publiqué esta respuesta textualmente para el código de error de Crashlytics: 202 al enviar archivos .

James Nelson
fuente
Esto parece haberme ayudado.
Chris Prince
1
Usé fabric anteriormente para la integración de Twitter ahora quiero crashlytics también agregué un marco y seguí todas las instrucciones pero no
recibí
@iOS_Ramesh Me encantaría intentar ayudarte, pero sin saber más será difícil. Para hacer esto, debe abrir una nueva pregunta que describa dónde se encuentra (el paso que siguió para la integración, cualquier fragmento de código apropiado y cualquier comentario que reciba de Crashlytics o la consola).
James Nelson
Ya
publiqué
1
Gracias por la pista. Hicimos que ["Release" = "$ {CONFIGURATION}"] marcara nuestro Run Script y cambiamos el nombre de nuestra configuración de Release.
Marián Černý
4

Desde el sitio de RayWenderlich:

¡No obtendrá ningún informe de fallas si Xcode intercepta el evento de fallas! Para que todos los ejemplos a continuación funcionen, debe compilar y ejecutar la aplicación, luego hacer clic en el botón Detener en Xcode. De esta forma tendrás la última versión instalada en el dispositivo. Una vez hecho esto, puede iniciar la aplicación en el dispositivo y luego bloquearla todo lo que quiera. Todos los fallos en su dispositivo iOS serán detectados y enviados al componente del servidor del servicio que ha integrado en la aplicación. Los informes de fallas generalmente se envían al servidor la próxima vez que inicie la aplicación, por lo que los pasos a seguir para generar un informe de fallas en el servidor son los siguientes: Compile y ejecute en Xcode. Presione el botón de parada. Ejecute la aplicación en su dispositivo iOS. Haz que la aplicación se bloquee. Ejecute la aplicación nuevamente.

Michel Goñi
fuente
3

Asegúrese de no forzar el choque demasiado pronto.

Establecer [Crashlytics sharedInstance].debugModeen YES;

Pendiente de

Crashlytics] Settings loaded

en los registros de la consola Xcode.

Luego fuerce el bloqueo y reinicie la aplicación, y el bloqueo se informará ahora.

erkanyildiz
fuente
3

Me encontré con un problema similar al probar el código de falla de prueba.

Crashlytics.sharedInstance().crash()

Estaba ejecutando mi aplicación desde un dispositivo, sin Xcode, y el bloqueo no aparecía en Crashlytics Dashboard. Lo que funcionó para mí fue el siguiente consejo del sitio web de Crashlytics:

  • Asegúrese de iniciar la aplicación después de fallar, para que se pueda cargar el bloqueo.

Comenté la llamada anterior a crash () y volví a ejecutar la aplicación. Luego, el accidente apareció en el Tablero.

Ravi
fuente
2

Esto es para xcode 9, de crashlytics 3.4.0 PASO 1 PASO 2

Después de hacer esto, tenga paciencia y espere unos minutos.

Ted
fuente
1

¿Ha intentado ejecutar [[Crashlytics sharedInstance] crash]en un dispositivo y ver si se informa? Hay algunas razones por las que Crashlytics podría no funcionar, incluidos otros informadores de accidentes, etc.

Patrick Tescher
fuente
No, estoy usando int * x = NULL; * x = 42; código para ver el informe de fallos. Además, mi aplicación también se bloquea para diferentes modelos de datos centrales.
farhad rubel
1

Si no carga el archivo dSYM, Crashlytics no mostrará su falla a pesar de que el informe se cargó correctamente.

Podría encontrarse con este problema si ha configurado su script de compilación para que solo se ejecute en su servidor CI. Luego, si ha copiado su aplicación en su teléfono a través de xcode y la ejecuta sin estar adjunta al depurador, el informe se cargará pero se ignorará, debido a que falta el archivo dSYM.

thetrutz
fuente
1

A veces, los registros tardan un poco en aparecer. Puedo encontrarlos después de 15-20 minutos

Flojo
fuente
0

Uno de los problemas que siento es que en la Fase de ejecución de script, debería ser una Fase de ejecución de script separada para CrashLytics. Cuando tuvo el script de ejecución

./Fabric.framework/run

Con algunos de mis otros scripts, todo estaba bien, se envió el informe de presentación de registros de CrashLytics, pero no había nada en la interfaz web.

Cuando agrego otra fase de secuencia de comandos de ejecución solo con la ejecución de Fabric, parece una magia :)

Mi primer intento fue con cocoapods, pero no funcionó. Cuando agrego manualmente todo el marco y una fase de secuencia de comandos de ejecución separada que funcionó.

karim
fuente
-1

Esto funcionó para mí

Si está probando en iDevice, simplemente desconecte iDevice con su Xcode y ejecute su aplicación. Ahora, si falla, se actualizará en el tablero.

Mohammad Zaid Pathan
fuente
-3

Resolví anulando la selección de la opción "Ejecutar script solo al instalar" en Ejecutar script (uno para Fabric (crashlytics))

ingrese la descripción de la imagen aquí

Shaz
fuente
Ese es solo el script que carga los símbolos en Crashlytics; ¿Cómo soluciona eso el problema de que no se envían informes de fallos? ¿Qué pasos debes seguir para evitar usar Crashlytics cuando los símbolos no se han cargado? Esta respuesta es engañosa y simplemente incorrecta.
Droppy