iOS開発:NSLogはプリプロセッサで制御

NSLog関数でログを出力する。NSLogでログ出力していると、リリースビルドの時もログが出てしまう。C言語でも定番のプリプロセッサを利用して、リリース時に出したくないログなどを制御する。

参考サイト:

プリプロセッサ定数を定義

Xcodeを開いて、[Project] > [Supporting Files] > [App-Prefix.pch] で定義する。

[c]

#ifdef DEBUG

#define DLog(fmt, …) NSLog((@"%s (%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 (%d) " fmt), __PRETTY_FUNCTION\_, __LINE__, ##__VA_ARGS\_);

[/c]

ログを利用する

ログを利用するときは、以下のように書く。

[c]

– (void)func {

DLog();

DLog(@“log:%@”, self.name);

}

[/c]

ログはこのように出力される。

[ModelClass func:] (69)

[ModelClass func:] (69) log:name

ビルド設定を変更

プロジェクトの設定で、DEBUG定数が定義されていることを確認する。ついでに、DEBUG_CODE定数も定義しておいた。

_

”DEBUG=1”が2つもあるのはなぜ??”DEBUG”と書かれているだけでもOKなはず。

デバッグ用コードの利用

先ほど、デバッグ用コードのための定数も用意した。これを使って、デバッグのみに実行したいコードを書くこともできる。

[c]

– (void)func {

#if DEBUG_CODE

NSLog(@“log:%@”, self.name);

#endif

}

[/c]

デバッグ時のみ、複雑なログ出力処理を動かしたいときなどに便利。テスト用コードを埋め込むことも出来る。スタブの切替などにも使えると思う。

こうやってログの事を書くと、アスペクトが気になってくる。ちょっとググってみたところ、AspectCocoaというものがあるようだ。

投稿日 2012年08月11日