Over the weekend, I was having some hard drive issues. While I think I fixed the issues, I’ve been keeping a close eye on my console (Console.app) to look for any hints that the issues are more major than those that can be repaired by Disk Utility.
However, while watching my console, I noticed something: there are a LOT of spammy Mac apps out there!
Most Mac/Objective-C developers are aware of the
NSLog() function, which, while in an Xcode environment, outputs data to the Xcode console. It’s usually one of the first things a new developer learns about and it’s very useful for debugging. What many developers may not realize is that
NSLog() continues to output data to the system logs even when the app is not being run from within Xcode. As a result, the console fills up with messages that don’t mean a whole lot to people looking at the console.
Now, I don’t want to come across as saying you should never use
NSLog() outside of Xcode. There are times when outputting debug data to the console is fine. But some of the things I see are people echoing objects into the log or short text strings that are obviously method names. These aren’t helpful to people looking at the console and, arguably, aren’t helpful to a developer once an app is in the wild. Once your app is in the wild, data in the logs should indicate error conditions in your app.
NSLog() is fine for debugging in Xcode, but you should be careful to remove them when you’re done. A good question I ask myself before leaving an
NSLog() in place is, “if a user filed a support request with this data, would it help me fix their problem?” Most of the time, the answer is no.
So before releasing an app, do a quick search in your project for all uses of
NSLog() and evaluate whether they are really needed.