Skip to content

Conversation

@jamescrosswell
Copy link
Collaborator

@jamescrosswell jamescrosswell commented Oct 22, 2025

Part of #2136

This PR adds basic support for Session Replay, including associating replays with exceptions and traces.

It does not implement any way to configure granular masks... only basic options to mask all text / images or none are provided. That can be done in a separate PR.

Note

Note that there are no new tests here as the enabling functionality was added in #4133 (those tests cover this functionality already)

Warning

We should bump the Cocoa SDK to 8.57.2 before releasing this

@jamescrosswell jamescrosswell changed the title Ios replay Session Replay for iOS Oct 22, 2025
@codecov
Copy link

codecov bot commented Oct 22, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
⚠️ Please upload report for BASE (version6@a739982). Learn more about missing BASE report.

Additional details and impacted files
@@             Coverage Diff             @@
##             version6    #4664   +/-   ##
===========================================
  Coverage            ?   73.18%           
===========================================
  Files               ?      480           
  Lines               ?    17421           
  Branches            ?     3437           
===========================================
  Hits                ?    12749           
  Misses              ?     3821           
  Partials            ?      851           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

{
// For replay to work on iOS, session tracking must be enabled in the Cocoa SDKt
options.AutoSessionTracking = false;
nativeOptions.EnableAutoSessionTracking = true;
Copy link
Collaborator Author

@jamescrosswell jamescrosswell Oct 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure how we now want to handle situations like this:

var hasTerminalException = processedEvent.HasTerminalException();
if (hasTerminalException)
{
// Event contains a terminal exception -> end session as crashed
_options.LogDebug("Ending session as Crashed, due to unhandled exception.");
scope.SessionUpdate = _sessionManager.EndSession(SessionEndStatus.Crashed);
}
else if (processedEvent.HasException())
{
// Event contains a non-terminal exception -> report error
// (this might return null if the session has already reported errors before)
scope.SessionUpdate = _sessionManager.ReportError();
}

... or this:

// Start a new session
try
{
var sessionUpdate = _sessionManager.StartSession();
if (sessionUpdate is not null)
{
CaptureSession(sessionUpdate);
}
}

If the CocoaSdk owns the session, do we still need to be able to start/stop sessions from the .NET SDK?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these sessions are not the same as session replay. let's not conflate these APIs

@jamescrosswell jamescrosswell marked this pull request as ready for review October 30, 2025 03:32
@jamescrosswell jamescrosswell marked this pull request as ready for review November 3, 2025 03:17
cursor[bot]

This comment was marked as outdated.

CHANGELOG.md Outdated
Comment on lines 42 to 47
### Features

- The SDK now makes use of the new SessionEndStatus `Unhandled` when capturing an unhandled but non-terminal exception, i.e. through the UnobservedTaskExceptionIntegration ([#4633](https://github.com/getsentry/sentry-dotnet/pull/4633), [#4653](https://github.com/getsentry/sentry-dotnet/pull/4653))
- The SDK now provides a `IsSessionActive` to allow checking the session state ([#4662](https://github.com/getsentry/sentry-dotnet/pull/4662))
- The SDK now makes use of the new SessionEndStatus `Unhandled` when capturing an unhandled but non-terminal exception, i.e. through the UnobservedTaskExceptionIntegration ([#4633](https://github.com/getsentry/sentry-dotnet/pull/4633))

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question: Intended changes?

I believe these are part in the current Unreleased section and got duplicated there through an auto-merge.

/// to <c>false</c>.
/// </summary>
/// <remarks>Defaults to <c>true</c></remarks>
public bool EnableViewRendererV2 { get; set; } = true;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question: are EnableViewRendererV2 and EnableFastViewRendering mutually exclusive?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They're separate flags in the underlying Cocoa SDK... we don't actually need to surface these in .NET though. I could just remove them unless/until we have some need to expose them.

@jamescrosswell jamescrosswell marked this pull request as draft November 4, 2025 21:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants