Introducing Layout Errors and Warnings
A new release of Reveal (v6) is available to all users with a current license, and as a 14-day trial.
We’re excited about this update! Reveal 6 introduces support for Auto Layout errors & warnings, improved filtering, and a decent helping of smaller features and bug fixes.
Let’s get to it!
Auto Layout Errors & Warnings
Reveal now highlights views that have ambiguous layout, and constraints that have been broken due to an unsatisfiable layout using warning icons in the outline view. Clicking on the warning icon jumps straight to the Layout inspector, where you can find more information about the issue.
Layout ambiguity is an Auto Layout problem where a view that’s laid out using constraints doesn’t have a fully defined position or size (or content size in case of scroll views). As a consequence, such views and their subviews might be laid out in an unexpected manner, and the layout may even change between launches of the app! If you’re using Interface Builder, ambiguity is usually caught early, but at runtime it may be caused by missing constraints, or by inequality constraints that are ambiguous. Reveal will now describe what kind of ambiguity it detects, and what dimensions are ambiguous.
If a constraint configuration cannot be fully satisfied, Auto Layout is forced to break one of the constraints so that your app continues to function (at least partially). Correct layout cannot be guaranteed by the system in such a case, and if this happens while you’re debugging your app the Debug Console log will show the dreaded “Unable to simultaneously satisfy constraints” message. Now, if you inspect your app in Reveal after receiving such message in the log, you’ll be able to see which constraints have been broken – both in the outline view and in the Participating Constraints inspector. Broken constraints are coloured red in the Canvas.
Improved View Hierarchy Filtering
The view hierarchy can now be filtered by specific view properties, such as:
- Class or superclass name
- Accessibility information such as the identifier, value and label
- Constraint identifier
- UIView tag
- Object memory address
The outline view also shows the matched property along with its value to indicate why a view or constraint matched a particular property.
Clicking on the icon next to the filter field shows the filtering modes that you can select. You can also switch to a filtering mode by typing its keyword right into the filter field! For example, to switch to the “Class Name” mode, type
class: and press Return. You can also abbreviate all keywords, so for example
ident: are all the same as
identifier:. To switch to the default filtering mode, simply press Delete key in an empty filter field.
Here’s a list of all available keywords:
class:for Class Name
tag:for View Tag
address:for Memory Address
Other New Features
- We’ve added a “Reset View” button to the canvas in the lower right-hand corner. This will re-orient and reset the zoom level on the canvas so that the presented view hierarchy is centered and visible. It’s really useful when you zoom or scroll too far.
- Tooltips have been added to, or improved for many controls.
- Fixed: Descriptions of participating constraints in the layout inspector had incorrectly formatted labels.
- Fixed: Changing selection in the outline view to an item that’s currently collapsed did not expand parent items.
- Fixed: RevealServer.framework had simulator platforms listed in its Info.plist.
- Fixed: Integration scripts will no longer copy RevealServer.framework inside an already present copy of the framework.
- Fixed: Reveal Server no longer requires the
CFBundleShortVersionStringto be present your iOS application’s Info.plist.
- Fixed: Potential race conditions in the Reveal LLDB script commands.
Minimum System Requirements
- macOS 10.11
- iOS 8
- tvOS 9
- Xcode 7.3
RevealServer.framework has changed. Please remember to update your projects to link to the new framework version.
If you have a question, or would like to give us feedback, you can do so from within Reveal (see “Help → Submit Feedback”), or via our support forum.