मैं iOS में पदानुक्रम के दृश्य का निरीक्षण कैसे करूं?


170

क्या कोई GUI टूल है जो iOS ऐप के पदानुक्रम को देखता है? मैं वेबकिट के वेब इंस्पेक्टर या इसी तरह के टूल के बारे में सोच रहा हूं। मैं लेआउट मुद्दों को डिबग करना चाह रहा हूं, जैसे कि गलत स्थिति या आकार के विचार, या एक बच्चा अपने माता-पिता में ठीक से शामिल नहीं हो रहा है। वर्तमान में मुझे उन विभिन्न स्थितियों का परीक्षण करना है, जो अलग-अलग दृश्य पर अलग-अलग पृष्ठभूमि के रंग सेट करते हैं, और जैसा कि आप कल्पना कर सकते हैं, वह इसके बारे में जाने के लिए वास्तव में थकाऊ तरीका है।

मैंने इंस्ट्रूमेंट्स पर ध्यान दिया UI recorder, लेकिन वह केवल यूआई कार्यों को रिकॉर्ड करता है और खेलता है `और, किसी भी मामले में, केवल मैक ऐप्स के लिए काम करता है।

क्या कोई बेहतर समाधान है?

जवाबों:


168

Xcode 6 में अब 3D व्यू पदानुक्रम निरीक्षण है जिसे Reveal App और Spark Inspector की तरह बनाया गया है।

यहां छवि विवरण दर्ज करें

जब आपका ऐप निष्पादन को रोकने और वर्तमान समय में विचारों का निरीक्षण करने के लिए चल रहा हो, तो "डीबग व्यू पदानुक्रम" बटन पर क्लिक करें।

यहां छवि विवरण दर्ज करें

Apple के प्रलेखन के बारे में अधिक जानकारी ।


5
यदि दृश्य डिबगिंग विकल्प उपलब्ध नहीं है, तो stackoverflow.com/questions/24040322/… देखें ।
kennytm

सबसे पहले, मैंने लेवी मैक्कलम द्वारा दिखाए गए टूलबार को नहीं देखा क्योंकि यह Xcode विंडो के बहुत नीचे है अगर ऐप में कोई डिबग आउटपुट नहीं है। और एक बार बटन को धक्का देने के बाद, दृश्य पदानुक्रम विंडो रिक्त थी जब तक कि मैंने नीचे के किसी एक बटन को धक्का नहीं दिया, या एक स्लाइडर्स को समायोजित किया।
कार्ल स्मिथ

एक बार जब आप इस उपकरण पर भरोसा करना शुरू कर देते हैं तो यह हमेशा के लिए तरस जाता है। मुझे नहीं पता कि इसे क्यों या कैसे ठीक करना है लेकिन यह अधिक जटिल विचारों पर होता है।
विभागीय बी

263

मुझे नहीं पता कि कोई GUI दृश्य निरीक्षण उपकरण है, लेकिन मुझे UIView पर डिबगिंग विधि के साथ कुछ किस्मत मिली है: -recursiveDescription

यदि आप डिबगर में प्रोग्राम को रोकते हैं और इसे GDB में इनपुट करते हैं (संपादित करें: LLDB में भी काम करता है)

po [[UIWindow keyWindow] पुनरावर्ती संदेश]

आपको अपने पूरे दृश्य पदानुक्रम का एक प्रिंटआउट मिलता है। आप इसे उस दृश्य के पदानुक्रम के प्रिंटआउट को प्राप्त करने के लिए एक विशिष्ट दृश्य पर भी कॉल कर सकते हैं।

आपके द्वारा इससे बाहर निकलने की जानकारी के माध्यम से उतारा जाना थोड़ा थकाऊ हो सकता है, लेकिन यह मेरे लिए उपयोगी साबित हुआ है।

क्रेडिट इस ब्लॉग पोस्ट पर जाता है जिसने इस पद्धति के बारे में बात की और इस सहायक से भी जुड़ा , लेकिन एप्पल टेक नोट को खोजने के लिए कठिन है


1
मुझे मिल गया है: त्रुटि: '$ __ lldb_objc_class' के लिए इंटरफ़ेस घोषणा नहीं मिल सकती है? (lldb) po [[UIWindow keyWindow] recursiveDescription] त्रुटि: '$ __ lldb_objc_class' त्रुटि के लिए इंटरफ़ेस की घोषणा नहीं मिल सकती: $ $ के लिए इंटरफ़ेस घोषणा नहीं पा सकते :__ lldb_objc_class 'त्रुटि: 2 त्रुटि पार्सिंग अभिव्यक्ति
Zennichimarov

1
मेरा मानना ​​है कि यह उत्तर अब विहित उत्तर नहीं है, क्योंकि अब GUI उपकरण उपलब्ध हैं जो सीधे प्रश्न का उत्तर देते हैं 'क्या कोई GUI उपकरण है ...?'
थेरवेन

5.1 कोड के साथ शुरू करने से मुझे यह त्रुटि तब मिली जब मैंने पुनरावर्ती लेखन त्रुटि टाइप की: उदाहरण विधि 'undoManager' में विभिन्न अनुवाद इकाइयों में असंगत परिणाम प्रकार हैं ('id' बनाम 'NSUndoManager *') ध्यान दें: उदाहरण विधि 'undoManager' ने भी यहां त्रुटि घोषित की है : 1 त्रुटियाँ अभिव्यक्ति की पार्सिंग
abbood

1
हालांकि यह प्रश्न पुराना है, और चित्रमय विधियों के बारे में पूछता है, यह विशिष्ट उत्तर पाठ्य समाधानों से संबंधित है। कैनोनिकल इन-कोड समाधान की एक चर्चा यहां पाई जा सकती है जैसे: stackoverflow.com/a/14193682/2431627 । केवीसी के माध्यम से _printHierarchy संपत्ति का उपयोग करना।
रॉबिन माक्रग

46

एप्लिकेशन स्क्रीनशॉट प्रकट करें

अजीब तरह से पर्याप्त है, अब एक और विकल्प है, http://revealapp.com/ , जो इस पोस्ट के रूप में एक खुले (मुक्त) बीटा में है। जैसा कि आप देख सकते हैं कि यह एक और दृश्य निरीक्षक है।

EDIT 2014-04-05: खुलासा बीटा से बाहर है और अब मुक्त नहीं है। हालाँकि, 30 दिनों का ट्रायल है।


1
मैंने इसके लिए कुछ उपकरण (स्पार्क इंस्पेक्टर, आईओएस पदानुक्रम व्यूअर और फ्रैंक टेस्टिंग टूल में फायरबग जैसा दृश्य) की कोशिश की है। अब तक रिवील मेरा पसंदीदा है।
स्टू

1
लेकिन कुल मिलाकर अभी भी इसके लायक है। विचारों को देखने के लिए Xcode टूल में निर्मित तरीके से बेहतर है
विल लार्च

35

यह प्रश्न पुराना है, लेकिन मैं यहाँ नए टूल के बारे में जानकारी देता हूँ जो मैं विकसित करता हूँ: https://github.com/glock45/iOS-Hierarchy-Viewer यहां छवि विवरण दर्ज करें


जब मैं सिम्युलेटर में किसी अन्य दृश्य पर नेविगेट करता हूं, तो पृष्ठ को स्वचालित रूप से ताज़ा करना संभव है? इसके अलावा, क्या इस दर्शक में मूल्यों को बदलना संभव है (इसलिए मैं वास्तविक कोड लिखे बिना ब्राउज़र पर कुछ परीक्षण कर सकता हूं)? धन्यवाद :)
ब्रायन

1
@ ब्रेन थैंक्स ब्रेन। मैंने मूल्यों को बदलने की संभावना के लिए प्रोटोटाइप बनाना शुरू कर दिया। यह आधिकारिक रिलीज में बंद कर दिया गया है। बने रहें !
डेमियन कोलोकोव्स्की

सुझाव के लिए बहुत बहुत धन्यवाद। मैं इस टूल के साथ अपनी समस्या को हल करने में कामयाब रहा, एक ऐसा मुद्दा जो Xcode के UI डीबगर का उपयोग करके हल नहीं कर सका!
D6mi

धन्यवाद, डेमियन, लेकिन इसे पढ़ने वाले लोगों के लिए, यह उपकरण अप्राप्य लगता है।
वदादी कार्तिक


7

FLEX डीबगर है कि आप किसी चल रहे एप्लिकेशन में यूआई को संशोधित करने की अनुमति देता है एप्लिकेशन दृश्य निरीक्षक में एक प्रदान करता है। यह नेटवर्क अनुरोधों को भी लॉग करता है।

https://github.com/Flipboard/FLEX

यहां छवि विवरण दर्ज करें


6

नि: शुल्क: इंस्पेक्टर में यह लिखें:

po [[UIWindow keyWindow] recursiveDescription]

वाणिज्यिक: http://revealapp.com/ मैंने रीव्यूएप के बीटा संस्करण का परीक्षण किया, यह अच्छा था हालांकि इसमें कीड़े हैं। एक और वाणिज्यिक उपकरण: http://sparkinspector.com/ यह निर्बाध काम कर रहा है।


स्पार्क इंस्पेक्टर का एक अच्छा नोटिफिकेशन दर्शक है
thierryb

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

स्विफ्ट 4 और Xcode 9.1 "एरर: <EXPR>: 3: 32: एरर: के साथ शिकायत करते हैं, जो नॉन-फंक्शन टाइप 'UIApplication' UIApplication.saredApplication ()। KeyWindow; .recursiveDescription ()"
जेसन हैरिसन

0

स्विफ्ट / Xcode 10 के लिए, इसे डिबग कंसोल में दर्ज करें:

po yourView.value(forKey: "recursiveDescription")!

यह किसी भी के लिए एक पुनरावर्ती पदानुक्रम प्रिंट करेगा UIView

(क्रेडिट: रिकर्सिव डिस्क्रिप्शन का उपयोग करके अपने दृष्टिकोण पदानुक्रम को कैसे डीबग करें )

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.