実機で開発中のアプリの動作確認を行う際、Xcodeと接続していないときにもNSLogやprintf等で出力したログを確認したい場合があるかと思います。
iConsoleはアプリ内でログ閲覧するためのライブラリで、
このようにコンソールライクなウィンドウをアプリ内に表示してログを確認できるようになります。
iConsoleの特徴
アプリ内でログ閲覧できるようにすること自体は
- 出力したい文字列(=ログ)をプールする
- ログを確認するための画面を表示する
という2つの機能が最低限あればよいので、実際のところ自作しても大変ではないのですが、iConsoleは上記機能をラップしている以外に、多くの特徴を備えています。
たとえば、
- 5段階のログレベルを指定することで、ログ出力量を段階的にコントロールできる
- クラッシュ時に自動的にスタックトレースをロギングしてくれる
- コンソール画面の起動方法として、スワイプでの起動、シェイクでの起動といった機能を備えているので、アプリ本体のUIに変更が不要
- Emailでのログ送信
などなど。詳しい使い方は後述します。
また、リリースビルド用に、プリプロセッサマクロへの指定だけで処理をスキップするように実装されていたり、ログでメモリを食い過ぎないように最大数も定数で指定できたりと、しっかり作られている感があります。
使い方:基礎編
ここでは、シンプルにログ出力する方法を紹介します。
ソースコードを以下のURLよりダウンロード
iConsoleフォルダとGTMフォルダをプロジェクトに追加
メインウィンドウのクラスをiConsoleWindowに変更
MainWindow.xib がある場合は、Interface Builderからxibの中にあるメインウィンドウのオブジェクトのクラスにiConsoleWindowを指定します。
MainWindow.xibがない場合は、AppDelegateでiConsoleWindow.hをインポートし、UIWindowをiConsoleWindowに置き換えてください(iConsoleWindow は UIWindow のサブクラスです)。
ログを出力する
ログを出力したいクラスで iConsole.h をインポートし、
ログを出力したい箇所で、log: メソッドをコールします。
以上です。
デフォルトの状態では、スクリーンを下から上に3本指スワイプすることでコンソール画面を表示できます。
使い方:応用編
iConsole.h の定数を変更することでより便利に利用することができます。
いくつか重要なものをピックアップします。
この定数をコメントアウトし、Xcodeのビルド設定から、Preprocessor Macrosにdebugモードは"CONSOLE_ENABLED=1"、releaseモードは"CONSOLE_ENABLED=0"を指定してください。
これにより、リリースビルドでiConsoleWindowがオーバーライドしている個所はすべて無視され、iConsoleのシングルトンオブジェクト生成処理(sharedConsole)やログ出力処理(log:arguments:)はスキップされるようになります。
出力するログのレベルを指定します。
ログレベルは
と5段階で定義されており、またそれぞれのレベルでログを出力するメソッドとして
の5つが用意されています。
LOG_LEVEL定数に指定したレベル値より低いログのみが出力されるようになるので、たとえば、LOG_LEVELにLOG_LEVEL_CRASHを指定すると、log:, crash:を使用したログのみが出力されます。
また、LOG_LEVEL_NONEを指定するとすべてのログが出力されなくなります。つまり、log:メソッドはLOG_LEVEL_NONEのログを出力するというわけではなく、LOG_LEVEL_NONE以外すべてのログレベルで有効なログを出力するもの、という点にご注意ください。
この定数をオンにすることで、クラッシュ時に自動的にスタックトレースをログ出力してくれます。
この定数をオンにすることで、ログをNSUserDefaultsに保存してくれます。キーは"iConsoleLog"です。
ログの最大数を指定します。ログはNSMutableArray型のlogプロパティに貯められていくので、メモリを食い過ぎないよう注意が必要です。ちなみにログ出力メソッド(log: など)1回分が1ログという数え方になっています。
ログを Email 送信する際のデフォルト送信先を設定します。
まとめ
アプリ内でログ閲覧できるようになるライブラリ、iConsoleを紹介しました。ログを出力する、ログを閲覧するといった基本的な使い方以外にも、デバッグに役立つさまざまな便利機能を備えているので、ぜひお試しください。