La idea de este post es mostrar los pasos que seguí para incluir  breakpad en un proyecto iOS. Al final del post encontraran un enlace para descargar un proyecto de ejemplo.

Breakpad es un framework open-source que permite acceder a la información contenida en los Crashlogs de aplicaciones en múltiples plataformas, y utilizar esa información para producir seguimientos del Stacktrace de cada subproceso de una app. Después del procesamiento, estos datos se ponen a disposición de los usuarios.

Para mas información sobre breakpad visita https://code.google.com/p/google-breakpad/

1) Crear en xcode un Proyecto. en el ejemplo use el nombre  “IOSBreakpad”

2) En el mismo directorio donde creaste el proyecto clonar el repo de breakpad y genera los binarios

$ svn checkout http://google-breakpad.googlecode.com/svn/trunk/ google-breakpad-read-only
$ cd google-breakpad-read-only
$ ./configure
$ make

3)Arrastra el archivo google-breakpad-read-only/src/client/ios/Breakpad.xcodeproj al xcode, dentro del proyecto IOSBreakpad

asegurate que Breakpad.xcodeproj no se encuentre abierto en otra instancia de xCode, sino no no lo podrás incluir en tu proyecto

4) Agregar la dependencia entre proyectos:
* En el editor de tu proyecto selecciona un target.
* Luego elige “Build Phase”
* expande la sección “Target Dependencies”
* Presiona sobre el signo (+)
* Selecciona la librería Breakpad

5) Vincular la librería de Breakpad:
* En el editor de tu proyecto selecciona un target.
* Luego elige “Build Phase”
* expande la sección “Link Binary With Libraries”
* Presiona sobre el signo (+)
* y dentro de tu workspace selecciona libBreakpad.a

6) Agregar referencias a los headers de breakpad
* En el editor de tu proyecto selecciona un target.
* Luego elige “Build Settings”
* Agregar a “Header Search Path” las siguientes referencias con el flag “non-recursive”

$(SRCROOT)/../google-breakpad-read-only/src/
$(SRCROOT)/../google-breakpad-read-only/src/client
$(SRCROOT)/../google-breakpad-read-only/src/client/ios

7) En tu archivo appDelegate incluí la librería

#import <BreakpadController.h>

…..

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[BreakpadController sharedInstance]start:NO];
[[BreakpadController sharedInstance]setUploadingEnabled:YES];
…..
}

…..

- (void)applicationWillTerminate:(UIApplication *)application
{
[[BreakpadController sharedInstance]stop];
…..
}

 

8) Si tenés muchos errores del tipo “Undefined symbols for architecture armv7……”
Incluí en tu proyecto un archivo “File.mm” vacío, para que xcode linkee la librería de C++ a tu proyecto.

9) agregar las siguientes Keys en el archivo plist de tu proyecto

Requeridas:
BreakpadURL => Url del servidor donde se subiran los minidump
BreakpadReportInterval = > tiempo de intervalo para el envio de los minidump

Hay muchas mas keys que son opcionales, algunas son:
BreakpadProduct
BreakpadProductDisplay

 

10) Scripts para generar archivos sym
* En el editor de tu proyecto seleccioná un target.
* Luego elige “Build Phases”
* Luego crea un script de compilación. Editor ->”Add Build Phase”->”Add Run Script Build Phase”
* Incluí este código en el script

 

#!/bin/sh

TOOL_DIR=[RUTA AL PROYECTO]/Projects/google-breakpad-read-only/src/tools/mac/dump_syms

PROD=$TARGET_BUILD_DIR/$EXECUTABLE_PATH

“$TOOL_DIR/dump_syms” -a armv7 “$PROD” > “$TARGET_NAME armv7.breakpad”

“$TOOL_DIR/dump_syms” -a armv7s “$PROD” > “$TARGET_NAME armv7s.breakpad”

“$TOOL_DIR/dump_syms” -a arm64 “$PROD” > “$TARGET_NAME arm64.breakpad”

11) Probablemente necesites desactivar la opción “Build Active Architecture Only” en tus Build Setting.

IMPORTANTE:

La librería ignora los crash cuando estás debugeando la app

 

Descarga el proyecto IOSBreakpad desde este enlace