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 recommendationsSnapshot fidelity: Combining Visual Effects with Filters
Section titled Snapshot fidelity: Combining Visual Effects with FiltersSymptom: Some elements of the snapshots may not be visible, such as 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 viewSymptom: 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 ZoningSymptom: 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 UIImageViewSymptom: 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 consistencyExplanation: 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
, orLazyGrid
nested in aScrollView
may present limitations in snapshot and gesture tracking due to differences in memory management compared to UIKit. - Intricate hierarchies of
LazyStacks
orLazyGrids
can lead to inconsistent identification of elements, impacting the reliability of element identification. Prefer to use single layered Lazy components, when possible.
- Using
-
Rotation Limitation:
- Unique identification of elements within SwiftUI
Stack
,Grid
,LazyStack
, orLazyGrid
is not guaranteed after a rotation, so, rotation is not supported forStack
,Grid
,LazyStack
, orLazyGrid
.
- Unique identification of elements within SwiftUI
-
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) ↗