search
LoginSignup
47

More than 5 years have passed since last update.

posted at

Xcode上でデバックを楽にするプラグインchiselの紹介

『アプリ道場 Advent Calendar 2015』23日目担当の@ToraDadyです。

先日、wantedlyの速習会に参加してきたんですが、そこで知った便利なツールchiselをご紹介します。

何が便利か

chiselは、facebookがOSSとして公開しているLLDBコマンドの拡張なんですが、例えば、taplogコマンドを使えば、シュミレータでアプリを動かしている時、タップしたUIButtonのサブクラス名を取得することができます。
これによって、既存実装を初めて見た時に、シュミレータの画面からソースコードを追うことが容易になります。

taplogコマンド

  • xcodeのプロジェクトを立ち上げてシュミレータを起動。
  • 一時停止ボタンをクリック

画像1.png

  • taplogをデバッグエリアに入力

画像2.png

  • 確認したいUIKitのパーツをクリック 画像3.png 画像4.png
(lldb) taplog
Process 2126 resuming
<ChiselTest.Sample1Button: 0x7ff400520740; baseClass = UIButton; frame = (115 602; 127 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7ff40051f0e0>>

pvcコマンド

pvcコマンドを使うと、シュミレータ上表示されている画面のviewcontroller名を取得することができます。

  • 名前を知りたいViewControllerがシュミレータ上で画面に表示されているときに一時停止ボタンをクリック。
  • pvcをデバッグエリアに入力
(lldb) pvc
<ChiselTest.ViewController 0x7fd68d11feb0>, state: appeared, view: <UIView 0x7fd68bc529c0>

pviewsコマンド

このコマンドは、表示されているViewControllerのviewの階層をツリー形式で表示してくれます。

(lldb) pviews
<UIWindow: 0x7fbf58620320; frame = (0 0; 375 667); autoresize = W+H; gestureRecognizers = <NSArray: 0x7fbf58621370>; layer = <UIWindowLayer: 0x7fbf58611130>>
   | <UIView: 0x7fbf586229f0; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x7fbf58618240>>
   |    | <ChiselTest.Sample1View: 0x7fbf58622d70; frame = (41 75; 295 430); autoresize = RM+BM; layer = <CALayer: 0x7fbf5860c100>>
   |    |    | <ChiselTest.Sample2View: 0x7fbf58623510; frame = (27 159; 240 128); autoresize = RM+BM; layer = <CALayer: 0x7fbf58623900>>
   |    |    |    | <UILabel: 0x7fbf58623c90; frame = (18 15; 128 21); text = 'Sample2View'; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7fbf58624290>>
   |    |    | <UILabel: 0x7fbf58626e40; frame = (27 8; 128 21); text = 'Sample1View'; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7fbf58627040>>
   |    | <ChiselTest.Sample1Button: 0x7fbf58627e90; baseClass = UIButton; frame = (115 602; 127 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7fbf58628440>>
   |    |    | <UIButtonLabel: 0x7fbf585985e0; frame = (12 6; 103.5 18); text = 'Sample1Button'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7fbf58598a70>>
   |    | <_UILayoutGuide: 0x7fbf58629230; frame = (0 0; 0 20); hidden = YES; layer = <CALayer: 0x7fbf58618260>>
   |    | <_UILayoutGuide: 0x7fbf58612440; frame = (0 667; 0 0); hidden = YES; layer = <CALayer: 0x7fbf586055e0>>

その他のコマンド

結構たくさんあるようで、ここで色々説明されています。

導入までの流れ

まずは、chiselのインストール
homebrewがインストールされていない場合はインストールから。

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew update

そして、chiselをbrewコマンドでインストール

brew install chisel

chiselの情報をを確認

brew info chisel

出力結果は以下の通りで、

chisel: stable 1.3.0
Collection of LLDB commands to assist debugging iOS apps
https://github.com/facebook/chisel
/usr/local/Cellar/chisel/1.3.0 (21 files, 136K) *
  Built from source
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/chisel.rb
==> Caveats
Add the following line to ~/.lldbinit to load chisel when Xcode launches:
  command script import /usr/local/opt/chisel/libexec/fblldb.py

ホームディレクトリに.lldbinitファイルを作成して、以下のコードを追加すべしと書いてあるのでその通りにする。
command script import /usr/local/opt/chisel/libexec/fblldb.py

これで準備完了。
あとは、xcode上でchiselのコマンドを叩くだけ。

参考情報

github
参考動画

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
47