So recently I’ve been working on Veteris (My App Store client/server) and YewTube (My YouTube client) and needed a better way to add logging to my apps without it logging on release builds.
Whilst searching for a solution I found a ancient Ars Technica article pointing to this link, Of course the links on the article are dead but I was able to extract enough information to get it working for me. Here’s how I implemented it.
So first, in a class you’d like to use, I used the AppDelegate you just need to add these lines to your header.
#ifdef DEBUG
#define DebugLog(args...) _DebugLog(__FILE__,__LINE__,args);
#else
#define DebugLog(x...)
#endif
@interface YourClass: NSObject
void _DebugLog(const char *file, int lineNumber, NSString *format,...);
@end
And you need to add these lines to the implementation.
void _DebugLog(const char *file, int lineNumber, NSString *message,...) {
NSString *string = [[NSString alloc] initWithUTF8String:file];
NSLog(@"%@:%d: %@", string, lineNumber, message);
}
Of course, there is probably a better way to write this implementation but I’m content with this. You can call the function like so.
DebugLog([NSString stringWithFormat:@"VAPIDeviceString = %@", [VAPIHelper getVAPIDeviceString]]);
Thank you for coming to my TED Talk and I hope someone finds this useful now, or in the future.