27 comments

[ 3.9 ms ] story [ 77.9 ms ] thread
Not surprised all that much of Apple's hidden tools. I'd totally sign a NDA in order to see the hidden past of Apple.
Pretty cool. Hopefully they make it public in the next developer release.
I wonder when this was actually added, maybe it is getting ready for an actual release in iOS 11 later this year.
Looking back at UIKit headers it looks like it was added in iOS 9.
> be sure that the code doesn’t make it into your App Store build, else you’re likely to get rejected.

Doesn't appear to be the case! Here's a list of 611 apps using this class: https://mixrank.com/appstore/apps?expiration=2017-06-26&list...

Notably, it looks like Google, Facebook, Netflix, and Uber are all using it (or have a dependency that is). There's been a handful that were using it since early 2015, and a surge of several hundred towards the end of last year.

Here's the other related classes:

    UIDebuggingInformationRootTableViewController
    UIDebuggingInformationTopLevelViewController
    UIDebuggingInformationValue
    UIDebuggingInformationValueTableViewCell
    UIDebuggingInformationValueViewObserver
    UIDebuggingInformationViewController
    UIDebuggingInformationValueView
    UIDebuggingInformationOverlay
    UIDebuggingInformationValueViewNumber
Related to this, I'll highly recommend Reveal[1], a macOS app which allows for (semi-)live view debugging of iOS apps. Reveal provides view hierarchy info, and renders it on (the mac's) screen in a highly inspectable way.

Specifically, both flat 2D and a really great 3D exploded renderings of the active views are available. This is really brilliant for acquiring a deeper understanding of many initially opaque aspects of iOS view construction.

Likewise, the inspectors let you tweak and adjust autolayout constraint values, frames, bounds, and other view settings live. All together, working with Reveal restores a refreshing amount of the ease of view debugging and iteration speed that I love about working with modern in-browser debugging.

[1] https://revealapp.com/

With the advancements in Xcode, I really don't think Reveal is worth it. It also requires embedding a binary framework (I think it's closed source) in your application, which can be messy for debug vs production builds. Just not worth the hassle.
You don't need to embed a binary framework for Reveal. And I think it's still a lot better than the Xcode tool..

I like using it to fine tune the positions of views instead of guessing and re-running which happens occasionally. (Can't do that w/ Xcodes built in tool)

You can't modify from the UI, but you can use the debugger to modify the instance values (using the object pointer).
I disagree. In my experience, Xcode 8's view debugging is a bit of a joke compared to Reveal. Reveal's visualization of the view hierarchy is much better, especially when it comes to illuminating some subtleties of view ordering. Next, every time I've used Xcode's support, it kills our app. Fun times! I've never had a problem with Reveal interfering with the running app state. Last but not least, Xcode's view debugging doesn't allow live modification, which is key to iteration speed. These features together have saved me enough time that Reveal paid for itself before the trial was over -- and I'd used Xcode's view debugger well before I discovered Reveal. I wouldn't have put down money for a tool that wasn't a big delta from the Xcode baseline.

Setting up for Reveal is trivial, making your "messy" speculation seem baseless. For an app that uses CocoaPods, it's literally just adding one line to the appropriate target:

      pod 'Reveal-SDK', :configurations => ['Debug']
If that gets into your release build, you've got much bigger problems than an external SDK.
Dude! You win HN for the week, at least in the eyes of this guy, currently iOS developer guy. Just yesterday I was thinking to myself, how I needed some kind of tool to help me visualize the view hierarchy. I ended up setting different background colors on various views to understand my problem.

Thank you.

Don't forget there's also Xcode's built-in view debugger. Very useful tool!
Ha! My second hero of the week. Note to self: explore all menu options.
(comment deleted)
Glad it helped you. And thedjinn is right, Xcode's view debugger is really nice if you haven't tried it. I'd prefer it to the debugging overlay whenever you're running from Xcode.
recursiveDescription is still the most convenient way.
Just a note about your site. The 'Website' link on the left pane, it seems to 404 on just about every page. It looks like it is a relative link, rather than static because the domain is getting appended to the end of each source URL.

Neat find.

(comment deleted)
Sup Ryan! Great post.
Doesn't seem to work anymore in iOS11 (developer beta on device)