2011-06-06

iPhoneアプリ開発: アプリリリース時にコンソール出力を隠す

NSLog()によるコンソール出力は、デバグ手段としてよく利用されています。
この出力、実はリリース用ビルドしてもそのまま見えています。

コンソール出力の見方は次の通り。
(Xcode4の場合)iOSデバイスをMacに接続する>「Organizer」を開く>「Devices」タブを選択>該当デバイスを選択>「Console」を選択>iOSデバイス上で、適当なアプリを操作
※AppStoreにリリースされているアプリをこの方法で確認してみると、コンソール出力を隠していないものが多数あるようです。

では、リリース時にNSLog()のコンソール出力を消す/隠すにはどうしたらよいか。
一番愚直なのはNSLog()をコメントアウトですが、すでにソースコード上に多数ある場合は面倒です。
検索すると、マクロを定義して何とかするというのが一般的のようですね。

ざっと見ていると、いくつか方法があるようでした:
・フラグをどうするか: DEBUG_MODE, NS_BLOCK_ASSERTIONS など
・ログ用関数はどうするか: NSLogを使う or DLogのような自作関数を使う

私の場合は、
・すでにコード上にNSLog関数をたくさん埋め込んでいる→NSLogはそのままがいい
・同じくデバグ用に使うNSAssertについては、とりあえずおいておく(参考:NSLogとNSAssertの無効化
・できるだけ手数の少ない方法
といった怠惰な理由で次の方法をとりました。

#ifndef __OPTIMIZE__
    #define NSLog(...) NSLog(__VA_ARGS__)
#else
    #define NSLog(...) {}
#endif
※引用元: Removing NSLogs on Release Builds

このコードを「アプリ名_Prefix.pch」に追加するだけです。
その他のファイル(プロジェクトファイル)などの編集は不要です。
ちなみに、「__OPTIMIZE__」というフラグは、リリース用ビルドでデフォルトで定義されているものです。

0 件のコメント: