web-dev-qa-db-ja.com

iOSでビュー階層を検査するにはどうすればよいですか?

IOSアプリのビュー階層を検査するGUIツールはありますか? WebkitのWebインスペクターまたは同様のツールについて考えています。ビューの位置やサイズが間違っている、子が親に適切に含まれていないなど、レイアウトの問題をデバッグしようとしています。現在、これらのさまざまな条件を手動でテストするか、さまざまなビューにさまざまな背景色を設定するアサートを追加する必要があります。想像できるように、これは本当に退屈な方法です。

InstrumentsのUI recorderを見ましたが、それはUIアクションの記録と再生のみであり、いずれにしても、Macアプリでのみ機能します。

より良い解決策はありますか?

166
Vaddadi Kartick

Xcode 6には、Reveal AppやSpark Inspectorなどの3Dビュー階層検査が組み込まれています。

enter image description here

アプリの実行中に[ビュー階層のデバッグ]ボタンをクリックして、現在の実行を一時停止し、ビューを検査します。

enter image description here

詳細は Appleのドキュメント をご覧ください。

160
Levi McCallum

GUIビュー検査ツールがあるかどうかはわかりませんが、UIViewのデバッグメソッドには多少の運がありました:-recursiveDescription

デバッガでプログラムを一時停止し、これをGDBに入力した場合(編集:LLDBでも機能します)

po [[UIWindow keyWindow] recursiveDescription]

ビュー階層全体のプリントアウトを取得します。特定のビューでそれを呼び出して、そのビューのビュー階層のプリントアウトを取得することもできます。

そこから得た情報に目を通すのは少し退屈かもしれませんが、私にとっては有用であることがわかりました。

クレジットは このブログ投稿 にあります。この方法について説明し、 これは便利ですが、Apple tech note にもリンクしています。

260
Simon Goldeen

Reveal app screenshot

奇妙なことに、今、別のオプション http://revealapp.com/ があります。これは、この投稿の時点でオープン(無料)ベータ版です。あなたが見ることができるように、それは別の視覚検査官です。

編集2014-04-05:Revealはベータ版ではなくなり、無料ではなくなりました。ただし、30日間の試用版があります。

46
livingtech

この質問は古いですが、私が開発した新しいツールについての情報をここに入れてみましょう: https://github.com/glock45/iOS-Hierarchy-Viewer enter image description here

35

enter image description here

このスレッドを最新の状態に保つために、最近 Spark Inspector で遊んでいます。無料ではありませんが、とても素敵です。

17
livingtech

FLEX Debugger は、実行中のアプリのUIを変更できるアプリ内ビューインスペクターを提供します。また、ネットワーク要求を記録します。

https://github.com/Flipboard/FLEX

enter image description here

6
Scott Bossak

スイフト4。

iOS

extension UIView {

   // Prints results of internal Apple API method `recursiveDescription` to console.
   public func dump() {
      Swift.print(perform(Selector(("recursiveDescription"))))
   }
}

macOS

extension NSView {

   // Prints results of internal Apple API method `_subtreeDescription` to console.
   public func dump() {
      Swift.print(perform(Selector(("_subtreeDescription"))))
   }
}

使用法(デバッガー内):po myView.dump()

6
Vlad

無料:インスペクタにこれを入力するだけです:

po [[UIWindow keyWindow] recursiveDescription]

コマーシャル: http://revealapp.com/ 私はrevealappのベータ版をテストしましたが、バグはありましたが良かったです。別の商用ツール: http://sparkinspector.com/ それはシームレスに動作しています。

6
AVEbrahimi

これにより、デバッグウィンドウにすべてがダンプされます。

po UIApplication.shared.keyWindow?.recursiveDescription()
2
Alix

Swift/Xcode 10の場合、これをデバッグコンソールに入力します。

po yourView.value(forKey: "recursiveDescription")!

指定されたUIViewの再帰的階層を出力します。

(クレジット: recursiveDescriptionを使用してビュー階層をデバッグする方法

0
Albert Bori

Xcode 8およびSwift 2.3を使用して、承認済みの回答が機能しなくなりました。これが私に役立つことです:

po UIApplication.sharedApplication().keyWindow?.recursiveDescription()

0
mph