iOS開発でのNSLogはDEBUGマクロで使おう
今更ネタになりますがiOS開発でデバック処理をする際に
NSLogを利用する事が多いと思います。
そのままうっかり、NSLogを埋め込んだまま申請してしまう事あるんじゃないでしょうか?
実はこれが意外と危険だったりします。
NSLogの出力内容はリリース後のアプリからでも見る事が可能だからです。
実機をPCにつないでOrganizerとか
iPhone構成ユーティリティ開いてアプリ起動して見ると見れちゃいます。
NSLogにAPI処理のURL情報とかパラメータとか書いてあったら・・・
考えただけでもコワすぎです。
という事でNSLogデバック時のみ出力するためにC言語マクロを使って出力しましょうという所が今回。
前準備としては以下を
(
#ifdef DEBUG #define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); #else #define DLog(...) #endif // ALog always displays output regardless of the DEBUG alarm #define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
C言語のプリプロセッサ※1#ifdef文を利用して
Preprocessor MacrosでDEBUG設定されていた場合は
DLog記載情報に対し、NSLog出力を行います。
DEBUG設定がない場合はDLogと記載された情報は特に何も処理しないといった感じになります。
※1プリプロセッサについてはこことかでご確認ください
ちなみに、ALogの方は見ての通り、デバックモードと関係なく出力したい情報があった場合に使用します。
例えば、システムエラー等でログ情報としてリリース後も残したい場合などです。
マクロ※2の内容としてはざっと以下の感じになります。
マクロ名 | 内容 |
---|---|
__PRETTY_FUNCTION__ | クラス名とメソッド名の取得 |
__LINE__ | 行数の取得 |
##__VA_ARGS__ | Logに出力する情報取得 |
実際にViewContorllerクラスのViewDidLoadに以下のように記載して実行してみます。
#pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. DLog(@"test!!!"); }
[実行結果のコンソール]
2012-05-02 00:42:52.454 NSLogTest[4196:f803] -[ViewController viewDidLoad] [Line 25] test!!!
ちなみにLog出力情報として文字列は特に出したくないけど、きちんと処理が通ってるか確認したいとかって場合は
NSLogと違って引数無しで出力する事も可能です。
#pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. DLog(); }
[実行結果のコンソール]
2012-05-02 00:51:14.719 NSLogTest[4295:f803] -[ViewController viewDidLoad] [Line 25]
もちろん、通常のNSLog同様、引数に文字列等を表示させる事も可能です。
#pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSString* string = @"test!!!"; DLog(@"test!!! %@",string); }
[実行結果のコンソール]
2012-05-02 01:02:03.630 NSLogTest[4561:f803] -[ViewController viewDidLoad] [Line 26] test!!! test!!!
DEBUGマクロのXCode定義は
PROJECTのBuild Settigs、Apple LLVM compiler 3.0 - Preprocessiong
Preprocessor Macrosになります。
これでNSLogで情報だだ漏れを回避できますね。
ではでは〜
Shareしていただけると励みになりますので
良ければよろしくお願いします
良ければよろしくお願いします