Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I send crash report to Web service when application gets crashed?

As per client requirement i want to send crash Report when App get crash. How its possible to send crash report without crashing the app.Is there any link or document for this.

Please suggest me the way to do this.otherwise post me code for this.

Thank you.

like image 661
Developer Avatar asked Nov 05 '22 02:11

Developer


1 Answers

You can send your crash report when user start the application after the crash.

Download the crashManagetLib to read crash report.

You can write your crash reading code in didFinishLaunchingWithOptions like: -

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
    [self checkCrash];
}

// To check Crash and attach the crash file to Email
- (void) checkChrash
{
    //code for the application crash report.
    NSFileManager *file = [NSFileManager defaultManager];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *dir = [paths objectAtIndex:0];
    NSString *errorReportPath = [[dir stringByAppendingPathComponent:@"crash_report.plcrash"] retain];

    //Call Crash Manager if apps is crashed
    [[CrashManager sharedInstance] manageCrashes];
    [[CrashManager sharedInstance] setCrashDelegate:self selector:@selector(notifyException:stackTrace:)];

    //Mail Dialog is display if apps is crashed
    NSString* errorReport = [CrashManager sharedInstance].errorReport;

    if ([file fileExistsAtPath:errorReportPath]) 
    {
        if(nil != errorReport)
        {           
            // log out from facebook.
            [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"TOKEN"];

            NSString *crashResponce = [BKAPIClient sendCrashReportByMethod:aCrashReport WithErrorLog:errorReport];
            NSLog(@"%@",crashResponce);
            if ([crashResponce isEqualToString:@"True"])
            {
                NSLog(@"Crash Report has been sent !");
            }

            [file removeItemAtPath:errorReportPath error:nil];          
        }
    }

    [errorReportPath release];  
}

// For stack trace of crash
- (void) notifyException:(NSException*) exception stackTrace:(NSArray*)stackTrace
{
    // Oh no!  We crashed!
    // Time to output some stuff to the console.

    // Note: Any EXC_BAD_ACCESS crashes (such as accessing a deallocated object) will
    // cause the app to close stdout, so you won't see this trace in such a case.

    NSLog(@"Exception:\n%@\n", exception);

    NSLog(@"Full Trace:\n%@\n", [[StackTracer sharedInstance] printableTrace:stackTrace]);

    NSArray* intelligentTrace = [[StackTracer sharedInstance] intelligentTrace:stackTrace];
    NSLog(@"Condensed Intelligent Trace:\n%@", [[StackTracer sharedInstance] condensedPrintableTrace:intelligentTrace]);
}
like image 131
Maulik Avatar answered Nov 09 '22 09:11

Maulik