> ## Content Index
> Fetch the complete content index at: https://www.justinw.me/llms.txt
> Use this file to discover other available public pages before exploring further.

# Auto Layout In iOS 8 - layoutDebuggingIdentifier
- URL: https://www.justinw.me/blog/auto-layout-in-ios-8-layoutdebuggingidentifier/
- Published: 2014-08-27T19:00:14.000Z
- Updated: 2014-08-27T19:00:14.000Z
- Author: Justin Williams
- Tags: auto layout

Another new identifier Apple added in iOS 8 is the private API property `_layoutDebuggingIdentifier` to `UIView` that you can use to clean up what is output in `_autolayoutTrace`. Since it is private API, you don’t want to ship with this code in because Apple will likely reject it, but for debugging purposes it can be mostly harmless. Mostly.

There’s no easy way to set the `_layoutDebuggingIdentifier` identifier in a Storyboard or Xib, so we will have to add a bit of code to take advantage of it.

To take advantage of this:

1. Open one of your view controllers.
2. Override `- (void)viewDidLoad` if you haven’t already.

There’s a few different spots you could likely define the `_layoutDebuggingIdentifier`, but for view controllers, I tend to just put them in `viewDidLoad`. Here’s a sample of the code I use:

```
#ifdef DEBUG
    SEL selectorName = NSSelectorFromString(@"_setLayoutDebuggingIdentifier:");
    NSString *identifier = @"Email Label";
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
    [self.emailLabel performSelector:selectorName withObject:identifier];
#pragma clang diagnostic pop
#endif

```

Oh boy. This looks crazy. Let’s break down what’s going on line-by-line.

On the first and last lines, I’m again wrapping everything in an `#ifdef DEBUG` block because I don’t want to ship this bit of code with my product to the App Store.

The second line I am creating a `SEL` variable by calling the `NSSelectorFromString` function and passing in “\_setLayoutDebuggingIdentifier:” as a string. The line below it is defining what I want the `_layoutDebuggingIdentifier` string to actually be.

From there, things start to get weird. I’ve got three different `#pragma` calls. The first one is saying that I am going to start adding some specific instructions for the compiler about things I want it to take into account in the following set of code. That’s what “push” is. The last `#pragma` says “pop”, which means I am done passing those bits of code specific diagnostics in.

The specific diagnostic message I am calling is `#pragma clang diagnostic ignored "-Warc-performSelector-leaks"` which is telling the compiler to ignore the warning about my performSelector call possibly leaking, because it may not exist. Since `_layoutDebuggingIdentifier` is private API, the public framework headers don’t know what to do with it, so the compiler assumes it doesn’t exists. I assure you it exists as of iOS 8 though, so we can safely ignore that warning.

The one caveat of course is that since this is private API, Apple can either remove it or change it in a future release. Be aware.

Thus far we’ve set a single `_layoutDebuggingIdentifier` for our email label. Go ahead and set them for the rest of the controls that you care to have nicer output from.

After you do that, run the application again and print out the output of `_autolayoutTrace`.

```
(lldb) po [self.view _autolayoutTrace]
UIWindow:0x7fdb8511de90
|   •UIView:0x7fdb83d3d470
|   |   *Email Label:0x7fdb83d3d780
|   |   *Password Label:0x7fdb83d3fae0'Password'
|   |   *Logo Image:0x7fdb83d3ff70
|   |   *Email Field:0x7fdb83d40980
|   |   |   _UITextFieldRoundedRectBackgroundViewNeue:0x7fdb83d4a240
|   |   *SignIn Button:0x7fdb83d4cfe0'Sign-In'
|   |   *Password Field:0x7fdb83d4e070
|   |   |   _UITextFieldRoundedRectBackgroundViewNeue:0x7fdb83d4f4b0
|   |   *_UILayoutGuide:0x7fdb83d4f9a0
|   |   *_UILayoutGuide:0x7fdb83d503b0

```

Ah…much nicer.

*If you’ve found this post useful, and want to learn more about how to best take advantage of Auto Layout in your OS X and iOS apps, be sure to purchase my new book [Achieving Zen With Auto Layout](http://www.autolayoutzen.com/?ref=justinw.me)*.