忍者ブログ

[PR]

2017年05月27日
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

デバッグのときだけコンソールに出力する

2009年03月16日
変数の内容確認のためにNSLogなどでコンソールに出力出来るのはとても便利です。ただ、リリース用のビルドをした時にこれらが残っていると、最終的にはAppStoreに並べたソフトが陰でログを吐きまくっているなどという事態が発生しかねません。開発をやっていない人が実機のコンソールを覗く事はあまり無いかもしれませんが、リリース用のビルドをする時にはこれらをコメントアウトしておくのが礼儀というものでしょう。とはいえ、いちいちコメントアウトしたり、それを解除したりするのは面倒なのでこの操作は自動化してしまいましょう。

まず、プロジェクトの情報を開きます。署名を切り替えたりするところです。そこの一番下までスクロールさせたところに、ユーザ定義というセクションがあります。構成をDebugに切り替えて、左下の歯車のマークをクリックして「ユーザ定義の設定を追加」を選んで行を追加します。そこで、追加された行の設定をGCC_PREPROCESSOR_DEFINITIONSに、値をDEBUGに変更します。次に自分がデバッグ時だけログを出したいメソッドファイルの頭に、以下のような行を挿入します。

#ifdef DEBUG

#define NSLog_for_DEBUG NSLog

#else

#define NSLog_for_DEBUG

#endif


これを入れておくと、これより下の部分に書いたNSLog_for_DEBUG(〜はDebugでビルドしたときだけNSLog(〜として機能し、Releaseでビルドした時には機能しません。このため、そのあとでReleaseからAppStore用の構成を作ったとしても、そちらでログ出力が行われる事もありません。プロジェクト全体をNSLog(で検索すれば、自動切り替えを行っていないところだけがピックアップできるので、それらの含まれているメソッドファイルにも上にある5行を挿入し置換を進めていけば、今までに作ったNSLog命令を全てデバッグ時のみ機能するように変更できます。こうしておけば、リリース版でログ出力をコメントアウトし忘れた、などといううっかりミスを無くせますし、コメントアウトをしたり戻したりといった手間もかからなくなります。エラーレポートがリリース版でも必要ならそこだけをNSLogのままにしておけば、リリース版でもログが出力される状態のままにできます。

追記
条件分岐をさせた上でログを出力しているため、それら条件分岐の部分もリリース版ではいらない部分になるという場合もあります。この場合は#ifdef DEBUGの行と#endifの行を直接メソッド内部に挿入し、リリースではいらなくなる部分をこの2行の間に入れます。こうすることでその部分がリリース用では無視されます。中括弧の数合わせが狂わないように挿入位置には十分注意しましょう。
PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字
Trackback
トラックバックURL: