getsentry/sentry-cocoa

Wrong app context view names for screen load transactions

philipphofmann opened this issue · 0 comments

Platform

iOS

Environment

Develop, TestFlight

Installed

Manually

Version

8.25.2

Did it work on previous versions?

Maybe

Steps to Reproduce

  1. Open iOS-Swift sample app
  2. Check screen load transaction in Sentry

Expected Result

The view_names in the app context should match the transaction name.

Actual Result

The view_names sometimes is UITabBarController or something different. Checkout this sample transaction in Sentry

I guess this is because we add the view_names to the transaction in the client

- (void)addViewNamesToContext:(NSMutableDictionary *)appContext event:(SentryEvent *)event
{
if ([event isKindOfClass:[SentryTransaction class]]) {
SentryTransaction *transaction = (SentryTransaction *)event;
if ([transaction.viewNames count] > 0) {
appContext[@"view_names"] = transaction.viewNames;
}
} else {
appContext[@"view_names"] =
[SentryDependencyContainer.sharedInstance.application relevantViewControllersNames];
}
}

As the SDK captures the transaction on a background thread, the app navigates to a new screen after it captures the auto-generated screen load transaction.

// When a user calls finish on a transaction, which calls captureTransaction, the calling thread
// here could be the main thread, which we only want to block as long as required. Therefore, we
// capture the transaction on a background thread.
__weak SentryHub *weakSelf = self;
[self.dispatchQueue dispatchAsyncWithBlock:^{
[weakSelf captureEvent:transaction
withScope:scope
additionalEnvelopeItems:additionalEnvelopeItems];
}];
}

Are you willing to submit a PR?

No response