Rhythm & Biology

Engineering, Science, et al.

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しています。

いちいちターミナルをチェックしなければいけないのは面倒ですが、表示されないよりはマシですね。