verificar puedo fuentes desconocidas como cerrar app aplicaciones activar ios crash-reports symbolicate

ios - puedo - itunes



Simbolizando informes de fallas de aplicaciones de iPhone (24)

Pasos para simbolizar un informe de bloqueo automáticamente utilizando XCode:

ACTUALIZADO PARA XCODE 9

  1. Conecta cualquier dispositivo iOS a tu Mac (sí, físico, sí, sé que esto es una estupidez)

  2. Elija "Dispositivos" en el menú "Ventana"

  3. Haga clic en su dispositivo a la izquierda y VER REGISTROS DE DISPOSITIVOS a la derecha

  4. Espere. Puede tardar un minuto en aparecer. Tal vez haciendo Command-A luego Delete acelerará esto.

  5. Paso crítico no documentado: cambie el nombre del informe de bloqueo que recibió de iTunesConnect de la extensión .txt extensión .crash

  6. Arrastre el informe de bloqueo a esa área de la izquierda

Y luego Xcode simbolizará el informe de bloqueo y mostrará los resultados.

Fuente: https://developer.apple.com/library/ios/technotes/tn2151/_index.html

Estoy tratando de intentar simbolizar los informes de fallos de mi aplicación de iPhone.

Recuperé los informes de fallos de iTunes Connect. Tengo el binario de la aplicación que presenté en la App Store y tengo el archivo dSYM que se generó como parte de la compilación.

Tengo todos estos archivos juntos dentro de un único directorio que está indexado por Spotlight.

¿Ahora que?

He intentado invocar:

symbolicatecrash crashreport.crash myApp.app.dSYM

y solo genera el mismo texto que está en el informe de bloqueo para comenzar, no simbolizado.

¿Estoy haciendo algo mal?


A pesar de que había estado desarrollando aplicaciones durante algunos años, esta era la primera vez que depuraba un binario y me sentía como un NOOB completo para averiguar dónde estaban todos los archivos, es decir, ¿dónde está * .app * .dSYM y los registros de fallos? Tuve que leer varios mensajes para poder resolverlo. La imagen vale más que mil palabras y espero que esta publicación ayude a cualquier otra persona en el futuro.

1- Primero ve a itunesconnect y descarga tus registros de fallos. NOTA: En la mayoría de los casos, puede obtener algo como "Se han enviado muy pocos informes para que se muestre un informe". Básicamente, no hay suficientes usuarios que hayan enviado informes de registro de fallos a Apple, en cuyo caso no puede hacer mucho en ese momento.

2- Ahora, si no ha cambiado su código desde que lo envió a Apple, inicie Xcode para ese proyecto y vuelva a hacer Producto -> Archivo. De lo contrario, simplemente encuentre su último binario enviado y haga clic derecho sobre él.


Aquí hay otro problema que tengo con symbolicatecrash: no funcionará con aplicaciones que tengan espacios en su paquete (es decir, ''Test App.app''). Tenga en cuenta que no creo que pueda tener espacios en su nombre al enviarlos, por lo que debería eliminarlos de todos modos, pero si ya tiene bloqueos que deben analizarse, parche symbolicatecrash (4.3 GM) como tal:

240c240 < my $cmd = "mdfind /"kMDItemContentType == com.apple.application-bundle && kMDItemFSName == $exec_name.app/""; --- > my $cmd = "mdfind /"kMDItemContentType == com.apple.application-bundle && kMDItemFSName == ''$exec_name.app''/""; 251c251 < my $cmd = "find /"$archive_path/Products/" -name $exec_name.app"; --- > my $cmd = "find /"$archive_path/Products/" -name /"$exec_name.app/"";


Con la última versión de Xcode (3.2.2), puede arrastrar y soltar los informes de fallos en la sección de Registros del dispositivo del Organizador de Xcode, y estos se simbolizarán automáticamente. Creo que esto funciona mejor si construiste esa versión de la aplicación usando Build & Archive (también parte de Xcode 3.2.2)


Después de leer todas estas respuestas aquí para simbolizar un registro de bloqueo (y finalmente tener éxito), creo que hay algunos puntos que faltan aquí que son realmente importantes para determinar por qué la invocación de symbolicatecrash no produce una salida simbólica.

Hay 3 activos que deben encajar cuando se simboliza un registro de bloqueo:

  1. El propio archivo de registro de bloqueo (es decir, example.crash ), ya sea exportado desde el organizador de XCode o recibido desde iTunes Connect.
  2. El paquete .app (es decir, example.app ) que contiene el binario de la aplicación que pertenece al registro de bloqueo. Si tiene un paquete .ipa (es decir, example.ipa ), puede extraer el paquete .app descomprimiendo el paquete .ipa (es decir, unzip example.ipa ). Después, el paquete .app reside en la carpeta de Payload/ extraída.
  3. El paquete .dSYM que contiene los símbolos de depuración (es decir, example.app.dSYM )

Antes de iniciar la simbolización, debe verificar si todos esos artefactos coinciden, lo que significa que el registro de fallos pertenece al binario que tiene y que los símbolos de depuración son los producidos durante la compilación de ese binario.

Cada binario es referido por un UUID que se puede ver en el archivo de registro de bloqueo:

... Binary Images: 0xe1000 - 0x1f0fff +example armv7 <aa5e633efda8346cab92b01320043dc3> /var/mobile/Applications/9FB5D11F-42C0-42CA-A336-4B99FF97708F/example.app/example 0x2febf000 - 0x2fedffff dyld armv7s <4047d926f58e36b98da92ab7a93a8aaf> /usr/lib/dyld ...

En este extracto, el registro de aa5e633efda8346cab92b01320043dc3 pertenece a una imagen binaria de aplicación llamada example.app/example con UUID aa5e633efda8346cab92b01320043dc3 .

Puede verificar el UUID del paquete binario que tiene con dwarfdump:

dwarfdump --uuid example.app/example UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app/example

Luego, debe verificar si los símbolos de depuración que tiene también pertenecen a ese binario:

dwarfdump --uuid example.app.dSYM UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app.dSYM/Contents/Resources/DWARF/example

En este ejemplo, todos los activos encajan y debe ser capaz de simbolizar su seguimiento de pila.

Continuando con el script de symbolicatecrash :

En Xcode 8.3 deberías poder invocar el script a través de

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash -v example.crash 2> symbolicate.log

Si no está allí puede ejecutar un find . -name symbolicatecrash find . -name symbolicatecrash en su directorio Xcode.app para encontrarlo.

Como puedes ver no hay más parámetros dados. Por lo tanto, el script debe encontrar los símbolos binarios y de depuración de su aplicación ejecutando una búsqueda de Spotlight. Busca los símbolos de depuración con un índice específico llamado com_apple_xcode_dsym_uuids . Usted puede hacer esta búsqueda usted mismo:

mdfind ''com_apple_xcode_dsym_uuids = *''

resp.

mdfind "com_apple_xcode_dsym_uuids == AA5E633E-FDA8-346C-AB92-B01320043DC3"

La primera invocación de Spotlight le ofrece todos los paquetes dSYM indexados y la segunda le ofrece los paquetes .dSYM con un UUID específico. Si .dSYM no encuentra su paquete .dSYM , entonces symbolicatecrash tampoco. Si hace todo esto, por ejemplo, en una subcarpeta de su ~/Desktop reflector de ~/Desktop debería poder encontrar todo.

Si symbolicatecrash encuentra su paquete .dSYM debería haber una línea como la siguiente en symbolicate.log :

@dsym_paths = ( <SOME_PATH>/example.app.dSYM/Contents/Resources/DWARF/example )

Para encontrar su paquete .app , una búsqueda de foco como la siguiente es invocada por symbolicatecrash :

mdfind "kMDItemContentType == com.apple.application-bundle && (kMDItemAlternateNames == ''example.app'' || kMDItemDisplayName == ''example'' || kMDItemDisplayName == ''example.app'')"

Si symbolicatecrash encuentra su paquete .app , debería haber el siguiente extracto en symbolicate.log :

Number of symbols in <SOME_PATH>/example.app/example: 2209 + 19675 = 21884 Found executable <SOME_PATH>/example.app/example -- MATCH

Si todos estos recursos se encuentran en symbolicatecrash , debe imprimir la versión simbólica de su registro de bloqueo.

Si no, puede pasar sus archivos dSYM y .app directamente.

symbolicatecrash -v --dsym <SOME_PATH>/<App_URI>.app.dSYM/<APP_NAME>.app.dsym <CRASHFILE> <SOME_OTHER_PATH>/<APP_NAME>.app/<APP_NAME> > symbolicate.log

Nota: El seguimiento simbólico se enviará a la terminal, no a symbolicate.log .


El Magical XCode Organizer no es tan mágico como simbolizar mi aplicación. No obtuve ningún símbolo por los informes de fallos que recibí de Apple de un envío de aplicación fallido.

Intenté usar la línea de comandos, colocando el informe de bloqueo en la misma carpeta que el archivo .app (que envié al almacén) y el archivo .dSYM:

$ symbolicatecrash "My App_date_blahblah-iPhone.crash" "My App.app"

Esto solo proporcionaba símbolos para mi aplicación y no para el código de la base de la base, pero era mejor que el número de volcado que el Organizador me estaba dando y era suficiente para que encontrase y solucionara el fallo que tenía mi aplicación. Si alguien sabe cómo extender esto para obtener los símbolos de la Fundación sería apreciado.


En XCode 4.2.1, abra Organizer, luego vaya a Library / Device Logs y arrastre su archivo .crash a la lista de registros de fallos. Se simbolizará para usted después de unos segundos. Tenga en cuenta que debe usar la misma instancia de XCode en la que se archivó la compilación original (es decir, el archivo de su compilación debe existir en el Organizador).


En mi caso, estaba arrastrando informes de errores directamente desde Mail to the Organizer. Por alguna razón, eso evitó que los informes de fallos se simbolizaran (me encantaría saber por qué).

Copiar los informes de errores primero en el escritorio y luego arrastrarlos desde allí al Organizador los simbolizó correctamente.

Caso muy específico, lo sé. Pero pensé que lo compartiría por si acaso.


Esto es simple, después de buscar mucho encontré pasos claros para simbolizar todo el archivo de registro de bloqueo.

  • Copie los archivos .app, crash_report y DSYM en una carpeta.
  • conecta el dispositivo con xcode
  • Luego vaya a la ventana -> seleccionar dispositivos -> ver registros de dispositivos
  • Luego seleccione este dispositivo, borre todos los registros.
  • arrastre y suelte su bloqueo en la sección de registro del dispositivo. automáticamente simbolizará el accidente. simplemente haga clic derecho en el informe y exportarlo.

codificación feliz,
Riyaz


La combinación que funcionó para mí fue:

  1. Copie el archivo dSYM en el directorio donde se encontraba el informe de bloqueo
  2. Descomprima el archivo ipa que contiene la aplicación (''descomprimir MyApp.ipa'')
  3. Copie el binario de la aplicación de la carga útil explotada resultante en la misma carpeta que el informe de bloqueo y el archivo de símbolos (algo como "MyApp.app/MyApp")
  4. Importe o vuelva a simbolizar el informe de fallas desde el organizador de XCode

Al usar atos , no pude resolver la información de símbolo correcta con las direcciones y las compensaciones que estaban en el informe de bloqueo. Cuando hice esto, veo algo más significativo, y parece ser un rastreo de pila legítimo.


Lo hice con éxito, ahora quiero compartir con todos ustedes chicos.

Estos son los siguientes pasos:

Paso 1: Cree una carpeta en el escritorio, le pongo un nombre a "CrashReport" y coloco tres archivos ("MYApp.app", "MyApp.app.dSYM", "MYApp_2013-07-18.crash").

Paso 2: Abra el Finder y vaya a Aplicaciones, donde encontrará la aplicación Xcode, haga clic derecho sobre este y haga clic en "Mostrar contenido del paquete", después de esto siga esta ruta simple

"Contenido-> Desarrollador-> Plataformas-> Plataforma de iPhoneOS-> Desarrollador-> Biblioteca-> PrivateFrameworks-> DTDeviceKit.framework -> Versiones-> A-> Recursos"

O

"Contenido-> Desarrollador-> Plataformas-> Plataforma de iPhoneOS-> Desarrollador-> Biblioteca-> PrivateFrameworks-> DTDeviceKitBase.framework -> Versiones-> A-> Recursos"

O

Para Xcode 6 y superior, la ruta es Applications / Xcode.app / Contents / SharedFrameworks / DTDeviceKitBase.framework / Versions / A / Resources

Donde encuentre el archivo "symbolicatecrash", cópielo y péguelo en la carpeta "CrashReport".

Paso 3: inicia el terminal, ejecuta estos 3 comandos

  1. cd / Users / mac38 / Desktop / CrashReport y presione el botón Intro

  2. export DEVELOPER_DIR = "/ Applications / Xcode.app / Contents / Developer" y presiona Enter

  3. ./symbolicatecrash -A -v MYApp_2013-07-18.crash MyApp.app.dSYM y presione Entrar ahora está listo .. (NOTA: las versiones de la versión 6.4 o posterior no tienen la opción -A; simplemente déjela afuera)

Feliz codificacion .. gracias


Me gusta usar Textwrangler para identificar los errores en una aplicación original de carga de rechazo binario. (Los datos del fallo se encontrarán en su cuenta de itunesConnect). Utilizando el método de Sachin anterior, copio el archivo original.crash a TextWrangler, luego copio el archivo symbolicatecrash que he creado en otro archivo TextWrangler. Comparando los dos archivos señala las diferencias. El archivo symbolicatecrash tendrá diferencias que indican el archivo y el número de línea de los problemas.


Me puse un poco gruñón por el hecho de que aquí nada parece "simplemente funcionar", así que hice algunas investigaciones y el resultado es:

Configuración: back-end de QuincyKit que recibe informes. No se configuró ninguna simbolización ya que ni siquiera podía empezar a darme cuenta de lo que me sugirieron que hiciera para que funcionara.

La solución: descargar informes de fallas desde el servidor en línea. Se llaman ''crash'' y por defecto van a la carpeta ~ / Downloads /. Con eso en mente, este script "hará lo correcto" y los informes de fallos entrarán en Xcode (Organizador, registros del dispositivo) y se realizará la simbología.

La secuencia de comandos:

#!/bin/bash # Copy crash reports so that they appear in device logs in Organizer in Xcode if [ ! -e ~/Downloads/crash ]; then echo "Download a crash report and save it as $HOME/Downloads/crash before running this script." exit 1 fi cd ~/Library/Logs/CrashReporter/MobileDevice/ mkdir -p actx # add crash report to xcode abbreviated cd actx datestr=`date "+%Y-%m-%d-%H%M%S"` mv ~/Downloads/crash "actx-app_"$datestr"_actx.crash"

Las cosas se pueden automatizar para que pueda arrastrar y soltar en Xcode Organizer haciendo dos cosas si utiliza QuincyKit / PLCR.

En primer lugar, debe editar el script remoto admin / actionapi.php ~ línea 202. No parece acertar con la marca de tiempo, por lo que el archivo termina con el nombre ''crash'' que Xcode no reconoce (quiere algo) punto de choque):

header(''Content-Disposition: attachment; filename="crash''.$timestamp.''.crash"'');

En segundo lugar, en el lado de iOS en QuincyKit BWCrashReportTextFormatter.m ~ línea 176, cambie @"[TODO]" por @"TODO" para evitar los caracteres incorrectos.


Para aquellos que usan Airbrake, hay una respuesta sólida arriba, pero no funcionaría para mí sin ajustes:

Funciona para algunas direcciones de memoria pero no para otras, no estoy seguro de por qué ...

  • Crear un nuevo directorio en el escritorio o donde sea
  • Encuentra el archivo en cuestión en el organizador Xcode
  • Doble toque para revelar en el buscador
  • Doble toque para mostrar el contenido del paquete
  • Copie el archivo .dSYM y el archivo .app en un nuevo directorio
  • cd en nueva dir
  • Ejecute este comando: atos -arch armv7 -o ''Vimeo.app'' / ''Vimeo''
  • Terminal entrará en un movimiento interactivo
  • Pegue en la dirección de memoria y presione Intro, se mostrará el nombre del método y el número de línea
  • Alternativamente, ingrese este comando: atos -arch armv7 -o ''Vimeo.app'' / ''Vimeo'' Para obtener información de una sola dirección

Para simbolizar bloqueos, Spotlight debe poder encontrar el archivo .dSYM que se generó al mismo tiempo que el binario que envió a Apple. Ya que contiene la información del símbolo, no tendrás suerte si no está disponible.


Pasos para analizar el informe de fallos de apple:

  1. Copie el archivo .app de lanzamiento que se insertó en la tienda de aplicaciones, el archivo .dSYM que se creó en el momento del lanzamiento y el informe de bloqueo se recibe de APPLE en una CARPETA .

  2. Abra la aplicación de terminal y vaya a la carpeta creada anteriormente (usando el comando cd )

  3. Ejecute atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH . La ubicación de la memoria debe ser aquella en la que se bloqueó la aplicación según el informe.

Ej: atos -arch armv7 -o ''APPNAME.app''/''APPNAME'' 0x0003b508

Esto le mostraría la línea exacta, el nombre del método que resultó en un bloqueo.

Ej: [classname functionName:]; -510 [classname functionName:]; -510

Simbolizando la API

Si usamos IPA para simbolizar, simplemente cambie el nombre de la extensión .ipa con .zip, extráigalo y luego podremos obtener una Carpeta de carga que contiene la aplicación. En este caso no necesitamos el archivo .dSYM.

Nota

Esto solo puede funcionar si el binario de la aplicación no tiene símbolos eliminados. Por defecto las compilaciones de versión despojaron a los símbolos. Podemos cambiarlo en la configuración de compilación del proyecto "Eliminar los símbolos de depuración durante la copia" a NO.

Más detalles ver esta post


Prefiero un script que simbolice todos mis registros de fallos.

Precondiciones

Crea una carpeta y pon allí 4 cosas:

  1. symbolicatecrash Perl script: hay muchas respuestas de SO que indican su ubicación

  2. El archivo de la compilación que coincide con los bloqueos (de Xcode Organizer. Tan simple como Show in Finder y copiar) [No estoy seguro de que esto sea necesario]

  3. Todos los paquetes de xccrashpoint - (de Xcode Organizer. Show in Finder , puede copiar todos los paquetes en el directorio, o el único xccrashpoint que le gustaría simbolizar)

  4. Agregue ese script corto al directorio:

    #!/bin/sh echo "cleaning old crashes from directory" rm -P *.crash rm -P *.xccrashpoint rm -r allCrashes echo "removed!" echo "" echo "--- START ---" echo "" mkdir allCrashes mkdir symboledCrashes find `ls -d *.xccrashpoint` -name "*.crash" -print -exec cp {} allCrashes/ /; cd allCrashes for crash in *.crash; do ../symbolicatecrash $crash > ../symboledCrashes/V$crash done cd .. echo "" echo "--- DONE ---" echo ""

La secuencia de comandos

Cuando ejecute el script, obtendrá 2 directorios.

  1. allCrashes : todos los fallos de todos los xccrashpoint estarán allí.

  2. symboledCrashes - los mismos bloqueos pero ahora con todos los símbolos.

  3. NO es necesario que limpie el directorio de los bloqueos anteriores antes de ejecutar el script. Se limpiará automáticamente. ¡buena suerte!


Solo una respuesta simple y actualizada para xcode 6.1.1.

PASOS

1.Xcode> Ventana> Dispositivos.

2. Seleccione un dispositivo de una lista de dispositivos en la sección DISPOSITIVOS.

3.Seleccione Ver registros de dispositivos.

4. En la sección Todos los registros, puede arrastrar directamente y soltar el informe.

5.Xcode simbolizará automáticamente el informe de bloqueo para usted.

6.Usted puede encontrar el informe de fallo simbólico haciendo coincidir su Fecha / Hora con la Fecha / Hora mencionada en su informe de bloqueo.


También puse dsym, el paquete de aplicaciones y el registro de fallos juntos en el mismo directorio antes de ejecutar simbolizar el bloqueo

Luego uso esta función definida en mi perfil. Para simplificar la ejecución de symbolicatecrash:

function desym { /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash -A -v $1 | more }

Los argumentos añadidos allí pueden ayudarte.

Puede verificar que Spotlight "vea" sus archivos dysm ejecutando el comando:

mdfind ''com_apple_xcode_dsym_uuids = *''

Busque el dsym que tiene en su directorio.

NOTA: A partir del último Xcode, ya no hay un directorio de desarrolladores. Puedes encontrar esta utilidad aquí:

/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Vers‌ ions / A / Resources / symbolicatecrash


Tuve que hacer mucho pirateo del script symbolicatecrash para que funcionara correctamente.

Por lo que puedo decir, symbolicatecrash en este momento requiere que .app esté en el mismo directorio que .dsym. Utilizará el .dsym para localizar el .app, pero no utilizará el dsym para encontrar los símbolos.

Debes hacer una copia de tu symbolicatecrash antes de intentar estos parches que harán que se vea en el dsym:

Alrededor de la línea 212 en la función getSymbolPathFor_dsymUuid

212 my @executablePath = grep { -e && ! -d } glob("$dsymdir" . "/Contents/Resources/DWARF/" . $executable);

Alrededor de la línea 265 en la función matchUUID

265 return 1;


Usando XCode 4, la tarea es aún más simple:

  • Organizador abierto,
  • haga clic en Biblioteca | Registro de dispositivos en la columna izquierda
  • Haga clic en el botón "Importar" en la parte inferior de la pantalla ...

y voilá. El archivo de registro se importa y simboliza automáticamente para usted. Siempre que haya archivado la construcción usando XCode -> Producto -> Archivar primero


Utilizamos Google Crashlytics para supervisar los registros de fallos, la sensación es muy oportuna y conveniente de usar.

Enlaces de documentos: https://docs.fabric.io/apple/crashlytics/missing-dsyms.html#missing-dsyms

Todo sobre Missing dSYMs Fabric incluye una herramienta para cargar automáticamente el dSYM de su proyecto. La herramienta se ejecuta a través del script / run, que se agrega a su Fase de compilación del script de ejecución durante el proceso de incorporación. Sin embargo, puede haber ciertas situaciones cuando las cargas de dSYM fallan debido a configuraciones de proyecto únicas o si está utilizando Bitcode en su aplicación. Cuando falla una carga, Crashlytics no puede simbolizar y mostrar bloqueos, y aparecerá una alerta "Falta dSYM" en el panel de control de Fabric.

Los dSYM que faltan se pueden cargar manualmente siguiendo los pasos que se describen a continuación.

Nota: Como alternativa a la herramienta de carga dSYM automatizada, Fabric proporciona una herramienta de línea de comandos (símbolos de carga) que se puede configurar manualmente para ejecutarse como parte del proceso de compilación de su proyecto. Consulte la sección de símbolos de carga a continuación para obtener instrucciones de configuración.

...


Utilizo Airbrake en mis aplicaciones, lo que hace un trabajo bastante bueno de registro remoto de errores.

Así es como los simbolizo con atos si el retroceso lo necesita:

  1. En Xcode (4.2) vaya al organizador, haga clic derecho en el archivo desde el cual se generó el archivo .ipa.

  2. En la Terminal, cd en el xcarchive por ejemplo MyCoolApp 10-27-11 1.30 PM.xcarchive

  3. Ingrese la siguiente atos -arch armv7 -o ''MyCoolApp.app''/''MyCoolApp'' (no olvide las comillas simples)

  4. No incluyo mi símbolo en esa llamada. Lo que obtienes es un cursor de bloque en una línea vacía.

  5. Luego copio / pego el código de mi símbolo en ese cursor de bloque y presiono enter. Verás algo como:

    -[MyCoolVC dealloc] (in MyCoolApp) (MyCoolVC.m:34)

  6. Has vuelto a un cursor de bloque y puedes pegar en otros símbolos.

Ser capaz de realizar un seguimiento de un elemento sin volver a ingresar el primer bit es un buen ahorro de tiempo.

¡Disfrutar!


atos está en desuso por lo que si está ejecutando OSX 10.9 o posterior, es posible que deba ejecutar

xcrun atos

Advertencia: / usr / bin / atos se está moviendo y se eliminará de una futura versión de OS X. Ahora está disponible en las herramientas de desarrollo de Xcode para ser invocado a través de: xcrun atos