iOS에서 뷰 계층을 어떻게 검사합니까?


170

iOS 앱의 뷰 계층을 검사하는 GUI 도구가 있습니까? Webkit의 웹 관리자 또는 유사한 도구에 대해 생각하고 있습니다. 위치 나 크기가 잘못되었거나 자식이 부모에 제대로 포함되지 않은 뷰와 같은 레이아웃 문제를 디버깅하려고합니다. 현재 나는 이러한 다양한 조건을 손으로 테스트하거나 다른 뷰에서 다른 배경색을 설정하는 주장을 추가해야하며 상상할 수 있듯이 실제로는 지루한 방법입니다.

나는 Instruments 's UI recorder를 보았지만 UI 액션 만 기록하고 재생합니다. 어쨌든 Mac 앱에서만 작동합니다.

더 나은 해결책이 있습니까?

답변:


168

Xcode 6에는 Reveal App 및 Spark Inspector와 같은 3D 뷰 계층 검사 기능이 내장되어 있습니다.

여기에 이미지 설명을 입력하십시오

앱이 실행되는 동안 "디버그보기 계층 구조"버튼을 클릭하여 실행을 일시 중지하고 현재 시점에서보기를 검사하십시오.

여기에 이미지 설명을 입력하십시오

Apple 문서에 대한 추가 정보 .


5
뷰 디버깅 옵션을 사용할 수없는 경우 stackoverflow.com/questions/24040322/…를 참조하십시오 .
kennytm

처음에는 앱에 디버그 출력이없는 경우 도구 모음이 Xcode 창의 맨 아래에 있기 때문에 Levi McCallum이 표시하는 도구 모음이 표시되지 않았습니다. 버튼을 누르면 하단의 버튼 중 하나를 누르거나 슬라이더 중 하나를 조정할 때까지 View Hierarchy (계층보기) 창이 비어있었습니다.
Carl Smith

이 도구에 의존하기 시작하면 항상 엉망이됩니다. 왜 또는 어떻게 고쳐야할지 모르겠지만 더 복잡한 뷰에서 발생하는 것 같습니다.
Departamento B

263

GUI보기 검사 도구가 있는지 모르겠지만 UIView의 디버깅 방법에 대해 운이 좋았습니다. -recursiveDescription

디버거에서 프로그램을 일시 중지하고이를 GDB에 입력하면 (편집 : LLDB에서도 작동)

po [[UIWindow 키 윈도우] 재귀 설명]

전체 뷰 계층 구조를 출력합니다. 특정보기에서 호출하여 해당보기의보기 계층 구조를 인쇄 할 수도 있습니다.

나가는 정보를 훑어 보는 것이 약간 지루할 수 있지만, 나에게 유용한 것으로 판명되었습니다.

크레디트는 이 방법에 대해 이야기하고 도움이되었지만 애플 테크 노트를 찾기가 어려운 이 블로그 게시물 로갑니다 .


1
오류가 있습니다 : '$ __ lldb_objc_class'에 대한 인터페이스 선언을 찾을 수 없습니까? (lldb) po [[UIWindow keyWindow] recursiveDescription] 오류 : '$ __ lldb_objc_class'에 대한 인터페이스 선언을 찾을 수 없습니다 오류 : '$ __ lldb_objc_class'에 대한 인터페이스 선언을 찾을 수 없습니다 오류 : 2 오류 구문 분석 표현식
Zennichimaro

1
'GUI 도구가 있습니까?'라는 질문에 직접 대답 할 수있는 GUI 도구가 있으므로이 답변이 더 이상 정식 답변이 아니라고 생각합니다.
theraven

xcode 5.1부터 recursiveDescription 오류를 입력 할 때 마다이 오류가 발생하기 시작했습니다. 오류 : 인스턴스 메소드 'undoManager'가 다른 번역 단위 ( 'id'대 'NSUndoManager *')에서 호환되지 않는 결과 유형을 가지고 있습니다. 참고 : 인스턴스 메소드 'undoManager'도 여기에 선언되었습니다 오류 : 발현 분석 (1 명) 오류
abbood

1
질문은 오래되었지만 그래픽 방법에 대해 묻지 만이 특정 답변은 텍스트 솔루션과 관련이 있습니다. 표준 코드 내 솔루션에 대한 설명은 여기 (예 : stackoverflow.com/a/14193682/2431627) 에서 찾을 수 있습니다 . 즉 KVC를 통해 _printHierarchy 속성을 사용합니다.
Robin Macharg

46

앱 스크린 샷 공개

이상하게도 이제는 이 게시물을 기준으로 공개 (무료) 베타 버전 인 http://revealapp.com/ 옵션이 있습니다 . 보시다시피 또 다른 시각적 검사기입니다.

편집 2014-04-05 : 공개는 베타 버전이 아니며 더 이상 무료가 아닙니다. 그러나 30 일의 평가판이 있습니다.


1
이를 위해 몇 가지 도구 (Spark Inspector, iOS Hierarchy Viewer 및 Frank 테스트 도구의 firebug-like view)를 시도했습니다. 지금까지 공개가 내가 가장 좋아하는 것입니다.
스튜

1
그러나 여전히 가치가 있습니다. 방법은 더 나은 전망을 볼 수있는 Xcode 툴을 내장보다
윌 Larche을

35

이 질문은 오래되었지만 내가 개발 한 새로운 도구에 대한 정보를 여기에 넣도록하겠습니다. https://github.com/glock45/iOS-Hierarchy-Viewer 여기에 이미지 설명을 입력하십시오


시뮬레이터에서 다른보기로 이동할 때 페이지를 자동으로 새로 고칠 수 있습니까? 또한이 뷰어에서 값을 변경할 수 있습니까 (실제 코드를 작성하지 않고 브라우저에서 일부 테스트를 수행 할 수 있습니까)? 고마워 :)
브라이언

1
@ 브라이언 감사 브레인. 값을 변경할 수있는 가능성을 프로토 타입하기 시작했습니다. 공식 릴리스에서는 꺼져 있습니다. 지켜봐주세요!
데미안 코와 코프 스키

제안 해 주셔서 감사합니다. Xcode의 UI 디버거를 사용하여 해결할 수없는이 도구로 문제를 해결했습니다!
D6mi

고마워요, 데미안하지만이 글을 읽는 사람들에게이 도구는 유지되지 않은 것 같습니다.
Vaddadi Kartick




6

스위프트 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()


2

이것은 디버그 창에서 모두 덤프합니다. (하드웨어 읽기) : (iOS 10, Xcode 8.3.3에서 작업

po UIApplication.shared.keyWindow?.recursiveDescription()

0

Xcode 8 및 Swift 2.3을 사용하면 승인 된 답변이 더 이상 작동하지 않습니다 . 나를 위해 무엇이 효과가 있습니까?

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


1
덕분에, mph,하지만이 스위프트 3 중 하나가 작동하지 않습니다 오류 : '공유'속성은 'UIApplication'유형의 객체를 찾을 수 없습니다
Vaddadi Kartick

Swift 4 및 Xcode 9.1은 "오류 : <EXPR> : 3 : 32 : 오류 : 비 기능 유형 'UIApplication'UIApplication.sharedApplication (). keyWindow? .recursiveDescription () '의 값을 호출 할 수 없습니다.
Jason Harrison

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.