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.