We can store normal logs to file but when application crashes then how to store the cause of crash in file.So we can able to know the cause. How can we store crash logs in iOS application.
Asked
Active
Viewed 501 times
0
-
Consider using a crash reporter service like Crashlytics or Crittercism. – maroux May 31 '13 at 08:24
1 Answers
0
in main.m file
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// int retVal = UIApplicationMain(argc, argv, nil, nil);
// [pool release];
// return retVal;
int retVal;
@try
{
retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([SRSPoulinsAppAppDelegate class]));
}
@catch (NSException *exception)
{
NSLog(@"CRASH: %@", exception);
// NSLog(@"Stack Trace: %@", [exception callStackSymbols]);
NSString *BugFileName = @"BugTracker.txt";
// Check if the SQL database has already been saved to the users phone, if not then copy it over
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:BugFileName];
// Check if the database has already been created in the users filesystem
success = [fileManager fileExistsAtPath:writableDBPath];
// If the database already exists then return without doing anything
if(success)
{
NSString *error = [NSString stringWithFormat:@"%@",exception ];
NSString *errorDesc = [error stringByAppendingString:[NSString stringWithFormat:@"\n%@",[exception callStackSymbols]]];
NSFileHandle *fileHandler = [NSFileHandle fileHandleForUpdatingAtPath:writableDBPath];
[fileHandler seekToEndOfFile];
[fileHandler writeData:[errorDesc dataUsingEncoding:NSUTF8StringEncoding]];
[fileHandler closeFile];
}
else
{
writableDBPath = [documentsDirectory stringByAppendingPathComponent:BugFileName];
//create file if it doesn't exist
if(![[NSFileManager defaultManager] fileExistsAtPath:writableDBPath])
{
[[NSFileManager defaultManager] createFileAtPath:writableDBPath contents:nil attributes:nil];
}
//append text to file (you'll probably want to add a newline every write)
NSString *error = [NSString stringWithFormat:@"%@",exception ];
NSString *errorDesc = [error stringByAppendingString:[NSString stringWithFormat:@"\n%@",[exception callStackSymbols]]];
NSFileHandle *file = [NSFileHandle fileHandleForUpdatingAtPath:writableDBPath];
[file seekToEndOfFile];
[file writeData:[errorDesc dataUsingEncoding:NSUTF8StringEncoding]];
[file closeFile];
}
// [request setDidFinishSelector:@selector(requestFinished:)];
//[request setDidFailSelector:@selector(requestFailed:)];
}
@finally
{
}
return retVal;
}

kirti Chavda
- 3,029
- 2
- 17
- 29
-
Note that this will only work for Obj-C exceptions. Not EXC_BAD_ACCESS and other such crashes. – maroux May 31 '13 at 08:24