Redirect NSLog to a file on the iPhone

If you need to debug your app when disconnected from your Mac (and from the console), redirect all your NSLog calls to a file so you can later read it.

The method below will create a file name « console.log » in the Documents folder of your application so you can later read it.

Just call this method in your program:

- (void) redirectConsoleLogToDocumentFolder
{
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                                                       NSUserDomainMask, YES);
  NSString *documentsDirectory = [paths objectAtIndex:0];
  NSString *logPath = [documentsDirectory 
                       stringByAppendingPathComponent:@"console.log"];
  freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
}

The log will never be erased, so use with caution.

Once you have tested your app in the filed, reconnect your phone to your Mac and in Xcode, open the Organizer.
In the Summary panel, you have the list of all the apps on your phone. Expand the one you’re debugging, and you’ll a package named « Application Data ».

Xcode Organizer
Xcode Organizer

Click the arrow on the right of its name and save this. You’ll end with a folder with a name of your Bundle Identifier followed by a date.

Inside this folder you’ll find your Documents Folder, which should contain the console.log.

Happy debugging.