IOSアプリのビュー階層を検査するGUIツールはありますか? WebkitのWebインスペクターまたは同様のツールについて考えています。ビューの位置やサイズが間違っている、子が親に適切に含まれていないなど、レイアウトの問題をデバッグしようとしています。現在、これらのさまざまな条件を手動でテストするか、さまざまなビューにさまざまな背景色を設定するアサートを追加する必要があります。想像できるように、これは本当に退屈な方法です。
InstrumentsのUI recorder
を見ましたが、それはUIアクションの記録と再生のみであり、いずれにしても、Macアプリでのみ機能します。
より良い解決策はありますか?
Xcode 6には、Reveal AppやSpark Inspectorなどの3Dビュー階層検査が組み込まれています。
アプリの実行中に[ビュー階層のデバッグ]ボタンをクリックして、現在の実行を一時停止し、ビューを検査します。
詳細は Appleのドキュメント をご覧ください。
GUIビュー検査ツールがあるかどうかはわかりませんが、UIViewのデバッグメソッドには多少の運がありました:-recursiveDescription
デバッガでプログラムを一時停止し、これをGDBに入力した場合(編集:LLDBでも機能します)
po [[UIWindow keyWindow] recursiveDescription]
ビュー階層全体のプリントアウトを取得します。特定のビューでそれを呼び出して、そのビューのビュー階層のプリントアウトを取得することもできます。
そこから得た情報に目を通すのは少し退屈かもしれませんが、私にとっては有用であることがわかりました。
クレジットは このブログ投稿 にあります。この方法について説明し、 これは便利ですが、Apple tech note にもリンクしています。
奇妙なことに、今、別のオプション http://revealapp.com/ があります。これは、この投稿の時点でオープン(無料)ベータ版です。あなたが見ることができるように、それは別の視覚検査官です。
編集2014-04-05:Revealはベータ版ではなくなり、無料ではなくなりました。ただし、30日間の試用版があります。
この質問は古いですが、私が開発した新しいツールについての情報をここに入れてみましょう: https://github.com/glock45/iOS-Hierarchy-Viewer
このスレッドを最新の状態に保つために、最近 Spark Inspector で遊んでいます。無料ではありませんが、とても素敵です。
FLEX Debugger は、実行中のアプリのUIを変更できるアプリ内ビューインスペクターを提供します。また、ネットワーク要求を記録します。
スイフト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()
無料:インスペクタにこれを入力するだけです:
po [[UIWindow keyWindow] recursiveDescription]
コマーシャル: http://revealapp.com/ 私はrevealappのベータ版をテストしましたが、バグはありましたが良かったです。別の商用ツール: http://sparkinspector.com/ それはシームレスに動作しています。
これにより、デバッグウィンドウにすべてがダンプされます。
po UIApplication.shared.keyWindow?.recursiveDescription()
Swift/Xcode 10の場合、これをデバッグコンソールに入力します。
po yourView.value(forKey: "recursiveDescription")!
指定されたUIView
の再帰的階層を出力します。
(クレジット: recursiveDescriptionを使用してビュー階層をデバッグする方法 )
Xcode 8およびSwift 2.3を使用して、承認済みの回答が機能しなくなりました。これが私に役立つことです:
po UIApplication.sharedApplication().keyWindow?.recursiveDescription()