Làm cách nào để kiểm tra phân cấp chế độ xem trong iOS?


170

Có công cụ GUI nào kiểm tra phân cấp chế độ xem của ứng dụng iOS không? Tôi đang suy nghĩ về trình kiểm tra web của Webkit hoặc các công cụ tương tự. Tôi đang tìm cách gỡ lỗi các vấn đề về bố cục, như các khung nhìn có vị trí hoặc kích thước sai hoặc một đứa trẻ không được chứa chính xác trong cha mẹ của nó. Hiện tại tôi phải thêm các xác nhận kiểm tra các điều kiện khác nhau này bằng tay hoặc đặt các màu nền khác nhau trên các chế độ xem khác nhau và như bạn có thể tưởng tượng, đó là một cách thực sự tẻ nhạt.

Tôi đã xem xét dụng cụ UI recorder, nhưng chỉ ghi lại và phát lại các hành động UI 'và, trong mọi trường hợp, chỉ hoạt động cho các ứng dụng Mac.

Có một giải pháp tốt hơn?

Câu trả lời:


168

Xcode 6 hiện có kiểm tra phân cấp chế độ xem 3D được tích hợp như Reveal App và Spark Inspector.

nhập mô tả hình ảnh ở đây

Nhấp vào nút "Gỡ lỗi Chế độ xem phân cấp" trong khi ứng dụng của bạn đang chạy để tạm dừng thực thi và kiểm tra các chế độ xem tại thời điểm hiện tại.

nhập mô tả hình ảnh ở đây

Thông tin thêm tại tài liệu của Apple .


5
Nếu tùy chọn gỡ lỗi chế độ xem không khả dụng, hãy xem stackoverflow.com/questions/24040322/ .
kennytm

Lúc đầu, tôi không thấy thanh công cụ được hiển thị bởi Levi McCallum vì nó nằm ở dưới cùng của cửa sổ Xcode nếu ứng dụng không có bất kỳ đầu ra gỡ lỗi nào. Và một khi nút được ấn, cửa sổ Xem phân cấp sẽ trống cho đến khi tôi nhấn một trong các nút ở phía dưới hoặc điều chỉnh một trong các thanh trượt.
Carl Smith

Một khi bạn bắt đầu dựa vào công cụ này, nó luôn luôn khao khát. Tôi không biết tại sao hoặc làm thế nào để khắc phục nó nhưng dường như nó xảy ra trên các quan điểm phức tạp hơn.
Departamento B

263

Tôi không biết có công cụ kiểm tra giao diện GUI hay không, nhưng tôi đã gặp may mắn với phương pháp gỡ lỗi trên UIView: -recursiveDescription

nếu bạn tạm dừng chương trình trong trình gỡ lỗi và nhập chương trình này vào GDB (Chỉnh sửa: cũng hoạt động trong LLDB)

po [[UIWindow keyWindow] đệ quy Mô tả]

Bạn nhận được một bản in của toàn bộ hệ thống phân cấp xem của bạn. Bạn cũng có thể gọi nó trên một chế độ xem cụ thể để có bản in phân cấp chế độ xem của chế độ xem đó.

Có thể hơi tẻ nhạt khi lội qua thông tin bạn nhận được từ nó, nhưng nó đã tỏ ra hữu ích với tôi.

Tín dụng vào bài đăng trên blog này đã nói về phương pháp này và cũng được liên kết với điều này hữu ích, nhưng khá khó để tìm thấy ghi chú công nghệ của Apple .


1
Tôi đã có: lỗi: không thể tìm thấy khai báo giao diện cho '$ __ lldb_objc_ class' bất kỳ ý tưởng nào? (LLĐB) po [[UIWindow keyWindow] recursiveDescription] lỗi: không thể tìm thấy lời tuyên bố giao diện cho '$ __ lldb_objc_class' lỗi: không thể tìm thấy lời tuyên bố giao diện cho '$ __ lldb_objc_class' lỗi: 2 lỗi phân tích cú pháp biểu hiện
Zennichimaro

1
Tôi tin rằng câu trả lời này không còn là câu trả lời chính tắc nữa, vì hiện tại đã có sẵn các công cụ GUI trả lời trực tiếp câu hỏi 'Có công cụ GUI nào không ...?'
theraven

bắt đầu với xcode 5.1 Tôi bắt đầu gặp lỗi này bất cứ khi nào tôi gõ recursiveDes mô tả: phương thức cá thể 'undoManager' có các loại kết quả không tương thích trong các đơn vị dịch khác nhau ('id' so với 'NSUndoManager *') : 1 lỗi biểu hiện phân tích cú pháp
abbood

1
Trong khi câu hỏi đã cũ và hỏi về các phương pháp đồ họa, câu trả lời cụ thể này liên quan đến các giải pháp văn bản. Một cuộc thảo luận về giải pháp in-canonical có thể được tìm thấy, ví dụ ở đây: stackoverflow.com/a/14193682/2431627 . tức là sử dụng thuộc tính _printHVELy ​​qua KVC.
Robin Macharg

46

Hiển thị ảnh chụp màn hình ứng dụng

Thật kỳ lạ, bây giờ có một tùy chọn khác, http://revealapp.com/ , mà tính đến thời điểm này là bản beta mở (miễn phí). Như bạn có thể thấy đó là một thanh tra trực quan khác.

EDIT 2014-05-05: Reveal đã hết Beta và không còn miễn phí. Có một thử nghiệm 30 ngày, tuy nhiên.


1
Tôi đã thử một vài công cụ cho việc này (Spark Inspector, Trình xem phân cấp iOS và chế độ xem giống như con bọ lửa trong công cụ kiểm tra Frank). Cho đến nay Reveal là yêu thích của tôi.
Hầm

1
Nhưng HOÀN TOÀN vẫn còn giá trị nó. Cách tốt hơn so với các công cụ Xcode tích hợp để xem lượt xem
Will Larche

35

Câu hỏi này đã cũ nhưng hãy để tôi đặt thông tin ở đây về công cụ mới mà tôi phát triển: https://github.com/glock45/iOS-HVELy-Viewer nhập mô tả hình ảnh ở đây


có thể tự động làm mới trang khi tôi điều hướng đến chế độ xem khác trong trình giả lập không? hơn nữa, có thể thay đổi giá trị trong trình xem này không (vì vậy tôi có thể thực hiện một số thử nghiệm trên trình duyệt mà không cần viết mã thực)? cảm ơn :)
Brian

1
@Brian cảm ơn Não. Tôi bắt đầu khả năng nguyên mẫu để thay đổi giá trị. Nó đã bị tắt trong bản phát hành chính thức. Giữ nguyên !
Damian Kołakowski

Cảm ơn rất nhiều cho lời đề nghị. Tôi đã quản lý để giải quyết vấn đề của mình với công cụ này, một vấn đề không thể giải quyết bằng trình gỡ lỗi UI của Xcode!
D6mi

Cảm ơn, Damian, nhưng đối với những người đọc nó, công cụ này dường như không rõ ràng.
Vaddadi Kartick



6

Miễn phí: Chỉ cần gõ này trong thanh tra:

po [[UIWindow keyWindow] recursiveDescription]

Quảng cáo: http://revealapp.com/ Tôi đã thử nghiệm phiên bản beta của lộ diện, nó vẫn tốt mặc dù có lỗi. Một công cụ thương mại khác: http://sparkinspector.com/ nó hoạt động trơn tru.


Spark Inspector có trình xem thông báo đẹp
thierryb

6

Swift 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"))))
   }
}

Cách sử dụng (trong trình gỡ lỗi): po myView.dump()


2

Điều này bỏ tất cả trong cửa sổ gỡ lỗi. (Khó đọc tho) :( Làm việc trên iOS 10, Xcode 8.3.3

po UIApplication.shared.keyWindow?.recursiveDescription()

0

Câu trả lời được phê duyệt không còn hiệu quả với tôi, sử dụng Xcode 8 và Swift 2.3. Đây là những gì làm việc cho tôi:

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


1
Cảm ơn, mph, nhưng điều này không hoạt động trong Swift 3: error: property 'shared' không tìm thấy trên đối tượng thuộc loại 'UIApplication'
Vaddadi Kartick

Swift 4 và Xcode 9.1 phàn nàn với "lỗi: <EXPR>: 3: 32: lỗi: không thể gọi giá trị của loại không chức năng 'UIApplication' UIApplication. SharedApplication (). KeyWindow? .RecursiveDescrip ()"
Jason Harrison

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.