feat: Set app start vitals on standalone children - #8888
Merged
Conversation
Copy type and screen onto every child of a standalone app.start transaction so mobile vitals grouping works. Include app.start.extended and user descendants. Headless starts omit screen. Nested ui.load is unchanged. Matches getsentry/sentry-java#6005. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Contributor
|
buenaflor
marked this pull request as ready for review
August 27, 2026 12:56
buenaflor
requested review from
NinjaLikesCheez,
itaybre,
noahsmartin and
philprime
as code owners
August 27, 2026 12:56
Contributor
There was a problem hiding this comment.
Pull request overview
Propagates app start vitals grouping attributes (app.vitals.start.type and app.vitals.start.screen) from standalone app.start transactions onto their child spans (including app.start.extended and user-created descendants), while keeping the nested ui.load-attached app start path unchanged.
Changes:
- Copy
app.vitals.start.type(always) andapp.vitals.start.screen(when present) onto all spans of standalone app start transactions at finish time. - Add/extend unit tests to validate propagation for standalone app start children (including extended + user descendants) and validate no propagation for the
ui.loadpath. - Add a changelog entry under Unreleased → Features documenting the behavior change.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| Sources/Sentry/SentryTracer.m | Copies app start vitals type/screen onto standalone app start transaction child spans during transaction finalization. |
| Tests/SentryTests/Transaction/SentryBuildAppStartSpansTests.swift | Asserts ui.load-path spans do not get vitals attributes; asserts standalone spans get expected vitals type (and screen omission when headless). |
| Tests/SentryTests/Integrations/Performance/AppStartTracking/AppStartReportingStrategyTests.swift | Adds coverage for vitals propagation to child spans with and without screen set. |
| Tests/SentryTests/Integrations/Performance/AppStartTracking/SentryExtendedAppLaunchTests.swift | Verifies vitals propagation to app.start.extended and user-created descendants (child + grandchild). |
| CHANGELOG.md | Adds Unreleased feature entry describing vitals propagation to standalone app start children. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
📲 Install BuildsiOS
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📜 Description
Set
app.vitals.start.typeandapp.vitals.start.screenon standaloneapp.startchildren — includingapp.start.extendedand user descendants. Theui.load-attached app start path is unchanged.💡 Motivation and Context
Mobile vitals app start breakdown groups
app.startchildren using these attributes. They were only on the root, so child spans did not group. Matches Android (getsentry/sentry-java#6005) and Flutter (getsentry/sentry-dart#3988).Related to getsentry/sentry#122577
Closes #8889
💚 How did you test it?
Unit tests covering foreground and headless standalone children (
AppStartReportingStrategyTests), user descendants underapp.start.extended(SentryExtendedAppLaunchTests), and the nestedui.loadpath not receiving these attributes (SentryBuildAppStartSpansTests). Also ranSentryTracerTests.📝 Checklist
You have to check all boxes before merging:
sendDefaultPIIis enabled.