-
-
Notifications
You must be signed in to change notification settings - Fork 354
feat(expo): Add RNSentrySDK APIs support to @sentry/react-native/expo plugin #4633
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: capture-app-start-errors-v7
Are you sure you want to change the base?
feat(expo): Add RNSentrySDK APIs support to @sentry/react-native/expo plugin #4633
Conversation
|
iOS (legacy) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 60d1e83+dirty | 1207.79 ms | 1207.35 ms | -0.44 ms |
| f26d7a8+dirty | 1209.49 ms | 1207.54 ms | -1.95 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 60d1e83+dirty | 3.41 MiB | 4.67 MiB | 1.26 MiB |
| f26d7a8+dirty | 3.44 MiB | 4.67 MiB | 1.23 MiB |
iOS (new) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 60d1e83+dirty | 1201.87 ms | 1204.61 ms | 2.74 ms |
| f26d7a8+dirty | 1227.33 ms | 1220.67 ms | -6.66 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 60d1e83+dirty | 3.41 MiB | 4.67 MiB | 1.26 MiB |
| f26d7a8+dirty | 3.44 MiB | 4.67 MiB | 1.23 MiB |
Android (legacy) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| f26d7a8+dirty | 571.36 ms | 637.92 ms | 66.56 ms |
| 60d1e83+dirty | 396.72 ms | 390.04 ms | -6.68 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| f26d7a8+dirty | 43.75 MiB | 48.08 MiB | 4.32 MiB |
| 60d1e83+dirty | 43.75 MiB | 48.08 MiB | 4.32 MiB |
Android (new) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| f26d7a8+dirty | 380.15 ms | 407.84 ms | 27.68 ms |
| 60d1e83+dirty | 406.16 ms | 422.83 ms | 16.67 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| f26d7a8+dirty | 43.94 MiB | 48.90 MiB | 4.96 MiB |
| 60d1e83+dirty | 43.94 MiB | 48.90 MiB | 4.96 MiB |
lucas-zimerman
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Overall the PR looks good and thank you for the tests!
I still think we could fine tune a bit more the android part and after it we could get ready for merge
Co-authored-by: LucasZF <lucas-zimerman1@hotmail.com>
|
Note: The Build & Test / Type Check Typescript 3.8 (pull_request) failure should be fixed when we merge #4673 from |
Co-authored-by: Krystof Woldrich <31292499+krystofwoldrich@users.noreply.github.com>
|
I'm currently updating the base branch with the latest main since there was quite a lot of development that was not synced to the feature branch. |
Thank you for the heads up @krystofwoldrich 🙇 |
Co-authored-by: Krystof Woldrich <31292499+krystofwoldrich@users.noreply.github.com>
…getsentry/sentry-react-native into antonis/4625-expo-useNativeInit
2363742 to
588ba6d
Compare
krystofwoldrich
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for the fixes. 🚀 It looks great!
|
|
||
| ### Features | ||
|
|
||
| - Add RNSentrySDK APIs support to @sentry/react-native/expo plugin ([#4633](https://github.com/getsentry/sentry-react-native/pull/4633)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit. It would be nice to include an example code snippet and a small summary of what will the flag do.
Co-authored-by: Antonis Lilis <antonis.lilis@gmail.com>
|
@sentry review |
|
@antonis should we restart this PR? |
I don't expect this to have major conflicts with main/v7. |
- Resolved conflicts by separating imports from logger and version modules - Preserved useNativeInit functionality from PR #4633 - Fixed optional chain expressions in withSentryAndroid and withSentryIOS - Updated test mocks to use logger instead of utils
| } | ||
|
|
||
| export function modifyAppDelegate(config: ExpoConfig): ExpoConfig { | ||
| return withAppDelegate(config, async config => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bug: The modifyAppDelegate function incorrectly returns a Promise<ExpoConfig> instead of ExpoConfig due to an async callback, breaking the synchronous call chain for iOS native initialization.
Severity: HIGH | Confidence: High
🔍 Detailed Analysis
The modifyAppDelegate function is declared to return an ExpoConfig but it uses an async callback with withAppDelegate, which causes the function to actually return a Promise<ExpoConfig>. The return value, stored in appDelegateCfc, is then used as if it were a synchronous ExpoConfig object and passed to withDangerousMod. This occurs when useNativeInit is true. Passing a promise instead of the expected configuration object to withDangerousMod will cause the Sentry iOS native initialization to fail.
💡 Suggested Fix
Remove the async keyword from the callback passed to withAppDelegate inside the modifyAppDelegate function. This will make the function return ExpoConfig synchronously, matching its type signature and the Android implementation.
🤖 Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent.
Verify if this is a real issue. If it is, propose a fix; if not, explain why it's not
valid.
Location: packages/core/plugin/src/withSentryIOS.ts#L90
Potential issue: The `modifyAppDelegate` function is declared to return an `ExpoConfig`
but it uses an `async` callback with `withAppDelegate`, which causes the function to
actually return a `Promise<ExpoConfig>`. The return value, stored in `appDelegateCfc`,
is then used as if it were a synchronous `ExpoConfig` object and passed to
`withDangerousMod`. This occurs when `useNativeInit` is true. Passing a promise instead
of the expected configuration object to `withDangerousMod` will cause the Sentry iOS
native initialization to fail.
Did we get this right? 👍 / 👎 to inform future reviews.
Reference ID: 7592441
📢 Type of change
Based on feat: Capture app start errors before JSBased on #5470
📜 Description
Adds RNSentrySDK APIs support to @sentry/react-native/expo plugin by importing sentry and adding injecting
RNSentrySDK.init/startin the Android MainApplication (Kotlin or Java) or AppDelegate (Objective-C or Swift).This feature is opt-out to enable it set
useNativeInittotruein your@sentry/react-native/expoplugin configuration.💡 Motivation and Context
Fixes #4625
💚 How did you test it?
CI, Manual
📝 Checklist
sendDefaultPIIis enabled🔮 Next steps
#skip-changelog