Hace unas semanas estuve lidiando con el proceso de enviar una aplicación en Xamarin.Forms al AppStore, tras un día de revisión, recibí la notificación de que había sido rechazada, revise los detalles...

Y ahí estaba, la aplicación había sido rechazada porque tenía un crash al iniciarla, es decir ni siquiera habían podido probarla :(

Obviamente Apple incluye los logs para que podamos revisar que pasó, pero si abren esos archivos notaran que algo nos falta para poder tener una pista de lo que pasa.

Echemos un vistazo a este fragmento de un archivo .crash.

Como pueden notar a simple vista, es indescifrable.

Symbolication al rescate

Symbolication es el proceso de resolver backtrace addresses a código fuente, métodos o nombres de funciones, conocidas como símbolos. Sin efectuar este proceso en un crash report es difícil determinar donde ha ocurrido el crash.
Referencia https://developer.apple.com/library/archive/technotes/tn2151/_index.html

Simbolizar iOS Crash Files (Xamarin.iOS)

  1. Reúne los archivos necesarios. Ubica tus archivos *.crash y *.dSYM en alguna ubicación de fácil acceso como tu escritorio. Recuerda que el archivo dSYM debe corresponder al build que genero el crash. Si no tienes los archivos adecuados el proceso sencillamente no funcionará.

  2. En el caso de Xamarin, tu archivo .dSYM se encontrara en la carpeta TU_PROYECTO.iOS\bin\BUILD_CONFIG\AppStore. Por ejemplo DemoApp.iOS\bin\iPhone\AppStore\DemoApp.iOS.app.dSYM

  1. Antes de iniciar el proceso, crearemos un alias para trabajar más rápidamente con la herramienta symbolicatecrash. Para eso abrimos un Terminal y ejecutamos el siguiente comando:

     alias symbolicate="/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash -v"
    

  1. No olvidemos actualizar el Developer directory.

     export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
    

  1. Ahora nos ubicamos en el directorio donde colocamos nuestros archivos en el primer paso y ejecutamos el comando symbolicatecrash a través del alias que creamos antes. Teniendo en cuenta los parametros:

     symbolicate -o "OUTPUT_FILE_NAME.txt" "crashlog-XXXX.crash" YOUR_APP.iOS.app.dSYM
    

Esto simbolizara el archivo de crash y colocara el resultado en un nuevo archivo llamado OUTPUT_FILE_NAME.txt. Con eso ahora podemos analizar el crash y con algo de suerte lo que encontraremos tendrá sentido para nosotros o al menos se podrá buscar en Stackoverflow ;)