-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add user interactions capture #190
feat: add user interactions capture #190
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How are you finding this approach compared to the a11y tree version?
Tests/AmplitudeTests/Plugins/UIKitUserInteractionPluginTest.swift
Outdated
Show resolved
Hide resolved
Tests/AmplitudeTests/Plugins/UIKitUserInteractionPluginTest.swift
Outdated
Show resolved
Hide resolved
Tests/AmplitudeTests/Plugins/UIKitUserInteractionPluginTest.swift
Outdated
Show resolved
Hide resolved
@crleona - This approach seems to capture more interesting properties. It's nice to see that this works for most of the control elements in SwiftUI as well. I think the next step is to have a fallback to the accessibility tree version if no action method was fired for the interaction. |
Nice! I did not expect that we'd get SwiftUI support for free. Does this support UIGestureRecognizers as well? A11y tree fallback seems like a good next step, I'd also like to see some more complete support for standard views - things like UISwitch.isOn or begin/didEndEditing on UITextView in addition to UITextField. |
Yep, this supports all the SwiftUI elements that use UIControl internally, which turned out to be quite a few. The UIGestureRecognizers are not supported yet, but it should be straightforward to add support for those from KVO on the state of recognizers. |
Can you please make a new auto capture feature branch and convert this PR to merge to that vs main? |
This PR should target a feature branch now. |
Can you please close completed comments? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
* feat: add user interactions capture (#190) * Fix indentation issue * feat: add user interactions capture * fix: fix typo * fix: remove support for UITextField action message capture * refactor: add dispatch once for method swizzling * fix: remove support for UISlider to reduce noise * feat: add support for UITextField and UISlider event capture * style: remove return keyword for one line functions * fix: fix typo * feat: add support for text field gained/lost focus * fix: fix lint * fix: remove tag as textfield title * refactor: refactor title and shouldTrack * refactor: add a protocol to track control elements * feat: add support for uitextview autocapture (#195) * Fix indentation issue * feat: add user interactions capture * fix: fix typo * fix: remove support for UITextField action message capture * refactor: add dispatch once for method swizzling * fix: remove support for UISlider to reduce noise * feat: add support for UITextField and UISlider event capture * style: remove return keyword for one line functions * fix: fix typo * feat: add support for text field gained/lost focus * fix: fix lint * fix: remove tag as textfield title * refactor: refactor title and shouldTrack * refactor: add a protocol to track control elements * refactor: guard on action name * feat: add support for uitextview capture * fix: disable action method tracking support for UITextView * fix: fix lint issue * style: remove amp_ prefix from objc methods * feat: add support for gesture recognizer autocapture (#196) * Fix indentation issue * feat: add user interactions capture * fix: fix typo * fix: remove support for UITextField action message capture * refactor: add dispatch once for method swizzling * fix: remove support for UISlider to reduce noise * feat: add support for UITextField and UISlider event capture * style: remove return keyword for one line functions * fix: fix typo * feat: add support for text field gained/lost focus * fix: fix lint * fix: remove tag as textfield title * refactor: refactor title and shouldTrack * refactor: add a protocol to track control elements * refactor: guard on action name * feat: add support for uitextview capture * fix: disable action method tracking support for UITextView * fix: fix lint issue * style: remove amp_ prefix from objc methods * feat: add support for gesture recognizers autocapture * fix: fix lint issue * fix: exclude unsupported gestures in tvos * fix: track touchupinside and valuechanged only (#199) * fix: just track touchupinside and valuechanged for some elements * fix: fix tvos issue * feat: capture control events for autocapture (#202) * fix: just track touchupinside and valuechanged for some elements * fix: fix tvos issue * feat: capture control events * fix: remove row selected event * fix: track touchUpInside for any element (#203) * fix: just track touchupinside and valuechanged for some elements * fix: fix tvos issue * feat: capture control events * fix: remove row selected event * fix: track any touchUpInside * fix: capture image name as a fallback for buttons title * fix: deprecate defaultTracking and add autocapture (#204) * fix: deprecate defaultTracking and add autocapture * fix: fix schema for the new test * fix: fix typo * fix: fix typo * fix: support optionset for autocapture options * fix: fix autocaptureoptions test * fix: fix failing test * fix: simplified the logic to deprecate defaultTracking * style: make autocapture options for objc as properties * fix: disable swiftui support for autocapture (#206) * fix: disable swiftui support for autocapture * fix: disable support for swiftui gesture recognizers autocapture * fix: fix typo * fix: filter scrolls for scrollable views * fix: imporve support for swiftui * fix: track screen name autocapture (#207) * fix: change element viewController to screenName * fix: remove title since it's already captured by screenName * fix: track changes to defaultTracking after initialization (#208) * fix: track changes to defaultTracking after initialization * fix: replace defaultTracking with autocapture if changed * fix: fix typo * fix: fix nit * style: rename parameter name
Summary
This PR adds support for the auto-capture of user interactions with
UIControl
elements. To enable user interaction auto-capture, set theuserInteractions
parameter of theDefaultTrackingOptions
initializer totrue
:New Automatically Captured Event
[Amplitude] User Interaction
: Emitted when a user interacts with aUIControl
element.New Automatically Captured Properties
[Amplitude] Target View Class
: The class name of the UI control that was touched.[Amplitude] View Controller
: The class name of the View Controller that is currently visible.[Amplitude] Title
: The title of the View Controller that is currently visible.[Amplitude] Target Accessibility Label
: The accessibility label that is set for the control or active view controller.[Amplitude] Action Method
: The name of the method that gets called when the control interaction occurs.[Amplitude] Target View Name
: The variable name of the target UIView that was interacted with.[Amplitude] Target Text
: The text associated with the UI control that was touched.Checklist