Compatibility

  • Programming languages: The iOS SDK supports and tracks content on any screen developed in Objective-C or Swift (version >= 4.2).
  • SwiftUI: is officially supported
  • iOS version: starting with SDK 4.17.0 we support iOS 12.4 and later
    • Starting with SDK 4.36.0, no data will be collected for applications running on iOS < 13.0
    • Current Xcode supports simulators on 12.4 and later
    • ReactNative requires a minimum of iOS 12.4
    • All devices released since 2014 can updated to iOS 12.4
    • SFSafariViewController is not supported

Known limitations and recommendations

Section titled Known limitations and recommendations

Snapshot fidelity: Combining Visual Effects with Filters

Section titled Snapshot fidelity: Combining Visual Effects with Filters

Symptom: Some elements of the snapshots may not be visible (e.g UITabBar buttons).

Explanation: Our capturing method prevents to capture views when Visual effects are combined with filters. Our tools captures as much as Xcode’s ‘Debug View Hierarchy’ feature. If you want to preview what is going to be rendered, you can use this feature to visualize your screen. Capturing a Snapshot of a UIVisualEffectView.

Snapshot fidelity: Customised layer(s) applied on a container view

Section titled Snapshot fidelity: Customised layer(s) applied on a container view

Symptom: Some elements of the snapshots may not be displayed correctly in the Zoning Analysis.

Explanation: Our capture method relies on views to determine zoning elements. A view containing subviews is a container and when a container is assigned a customized layer, it may not appear in the Zoning Analysis.

Workaround: Instead of applying customised layer to container, prefer applying it on view of type, or subtype, UIImageView or UIControl.

Snapshot fidelity: Floating header/footer missing in Zoning

Section titled Snapshot fidelity: Floating header/footer missing in Zoning

Symptom: Some elements of the snapshots don’t exist in the Zoning Analysis.

Explanation: The Zoning Analysis module does not support UITableViewHeaderFooterView in UITableView and UICollectionReusableView in UICollectionView due to their highly dynamic memory and rendering behavior.

Gestures not attached to UIImageView

Section titled Gestures not attached to UIImageView

Symptom: When analysing the tap rate on an image, we see 0% when we know it is not possible.

Explanation: By default UIImageView have their isUserInteractionEnabled property set to false (See Apple documentation). This means that the UIImageView won’t receive any input event. All events will be handled by the first parent to have isUserInteractionEnabled set to true (usually the first parent will do).

Workaround: Create a zone on the parent view to get the taps on the image.

UICollectionViewCompositionalLayout TVP lack of consistency

Section titled UICollectionViewCompositionalLayout TVP lack of consistency

Explanation: As explained in the Apple documentation, UICollectionViewCompositionalLayout is a highly dynamic layout creation object. We are not able to ensure TVP value is the same between different usages.

Zoning Limitation in SwiftUI with scrolling (Lazy)Stack and (Lazy)Grid

Section titled Zoning Limitation in SwiftUI with scrolling (Lazy)Stack and (Lazy)Grid
  • Snapshot and Gesture Tracking Limitations:

    • Using LazyStack, or LazyGrid nested in a ScrollView may present limitations in snapshot and gesture tracking due to differences in memory management compared to UIKit.
    • Intricate hierarchies of LazyStacks or LazyGrids can lead to inconsistent identification of elements, impacting the reliability of element identification. Prefer to use single layered Lazy components, when possible.
  • Rotation Limitation:

    • Unique identification of elements within SwiftUI Stack, Grid, LazyStack, or LazyGrid is not guaranteed after a rotation, so, rotation is not supported for Stack, Grid, LazyStack, or LazyGrid.
  • Scrolling Element Offset Limitation:

    • The consistency of unique identifiers is not guaranteed when the scrolling element is displayed starting at an offset different than zero.

Check the following Help Center article for more information about the symptom, root cause and potential mitigation solutions: I can’t create a zone on a list element on iOS (SwiftUI)