İOS'ta görünüm hiyerarşisini nasıl denetlerim?


170

Bir iOS uygulamasının görünüm hiyerarşisini inceleyen bir GUI aracı var mı? Webkit'in web müfettişi veya benzeri araçları düşünüyorum. Yanlış konum veya boyuta sahip görünümler veya üst öğesinde düzgün bir şekilde bulunmayan bir çocuk gibi düzen sorunlarını ayıklamak istiyorum. Şu anda bu çeşitli koşulları elle test eden veya farklı görünümlerde farklı arka plan renkleri belirleyen ekler eklemeliyim ve tahmin edebileceğiniz gibi, bu konuda gerçekten sıkıcı bir yol.

Instruments'a baktım UI recorder, ancak bu sadece UI eylemlerini kaydediyor ve oynatıyor ve her durumda sadece Mac uygulamaları için çalışıyor.

Daha iyi bir çözüm var mı?

Yanıtlar:


168

Xcode 6 şimdi Reveal App ve Spark Inspector gibi yerleşik 3D görünüm hiyerarşi denetimine sahip.

resim açıklamasını buraya girin

Uygulamanız yürütmeyi duraklatmak ve geçerli andaki görünümleri incelemek için çalışırken "Görünüm Hiyerarşisinde Hata Ayıkla" düğmesini tıklayın.

resim açıklamasını buraya girin

Apple'ın belgelerinde daha fazla bilgi .


5
Görünüm hata ayıklama seçeneği yoksa, bkz. Stackoverflow.com/questions/24040322/… .
kennytm

İlk başta, Levi McCallum tarafından gösterilen araç çubuğunu görmedim çünkü uygulamanın herhangi bir hata ayıklama çıktısı yoksa Xcode penceresinin en altındadır. Düğmeye basıldığında, Alttaki düğmelerden birini itinceye veya kaydırıcılardan birini ayarlayana kadar Görünüm Hiyerarşisi penceresi boştu.
Carl Smith

Bu araca güvenmeye başladığınızda her zaman patlar. Neden veya nasıl düzeltebileceğimi bilmiyorum ama daha karmaşık görünümlerde gerçekleşiyor gibi görünüyor.
Departamento B

263

Bir GUI görünüm denetim aracı olup olmadığını bilmiyorum, ama UIView hata ayıklama yöntemi ile biraz şans oldu: -recursiveDescription

programı hata ayıklayıcıda duraklatır ve GDB'ye girerseniz (Düzenle: LLDB'de de çalışır)

po [[UIWindow keyWindow] özyinelemeliAçıklama]

Tüm görünüm hiyerarşinizin bir çıktısını alırsınız. Ayrıca, o görünümün görünüm hiyerarşisinin bir çıktısını almak için belirli bir görünümde de çağırabilirsiniz.

Aldığınız bilgiler arasında gezinmek biraz sıkıcı olabilir, ancak bu benim için yararlı oldu.

Kredi, bu yöntem hakkında konuşan ve ayrıca bu yararlı, ancak Apple teknik not bulmak oldukça zor bağlantılı bu blog yazısına gider .


1
Ben var: hata: '$ __ lldb_objc_class' herhangi bir fikir için arayüz bildirimi bulamıyor musunuz? (lldb) po [[UIWindow keyWindow] recursiveDescription] hatası: '$ __ lldb_objc_class' hatası için arabirim bildirimi bulunamıyor
Zennichimaro 19:13

1
Bu cevabın artık kanonik cevap olmadığına inanıyorum, şimdi 'GUI aracı var mı?' Sorusuna doğrudan cevap veren GUI araçları var.
theraven

xcode 5.1 ile başlayarak recursiveDescription hatası yazdığımda bu hatayı almaya başladım: örnek yöntemi 'undoManager' farklı çeviri birimlerinde ('id' vs. 'NSUndoManager *') uyumsuz sonuç türlerine sahip : 1 hata ifadeyi ayrıştırma
abbood

1
Soru eski olsa da ve grafiksel yöntemler sorulurken, bu özel cevap metinsel çözümlerle ilgilidir. Kurallı kod içi çözümün bir tartışmasını örneğin burada bulabilirsiniz: stackoverflow.com/a/14193682/2431627 . yani KVC aracılığıyla _printHierarchy özelliğini kullanmak.
Mart'ta Robin Macharg

46

Uygulama ekran görüntüsünü göster

İşin garibi, şimdi başka bir seçenek var, http://revealapp.com/ , bu yazı itibariyle açık (ücretsiz) beta. Gördüğünüz gibi bu başka bir görsel müfettiş.

EDIT 2014-04-05: Gösterme Beta'nın dışında ve artık ücretsiz değil. Bununla birlikte, 30 günlük bir deneme var.


1
Bunun için birkaç araç denedim (Spark Müfettiş, iOS Hiyerarşi Görüntüleyicisi ve Frank test aracındaki kundakçı benzeri görünüm). Şimdiye kadar Reveal benim favorim.
Güveç

1
Ama tamamen buna değer. Görüntülemeleri görüntülemek için yerleşik Xcode araçlarından çok daha iyi
Will Larche

35

Bu soru eski ama geliştirdiğim yeni araç hakkında buraya bilgi vereyim: https://github.com/glock45/iOS-Hierarchy-Viewer resim açıklamasını buraya girin


simülatörde başka bir görünüme gittiğimde sayfayı otomatik olarak yenilemek mümkün mü? Ayrıca, bu görüntüleyicide değerleri değiştirmek mümkün mü (böylece gerçek kod yazmadan tarayıcıda bazı testler yapabilirim)? teşekkürler :)
Brian

1
@Brian teşekkürler Brain. Değerleri değiştirme olasılığını prototiplemeye başladım. Resmi sürümde kapatıldı. Bizi izlemeye devam edin !
Damian Kołakowski

Öneri için çok teşekkürler. Xcode'un UI hata ayıklayıcısını kullanarak çözemeyen bir sorun olan bu araçla sorunumu çözmeyi başardım!
D6mi

Teşekkürler Damian, ama bunu okuyan insanlar için bu araç bakımsız görünüyor.
Vaddadi Kartick




6

Hızlı 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"))))
   }
}

Kullanımı (hata ayıklayıcıda): po myView.dump()


2

Bu, tüm hata ayıklama penceresini döker. (Okunması zor) :( iOS 10, Xcode 8.3.3 üzerinde çalışıyor

po UIApplication.shared.keyWindow?.recursiveDescription()

0

Onaylanan cevap artık Xcode 8 ve Swift 2.3'ü kullanarak benim için çalışmıyor . İşte benim için ne işe yarıyor:

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


1
Teşekkürler, mil, ancak bu da Swift 3'te çalışmıyor: hata: '
UIApplication

Swift 4 ve Xcode 9.1, "hata: <EXPR>: 3: 32: hata: 'UIApplication' UIApplication.sharedApplication () işlev dışı türün değerini çağıramıyor
Jason Harrison

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.