Skip to content

8.10.0

Latest
Compare
Choose a tag to compare
@getsentry-bot getsentry-bot released this 08 Nov 10:55

Features

  • Emit transaction.data inside contexts.trace.data (#2284)

  • Blocking app starts span if "appLaunchedInForeground" is false. (Android only) (#2291)

  • Replay: user-configurable masking (redaction) for widget classes and specific widget instances. (#2324)
    Some examples of the configuration:

    await SentryFlutter.init(
      (options) {
        ...
        options.experimental.replay.mask<IconButton>();
        options.experimental.replay.unmask<Image>();
        options.experimental.replay.maskCallback<Text>(
            (Element element, Text widget) =>
                (widget.data?.contains('secret') ?? false)
                    ? SentryMaskingDecision.mask
                    : SentryMaskingDecision.continueProcessing);
      },
      appRunner: () => runApp(MyApp()),
    );

    Also, you can wrap any of your widgets with SentryMask() or SentryUnmask() widgets to mask/unmask them, respectively. For example:

     SentryUnmask(Text('Not secret at all'));
  • Support captureFeedback (#2230)

    • Deprecated Sentry.captureUserFeedback, use captureFeedback instead.
    • Deprecated Hub.captureUserFeedback, use captureFeedback instead.
    • Deprecated SentryClient.captureUserFeedback, use captureFeedback instead.
    • Deprecated SentryUserFeedback, use SentryFeedback instead.
  • Add SentryFeedbackWidget (#2240)

    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) => SentryFeedbackWidget(associatedEventId: id),
        fullscreenDialog: true,
      ),
    );
  • Add screenshot to SentryFeedbackWidget (#2369)

    • Use SentryFlutter.captureScreenshot to create a screenshot attachment
    • Call SentryFeedbackWidget with this attachment to add it to the user feedback
    final id = await Sentry.captureMessage('UserFeedback');
    final screenshot = await SentryFlutter.captureScreenshot();
    
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) => SentryFeedbackWidget(
            associatedEventId: id,
            screenshot: screenshot,
        ),
        fullscreenDialog: true,
      ),
    );

Enhancements

  • Avoid sending too many empty client reports when Http Transport is used (#2380)
  • Cache parsed DSN (#2365)
  • Handle backpressure earlier in pipeline (#2371)
    • Drops max un-awaited parallel tasks earlier, so event processors & callbacks are not executed for them.
    • Change by setting SentryOptions.maxQueueSize. Default is 30.
  • Use native spotlight integrations on Flutter Android, iOS, macOS (#2285)
  • Improve app start integration (#2266)
    • Fixes pendingTimer during tests (#2103)
    • Fixes transaction slows app start (#2233)
  • Only store slow and frozen frames for frame delay calculation (#2337)
  • Add ReplayIntegration to the integrations list on events when replay is enabled. (#2349)

Fixes

  • App lag with frame tracking enabled when span finishes after a long time (#2311)
  • Only start frame tracking if we receive valid display refresh data (#2307)
  • Rounding error used on frames.total and reject frame measurements if frames.total is less than frames.slow or frames.frozen (#2308)
  • iOS replay integration when only onErrorSampleRate is specified (#2306)
  • Fix TTID timing issue (#2326)
  • TTFD fixes
    • Start missing TTFD for root screen transaction (#2332)
    • Match TTFD to TTID end timespan if TTFD is unfinished when user navigates to another screen (#2347)
    • TTFD measurements should only be added for successful TTFD spans (#2348)
    • Error when calling SentryFlutter.reportFullyDisplayed() twice (#2339)
  • Accessing invalid json fields from fetchNativeAppStart should return null (#2340)

Deprecate

Dependencies