it-swarm.com.ru

Как я проверяю иерархию представления в iOS?

Существует ли инструмент с графическим интерфейсом, который проверяет иерархию представления приложения iOS? Я думаю о веб-инспекторе Webkit или подобных инструментах. Я пытаюсь отладить проблемы макета, например, представления, имеющие неправильную позицию или размер, или дочерний элемент, который не содержится должным образом в его родительском элементе. В настоящее время я должен добавить утверждения, которые проверяют эти различные условия вручную, или устанавливать разные цвета фона для разных представлений, и, как вы можете себе представить, это действительно утомительный способ сделать это.

Я посмотрел на UI recorder от Instruments, но он только записывает и воспроизводит действия пользовательского интерфейса и, в любом случае, работает только для приложений Mac.

Есть ли лучшее решение?

157
Vaddadi Kartick

В Xcode 6 теперь есть встроенная проверка иерархии 3D-вида, такая как Reveal App и Spark Inspector.

enter image description here

Нажмите кнопку «Отладить иерархию представлений» во время работы приложения, чтобы приостановить выполнение и проверить представления в текущий момент.

enter image description here

Более подробная информация на документация Apple .

155
Levi McCallum

Я не знаю, есть ли инструмент проверки представлений GUI, но мне повезло с методом отладки в UIView: -recursiveDescription

если вы приостановите программу в отладчике и введете ее в GDB (Edit: также работает в LLDB)

po [[UIWindow keyWindow] recursiveDescription]

Вы получаете распечатку всей иерархии представления. Вы также можете вызвать его для определенного представления, чтобы получить распечатку иерархии представления этого представления.

Может быть немного утомительно разбираться в информации, которую вы получаете из нее, но она оказалась полезной для меня.

Авторы благодарны этому сообщению в блоге в котором говорится об этом методе, а также связанному с это полезно, но довольно сложно найти техническую заметку Apple .

259
Simon Goldeen

Reveal app screenshot

Как ни странно, теперь есть еще один вариант, http://revealapp.com/ , который на данный момент находится в открытой (бесплатной) бета-версии. Как видите, это еще один визуальный инспектор.

РЕДАКТИРОВАТЬ 2014-04-05: Reveal вышел из бета-версии и больше не является бесплатным. Однако есть 30-дневная пробная версия.

46
livingtech

Этот вопрос старый, но позвольте мне добавить информацию о новом инструменте, который я разрабатываю: https://github.com/glock45/iOS-Hierarchy-Viewerenter image description here

34
Damian Kołakowski

enter image description here

Просто чтобы держать эту ветку в курсе, я недавно играл с Spark Inspector . Это не бесплатно, но очень приятно.

17
livingtech

Отладчик FLEX предоставляет встроенный инспектор представления, который позволяет изменять пользовательский интерфейс в работающем приложении. Он также регистрирует сетевые запросы.

https://github.com/Flipboard/FLEX

 enter image description here

6
Scott Bossak

Бесплатно: просто введите это в инспекторе:

po [[UIWindow keyWindow] recursiveDescription]

Рекламный ролик: http://revealapp.com/ Я тестировал бета-версию reveapp, он был хорош, хотя и имел ошибки . Другой коммерческий инструмент: http://sparkinspector.com/ он работает без проблем ,.

6
AVEbrahimi

Свифт 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()

5
Vlad

Это сбрасывает все в окне отладки. (Трудно прочитать, хотя) :( Работа на iOS 10, Xcode 8.3.3 

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