iPhone デバッグ用のマクロ

iPhone アプリをデバッグするときに、ソースに NSLog をそのまま書いてしまうと、リリース時に削除するのが面倒なので、以下のようなマクロを使っています。

#ifdef DEBUG
#  define LOG(...) NSLog(__VA_ARGS__)
#  define LOG_METHOD NSLog(@"%s", __func__)
#else
#  define LOG(...) ;
#  define LOG_METHOD ;
#endif

使い方は、まずプロジェクトの設定を開き、「Debug」構成を選択してから、一番下のユーザ定義カテゴリの「GCC_PREPROCESSOR_DEFINITIONS」に「DEBUG」を追加しておきます。

こうすることで、Debug build のときにだけ「DEBUG」が定義されます。

あとは、NSLog の代わりに LOG を使うようにすれば ok です。

LOG(@"initialized %@", obj);

また、LOG_METHOD と書くと、Debug build のときだけメソッド名をデバッグログに表示します。

- (void)applicationDidFinishLaunching:(UIApplication*)application
{
  LOG_METHOD;
}

出力:

-[AppController applicationWillFinishLaunching:]

追記 (2008/11/21)

SDK 2.2 向けに更新しました。

追記 (2009/4/23)

NSStringFromSelector(_cmd) ではなく、__func__ を利用するように変更しました。