objective-cnslog

redefine NSLog in Xcode


I Have a question about Xcode and Objective-C.

I want to make this simple action in Xcode:

If I type this :

NSLog(@"something else");

I want Xcode to write (or execute after compile):

NSLog(@"[%@] something else", NSStringFromClass([self class]));

Another way could be for Xcode 4 to suggest this in the autocomplete menu, when I type NSLog...


Solution

  • Here is a complete set of Log #define directives (including ULog, a UIAlertView based Logging feature)

    // DLog will output like NSLog only when the DEBUG variable is set
    
    #ifdef DEBUG
    #   define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
    #else
    #   define DLog(...)
    #endif
    
    // ALog will always output like NSLog
    
    #define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
    
    // ULog will show the UIAlertView only when the DEBUG variable is set 
    
    #ifdef DEBUG
    #   define ULog(fmt, ...)  { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%s\n [Line %d] ", __PRETTY_FUNCTION__, __LINE__] message:[NSString stringWithFormat:fmt, ##__VA_ARGS__]  delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; }
    #else
    #   define ULog(...)
    #endif
    

    As written by Ciryon, just put them in your precompiled header (.pch) file.

    (source: http://overbythere.co.uk/blog/2012/01/alternatives-nslog)