自訂 NSLog以便發版和調試,自訂nslog調試
問題
- 開發中用了大量的
NSLog
,但是發布時想取消這些 NSLog
- 開發中是否經常用過
NSLog(@"%s", __FUNCTION__);
解決問題
- 建立
ExtendNSLog
類,繼承自 NSObject
- 在
ExtendNSLog.h
中刪除預設代碼
- 添加以下函式宣告:
void ExtendNSLog(const char *file, int lineNumber, const char *functionName, NSString *format, ...);
- 在
ExtendNSLog.m
中刪除預設代碼
- 添加以下代碼實現:
1 void ExtendNSLog(const char *file, int lineNumber, const char *functionName, NSString *format, ...) { 2 3 va_list ap; 4 5 va_start(ap, format); 6 7 if (![format hasSuffix: @"\n"]) { 8 format = [format stringByAppendingString: @"\n"]; 9 }10 11 NSString *body = [[NSString alloc] initWithFormat:format arguments:ap];12 13 va_end(ap);14 15 NSString *fileName = [[NSString stringWithUTF8String:file] lastPathComponent];16 fprintf(stderr, "(%s) (%s:%d) %s",17 functionName,18 [fileName UTF8String],19 lineNumber,20 [body UTF8String]);21 }
- 建立
PrefixHeader.pch
檔案
- 輸入以下內容:
1 #ifdef __OBJC__ 2 3 #import <UIKit/UIKit.h> 4 #import <Foundation/Foundation.h> 5 6 #import "ExtendNSLog.h" 7 8 #ifdef DEBUG 9 #define NSLog(args...) ExtendNSLog(__FILE__, __LINE__, __PRETTY_FUNCTION__, args);10 #else11 #define NSLog(x...)12 #endif13 14 #endif
- 選擇
項目
->TARGETS
->[ProjectName]
->Build Settings
- 在搜尋方塊輸入
prefix header
- 在
Prefix Header
中輸入 [ProjectName]/PrefixHeader.pch
如所示