Reveal
Reveal (http://revealapp.com/) なる iOS 向けのランタイムインスペクタなるものを知人のツイート経由で見つけた。ランタイムインスペクタとは何か ・・・ "Reveal brings the power of tools like Firebug and Web Inspector to iOS developers." ということでiOS アプリ用の Firebug みたいなのだと思えば良い。
動画を観てると確かにすごい。3D で動かしながら View の階層を手繰ってアプリのビューがどういう構造になっているかを見ていくことができる。更に動的にパラメータを変更して大きさや動きを変える、なんて Firebug の css の編集みたいなこともできるようだ。ベータ版は無料のようだ。
これは捗る。
RubyMotion で動かす
ドキュメントを見てみたところ Reveal を使うには、Reveal に同梱されている Reveal.framework をデバッグ対象のアプリケーションと static link さえすれば ok のようだ。これなら RubyMotion でも使えそうだ、というか使えた。先のスクリーンショットは半年くらい前に作って放置している RubyMotion アプリに適用してみたところ。画面は Formotion で描いているけど、問題なくデバッグできている。
Rakefile の Modtion::Project::App.setup
のコンテキストで
app.vendor_project( 'vendor/Reveal.framework', :static, :products => %w{Reveal}, :headers_dir => 'Headers' )
と書く。
Reveal.framework は Reveal を立ち上げて「Help > Show Reveal Library in Finder」とした所にあるので、それをコピーして RubyMotion プロジェクトの vendor ディレクトリの中にでも置く。(Reveal は "CocoaPods support will be coming soon!" ということなのでそのうちこの手間も省ける)
あとはこれで rake するだけ。
ビルドが完了した後 Reveal を見ると "No Connection" の select メニューに今現在立ち上げているエミュレータのアプリに接続できるメニューが出ているのでそれを選択。あとはよしなに。
ほか
ドキュメントを見るとダイナミックライブラリで統合する方法もあって、そちらを使えばコード内から Reveal を操作することができたりもするらしい。
仕組み的には Bonjour を使って iOS アプリケーションに接続する、とある。リンクされた Reveal.framework が Bonjour でネットワークを作成して Reveal と接続して画面の情報を送っているのだと思う。すごいなあ。*1
よく似たものに Spark Inspector (http://sparkinspector.com/) というものがあって、できることや Bonjour で実現しているあたりもほとんど同じようだけどこちらは使ったことがないのでその差はよく分からない。Twitter を見ていると Reveal の方が better だなんて発言もちらほらあるがどこがどう better なのかはまだわからず。
複雑なビューを組み立てるときのお供に愛用できる、かもしれない。
*1:Reveal.framework の中を見てみようと思ったが残念ながらバイナリしかなかった