This repository contains mono repository structure with multiple React Native and Expo project for development and testing.
- / -> monorepo root private package
- /samples -> sample application, expo, rn...
- /packages -> RN SDK packages
- /dev-packages -> dev packages, ts-3.8 test runner, e2e tests components and runner
- /performance-tests -> applications used for measuring performance in CI
We use Volta to ensure we use consistent versions of node and yarn.
sentry-react-native is a monorepo containing several packages, and we use lerna to manage them. To get started,
install all dependencies, and then perform an initial build, so TypeScript can read all of the linked type definitions.
$ yarn
$ yarn build
With that, the repo is fully set up and you are ready to run all commands.
cd packages/core yarn build:sdk:watch
## Testing
```sh
yarn test
# Or the watcher when writing tests:
cd packages/core
yarn test:watch
First, set up the Sentry CLI token.
A recommended approach is to create a file named .env.sentry-build-plugin in the root folder of each sample and add:
SENTRY_AUTH_TOKEN=...To obtain the correct token, log in to Sentry.io, then visit: https://docs.sentry.io/cli/configuration/#to-authenticate-manually From there, generate a token following the documentation.
Now we can go into the sample project, install and build it:
cd samples/react-native/
yarn start # Metro development server
npx pod-install
yarn ios # iOS Development build
yarn android # Android Development buildRecommended is to open the native project in samples/react-native/android and samples/react-native/ios on Android Studio and Xcode respectively.
For android switch newArchEnabled to false in android/gradle.properties. For iOS explicitly disable fabric in samples/react-native/ios/Podfile by setting :fabric_enabled => false before pod install.
yarn pod-install-legacy
yarn react-native run-ios
yarn react-native run-android
# Release builds
yarn pod-install-legacy-production
yarn react-native run-ios --mode=Release
yarn react-native run-android --mode=releaseyarn pod-install
yarn react-native run-ios
yarn react-native run-android
# Release builds
yarn pod-install-production
yarn react-native run-ios --mode=Release
yarn react-native run-android --mode=ReleaseHead to the macOS sample root directory:
cd samples/react-native-macos/
yarn
bundle install
yarn pod-install-legacy
yarn startYou can now build and run the project from command line:
yarn react-native run-macosor by openning the samples/react-native-macos/macos/sentry-react-native-sample.xcworkspace.
Note that the new architecture is not supported for the macOS sample at this point.
Here are step on how to test your changes in sentry-cocoa with sentry-react-native. We assume you have both repositories cloned in siblings folders.
- Build
sentry-cocoa.
cd sentry-cocoa
make init- Link local
sentry-cocoabuild insentry-react-native
cd sentry-react-nativeComment out sentry dependency in RNSentry.podspec.
- s.dependency 'Sentry', '7.31.0'
+ s.dependency 'Sentry'Add local pods to sample/ios/Podfile.
target 'sample' do
# ... react native config
pod 'Sentry', :path => '../../../../sentry-cocoa'
# ... rest of the configuration
endHere are step on how to test your changes in sentry-java with sentry-react-native. We assume that you have sentry-java setup, Android SDK installed, correct JAVA version etc.
- Build and publish
sentry-javalocally.
cd sentry-java
make dryRelease
ls ~/.m2/repository/io/sentry/sentry-android # check that `sentry-java` was published- Add local maven to the sample project.
cd sentry-react-native/sampleAdd local maven to sample/android/build.gradle.
allprojects {
repositories {
mavenLocal()
}
}Update sentry-android version, to the one locally published, in android/build.gradle.
dependencies {
implementation 'com.facebook.react:react-native:+'
- api 'io.sentry:sentry-android:5.4.0'
+ api 'io.sentry:sentry-android:6.7.7-my-local-version'
}Here are steps on how to debug the gradle builds process with sentry-android-gradle-plugin. We assume that you have sentry-android-gradle-plugin setup, Android SDK installed, correct JAVA version etc.
- Add the following code to
samples/react-native/android/settings.gradle, this ensure the plugin builds at the beginning of the application build:
includeBuild('../../../../sentry-android-gradle-plugin/plugin-build') {
dependencySubstitution {
substitute(module 'io.sentry:sentry-android-gradle-plugin') using project(':')
}
}../../../../sentry-android-gradle-plugin/plugin-build this example works if sentry-react-native and sentry-android-gradle-plugin are sibling directories.
- Open
samples/react-native/androidin Android Studio. - Add
Remote JVM Debugconfiguration (keep all defaults). - Run build command with
-Dorg.gradle.debug=trueand--no-daemon, example:
./gradlew assembleRelease -Dorg.gradle.debug=true --no-daemon- The build command will wait for the debugger connection, go to the Android Studio and select the newly created
Remote JVM Debugconfiguration and clickDebug. - The build process will stop on active breakpoint.