Xcode에서 유용하게 사용할 수 있는 플러그인 (chisel)

이 플러그인이 나온지는 좀 된거 같은데 지금에서야 알게되어 유용하게 사용중 입니다. 만약 유지보수일을 하고 있다면 꽤 편리한 툴이라 생각되어 소개해 봅니다.

chisel은 Facebook에서 OSS로 공개한 LLDB 명령어 확장판인데 시물레이서에서 앱을 동작시킨 상태에서 다양한 명령어로 현재 터치한 버튼정보라던지 현재 보여지고 있는 컨트롤러등을 알려주어 소스코드를 쉽게 추척할 수 있습니다.

자주 써볼 법한 명령어를 소개하자면,

taplog 명령어

  1. xcode에서 시뮬레이터를 기동시킨 후(디바이스에서도 가능합니다)
  2. 디버그 아이콘 모여있는 부분에 있는 일시정지 버튼 을 누른다.
  3. 디버그창에 taplog 입력

시뮬레이터 상에 버튼등을 탭하면 디버그창에 아래와 같은 내용이 출력됩니다.

(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명령어는 시뮬레이서상에 표시되고 있는 뷰 콘트롤러를 취득할 수 있습니다.

  1. 알고싶은 ViewController를 표시한다.
  2. 디버그 아이콘버튼중 일시정지버튼을 클릭.
  3. 디버그청에 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>>

 

이외에도 많은 명령어가 있는데 자세히 알고 싶다면 디버그 콘솔에 help라고 입력하면  사용할 수 있는 명령어가 나열됩니다.(Current user-defined commands:라고 되어 있는부분)

명령어에 대한 자세한 설명은 help와 명령어를 같이 입력해 줍니다.
help border

이 툴의 Github페이지는 여기 입니다. (영어지만 자세히 설명되어 있네요.)
https://github.com/facebook/chisel

도입순서

설치는 맥 기준으로 설명합니다.
chisel을 설치하기전에 먼저 homebrew가 설치 되어있는지 확인합니다. 설치되어 있지 않다면 먼저 설치해야 합니다.

그리고 chisel을 brew 명령어로 설치합니다.

설치가 끝나면 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

정보에 출력되는 설명대로 홈디렉토리에 .lldbinit 라는 이름의 파일을 만들어 줍니다. (이미 존재하면 만들 필요없음)
맨 마지막줄을 카피하여 위에 만든 파일에 추가해 줍니다. (주의: 버전에 따라 출력되는 경로가 다를수 있으므로 블로그에 있는 경로가 아닌 자신의 맥에 출력된 정보를 이용할 것)
command script import /usr/local/opt/chisel/libexec/fblldb.py

설치가 끝났으므로 xcode를 기동하면 chisel 명령어를 사용할 수 있습니다.

 

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

トラックバック・ピンバック

トラックバックはありません。

トラックバック URL