Conversation
ea870b1 to
2bfe1b6
Compare
|
Overall this looks good - thank you for your contribution! I've kicked off the CI and there's a merge conflict to resolve, could you attach a screenshot of the UI so we can see what it looks like? I'll try get to testing it on device later today either so if I get there first I'll add a screenshot for others. Thanks again! |
Validate managed feedback messages against the backend 4096 Unicode-scalar limit. Show an accessible live counter and preserve existing missing-field validation precedence.
2bfe1b6 to
74e8f39
Compare
Thanks for the review! I’ve resolved the merge conflict and attached a short demo below showing the character counter and validation state. Please let me know if anything else needed here! |
philprime
left a comment
There was a problem hiding this comment.
Thank you @llirik0 for opening up this issue. I see the problem and how your implementation can help with sending valid feedback only.
As this is PR is also extending the standard user feedback UI with a character count label, I will need to raise this internally to gather feedback
| updateMessageCharacterCount(label: messageCharacterCountLabel) | ||
| } | ||
|
|
||
| private func updateMessageCharacterCount(label: UILabel) { |
There was a problem hiding this comment.
h: Our user feedback UI is standardized across SDKs, so we must do an internal alignment with other SDK maintainers if adding this footer caption label is fine.
There was a problem hiding this comment.
sg, please let me know if anything needs to be changed. ty
|
Created getsentry/sentry-docs#19424 as the matter of discussion on how to align cross-SDK behavior for the client-side feedback input validation. I'll let you know when we have a decision. |
📜 Description
💡 Motivation and Context
The Sentry backend rejects feedback messages longer than 4096 code points. The iOS managed feedback form currently allows those messages to be submitted without warning, so feedback can be dropped after the user finishes the form.
Unicode-scalar counting intentionally matches backend
len(message)behavior for precomposed and decomposed input.Fixes #4680
💚 How did you test it?
Result: 38 tests passed with 0 failures on iOS 26.2. Coverage includes exact 4096/4097 Unicode-scalar boundaries for decomposed input, nil UIKit text handling, missing-required-field precedence, theme font customization, counter accessibility, and submit-error presentation. A sabotage run using Swift grapheme-cluster counting made the 4097-scalar decomposed regression test fail, then pass after restoring Unicode-scalar counting.
make format make lint make analyze make build-ios FOR_AGENTS=true \ IOS_SIMULATOR_OS=26.2 \ IOS_DEVICE_NAME='Sentry OSS iPhone 17 Pro'All commands passed. The destination overrides are required because this machine does not have the repository-default iOS 18.4 runtime.
📝 Checklist
sendDefaultPIIis enabled.Demo:
Simulator.Screen.Recording.-.Sentry.OSS.iPhone.17.Pro.-.2026-09-09.at.23.51.12.mov