The best approach to this would be to declare a preprocessor variable called DEBUG
in the header, include:
#define DEBUG 1
After that, for debug purposes, set DEBUG to 1, and NSLog everything.
#if DEBUG==1
NSLog(@"debug mode activated, value for certain variables is: %d", i);
#endif
Before you ship the product, just change
#define DEBUG 0
That way, you can just leave the entire code for debugging in the app, and keep it for further development
CLS_LOG from Crashlytics gives you access to the Log of the app from the Crashlytics website. It also gathers information about the crash, memory warnings, how many users crashed at a certain point, etc.
Happy coding!
edit:
I forgot to add one thing: for the application I'm working on right now, in the prefix, we defined:
#define NSLog(...) CLS_LOG(__VA_ARGS__)
So, we don't ever use CLS_LOG explicitly. We only use NSLog, but all the NSLogs make it to the Crashlytics dashboard.