HOME » Natsu note » iOS » [Xcode][tool] ランタイムデバッガーSpark Inspectorが便利!

[Xcode][tool] ランタイムデバッガーSpark Inspectorが便利! 2013/05/14/|iOS,

デバッグ時にビューについての情報(重なりや位置、色など)を解析したくなることがよくあると思います。ビューの階層構造を知るための方法はいくつかありますが、先日見つけたSpark Inspectorがものすごく便利そうなのでご紹介します。

Spark Inspector – Runtime Debugger for iOS Apps

Spark InspectorはBonjourとMethod Swizzlingを利用したランタイムデバッガーです。プロジェクトにフレームワークを追加し、起動のためのコードを記述するだけで簡単に利用できます(実際には、これらの作業もアシスタントが自動で行ってくれるので、ほぼボタン一つで利用可能になります)。

できることは大きく分けて二つ。

  • ビューの状態を2Dまたは3Dで表示する。ビューやレイヤーをリアルタイムで編集する。
  • 通知センター(NSNotificationCenter)を監視する。

ビューの表示だけでも(特に3Dが)かなり感動しますが、これをリアルタイムで編集できるからなおさらすごいのです。

ビューの状態表示とリアルタイム編集

思い通りに画面が表示されないとき、ビューの階層をのぞいてみたくなりませんか。重なり順が間違っていたり、frameの設定を間違えて画面外に描画されていたり、または、予期せずhiddenになっていたり、、、理由は様々ですが、見えないものをデバッグするのは大変です。

Spark Inspectorは、すべてのビューの階層構造を見せてくれます。hiddenになっているものも教えてくれますし、3D表示すれば重なり方が悪いところも見つけられるでしょう。

また、実装中に、サイズ、位置や色などを微調整したいこともあると思います。Spark Inspectorがあれば、いちいちframeを変更してビルドして実機で確認、、、などという手間とはお別れです。Spark Inspector上で変更した値が、その場で動作中の実機またはシミュレータで確認できてしまいます(実機で利用する場合には、Macと実機が同一ネットワーク上に存在する必要があります)。パラメータ調整はSpark Inspectorで行い、最終決定した値だけを実装すればいいのです。

試しに、iLoan Calcで利用してみました。ビューの階層が以下のように表示されます。ここで、右側のサイドバーからビューやCALayerの値を変更することが可能です。CALayerでは、変換行列の値を指定することで変換が可能となっています(かなり高度な使い方ですね)。

Spark Inspector View Stack

通知センターの監視

通知センターの監視も便利です。もちろん、「誰が」「どの」通知を出したかがすぐに分かります。それと同時にStack Traceも表示されるという至れり尽くせりぶり。

通知は目に見えないので、デバッグが難しいところでもあります。それをこのように可視化してくれるというのはありがたいことですね。

利用方法

プロジェクトをSpark Inspectorに対応するのは簡単です。親切にもIntegration Assistantがついているので、これを利用しましょう。

メニューから”Window”->”Framework Setup Assistant”を選びます。セットアップウィザードが出てくるので、テストしたいプロジェクトを選択します。これで、必要な設定がすべて施されます。

自動で行われるのは、フレームワークの追加(SparkInspector.frameworkとlibz.dylib)と、コードの追加です。コードは、AppDelegate.m内に以下のように追加されます。#if DEBUGで区切られているのでプロダクト版に入ってしまう心配はありません。デバッグ中も常にonにしておくのではなく、必要なときだけonにしたければ、スキームでも追加すればよいでしょう。

#if DEBUG
#import <SparkInspector/SparkInspector.h>
#endif

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Enable the Spark Inspector
    #if DEBUG
    [SparkInspector enableObservation];
    #endif

    ...

なお、まれにフレームワークの追加がうまくいかずにObjcのリンクエラーが出ることがあるようです(出ました)。私の場合は、フレームワーク自体はプロジェクトに追加されていたのですが、TargetのBuild Phasesにある”Link Binary With Libraries”への追加がうまくいっていませんでした。二つのフレームワークを手動で追加してあげることで、無事にビルドできました。

さいごに

ざっと使ってみただけですが色々と便利そうです。ただ、サポートフォーラムを見ても分かるように、まだバグもありそうな感じです。うまい具合に使って、余計なところではまることのないように注意したいですね。

30日間は無料で試せるのでまずはダウンロードしてみてはいかがでしょうか。