SenTestingKitでNSLogを監視する
Cocoa開発でテストを行う時にはSenTestingKit.frameworkを使います。使い方も簡単でそれほど不満はないのですが、一つだけ大きな不満があります。NSLogがXcodeのデバッグコンソールに表示されないということです。NSLogだけでなく、CFShow, printf全て表示されず、デバッグコンソール自体が動いていないようです。
これだと何かと不便なこともあるので、テスト時のNSLogをターミナル上で監視するスクリプトをperlで書いてみました。テスト時のログ専用tail -fみたいなものです。
use File::Tail; my $file = File::Tail->new( name => "/var/log/system.log", maxinterval => 2, tail => -1, ); while (defined (my $line = $file->read)) { print "$line" if $line =~ /otest/; }
テスト時にはNSLogはXcodeで表示されないのですが、ちゃんとシステムのログには残っています(/var/log/system.log)。そこで、そのファイルをFile::Tailを使って読み込み、2秒ごとに更新チェックをするようにします。
File::Tailの詳しい使い方はcpanをチェックしてください。
http://search.cpan.org/~mgrabnar/File-Tail-0.99.3/Tail.pm
そして出力に関してですが、テスト時のNSLogは、
タイムスタンプ ホスト名 otest-x86_64[PID]: 出力内容
となっているので、今回はotestという文字列が含まれている行のみをprintしています。
いちいちターミナルをチェックしなければいけないのは面倒ですが、表示されないよりはマシですね。