いさぽん部屋(isapon.com)

ゲーム系プログラマによる特に方針のないブログ。技術系とカレー、ラーメンネタ多めだったはずが、最近はダイエットネタ多め。

実機のログをコンソール(ターミナル)から見る

3回ほどハマったのでメモ。


NSLog を止めて os_log を使う

iOS10以降はログのシステムが変わったので、基本的にはNSLogを使うのではなくos_logというAPIを使います。そうしないと、現状では xcode のあの使いにくいコンソールログでしかログを確認できません。


使い方は簡単。os_log() という関数を呼び出すだけ。ただし、1点気を付けるのは "%s" ではなく %{public}s のように書きます。そうしないと、ログの出力時に のようになります(詳細は割愛)。


#import <os/log.h>
void log(const char* msg)
{
  os_log(OS_LOG_DEFAULT, "%{public}s", msg);
}

idevicesyslog を使う

idevicesyslog というコマンドは libimobiledevice というソフトウェアに含まれています。macosのHomeBrewを使ってインストールします。


brew update
brew upgrade
brew install usbmuxd --HEAD
brew install libimobiledevice --HEAD




インストールが終わったら


idevicesyslog




でログが見えます。

ログを成型する

idevicesyslog でログを見るとxcodeで見た時のように無駄に長ったらしいログが出ます。

Oct 18 13:27:21 devicename bundleid[710] <Notice>: hogehoge fugafuga

たぶん、見たいのは「hogehoge fugauga」の分だけ。そこで、sedを使ってログを成型。

idevicesyslog | sed -e 's/^.*<[A-Za-z]*>: //'

これで

hogehoge fugafuga

だけになります。あとは grep なりと組み合わせると、ログが見やすくなります。