iOS: `Sentry.Unmask` / `Sentry.Mask` ignored when replay is started manually with both sample rates at 0
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 76/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- ios, objective-c, react-native, typescript
- Lĩnh vực
- backend-api-design, mobile
Hướng nghiên cứu
Bắt đầu từ RNSentryStart.m và kiểm tra điều kiện bảo vệ khởi tạo replay được mô tả trong issue; sau đó đọc RNSentryReplay postInit để xác nhận nó đăng ký những gì. Bản sửa được báo cáo là gọi postInit bất cứ khi nào replay được hỗ trợ, kể cả khi cả hai tỷ lệ lấy mẫu đều bằng không. Hoàn thành khi replay thủ công vẫn giữ nguyên hành vi của Sentry.Unmask và Sentry.Mask trên iOS với các cài đặt đó.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
What React Native libraries do you use?
Expo (SDK 57, CNG / expo prebuild), Expo Router, React Native 0.86 (New Architecture), Hermes.
Are you using sentry.io or on-premise?
sentry.io (SaaS, EU region)
@sentry/react-native SDK Version
8.33.0 (sentry-cocoa 9.32.0). The same condition is still present in 8.34.0 and on main.
How does your development environment look like?
@sentry/react-native 8.33.0
sentry-cocoa 9.32.0 (prebuilt xcframework)
react-native 0.86.3, New Architecture enabled
expo 57
iOS TestFlight build, iPhone
Sentry.init()
Sentry.init({
dsn: '...',
sendDefaultPii: false,
// Replay is only recorded on one screen, started and stopped manually
// (Sentry.getReplay().start() / stop(), available since 8.27).
replaysSessionSampleRate: 0,
replaysOnErrorSampleRate: 0,
integrations: [
Sentry.mobileReplayIntegration({
maskAllText: true,
maskAllImages: true,
maskAllVectors: true,
}),
],
});
// Later, on the screen we want to record (with user consent):
Sentry.getReplay()?.start();
Steps to Reproduce
- Initialize the SDK with
replaysSessionSampleRate: 0andreplaysOnErrorSampleRate: 0, andmobileReplayIntegration({ maskAllText: true }). - Wrap a static label in
<Sentry.Unmask><Text>Continue</Text></Sentry.Unmask>. - Start the replay manually with
Sentry.getReplay().start()and navigate the screen. - Open the replay in Sentry.
Expected Result
The Text wrapped in Sentry.Unmask is visible in the replay, as it is on Android and as it is on iOS when a sample rate is positive. Sentry.Mask masks its subtree.
Actual Result
On iOS, the whole replay is masked: Sentry.Unmask has no effect (and Sentry.Mask is not registered either). Android is fine.
Cause
RNSentryStart.m only registers the replay container classes when a sample rate is positive:
[SentrySDK startWithOptions:options];
#if SENTRY_TARGET_REPLAY_SUPPORTED
if (options.sessionReplay.sessionSampleRate > 0
|| options.sessionReplay.onErrorSampleRate > 0) {
[RNSentryReplay postInit];
}
#endif
+[RNSentryReplay postInit] is what calls setReplayRedactContainerClass: (RNSentryReplayMask), setReplayIgnoreContainerClass: (RNSentryReplayUnmask) and configures the RN breadcrumb converter. Since 8.27, a replay can be started manually with both rates at 0, and sentry-cocoa 9.32.0 always installs SentrySessionReplayIntegration on iOS, whatever the rates. The replay therefore records, but without the container classes: Unmask is ignored, Mask is not applied as a container, and replay breadcrumbs go through the default converter instead of RNSentryReplayBreadcrumbConverter.
Raising a rate is not a workaround for us: it would record (or buffer) replays outside the screen the user consented to, without the on-screen recording indicator we show (App Store Review Guideline 2.5.14).
Suggested fix
Call postInit whenever the replay is supported, regardless of the sample rates:
#if SENTRY_TARGET_REPLAY_SUPPORTED
[RNSentryReplay postInit];
#endif
postInit does not start any recording: it only registers the two container classes and the breadcrumb converter on the installed integration (SentryInternalReplayApi calls are no-ops if the integration is missing). We apply exactly this change at prebuild time as a local workaround.
- Ngôn ngữ chính
- TypeScript
- Star
- 1.8k
- Fork
- 373
- Merge trung bình
- 1 ngày 7 giờ
- Pull request đã merge (30 ngày)
- 105
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của getsentry/sentry-react-native
-
React-Native Replays Task
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
getsentry/sentry-react-native#6680 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Improvement React-Native
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
getsentry/sentry-react-native#6143 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
React-Native Task User Feedbacks
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
getsentry/sentry-react-native#5932 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
React-Native Replays Task
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
getsentry/sentry-react-native#5882 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Good First Issue React-Native Task
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 65/100
getsentry/sentry-react-native#5771 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của getsentry/sentry-react-native
Issue tương tự
-
Add: ESP 2 ROĐang mởapproved check:passed streams:add
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
ipaas: Configure form shows "Deploy to apply." and "Overrides selected Link" when they don't applyCó thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 67/100
wso2/integration-control-plane#1118 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
File reporting form UI DesignĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
UTDNebula/utd-notebook#311 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày