Install react-native-sentry without react-native link

acro5piano

Kay Gosho

Posted on April 5, 2019

Install react-native-sentry without react-native link

[Added]
Sentry has a complete manual integration guide. It might be waste of time for you to read this article!

https://docs.sentry.io/clients/react-native/manual-setup/
[/Added]

[Added again]
Now we can use fully integrated Sentry SDK for React Native:

https://github.com/getsentry/sentry-react-native
[/Added again]

Sentry is a great tool to collect runtime errors.

react-native-sentry is an official package by Sentry. While it is still in Beta, works well.

https://github.com/getsentry/react-native-sentry

Official document uses react-native link, but I don't use it as it causes errors very often.

https://docs.sentry.io/clients/react-native/

yarn add react-native-sentry

iOS

open node_modules/react-native-sentry/ios/

Then, manually drug and drop RNSentry.xcodeproj to Xcode Library. This pattern is commonly used to install native modules to React Native apps.

See my picture here:

https://github.com/kmagiera/react-native-gesture-handler/issues/205#issuecomment-449900414

Then, add libRNSentry.a to Build phases > Link Binary With Libraries. Note that you must not add neither libRNSentryStatic.a nor Sentry.framework which causes build errors.

Android

Open android/settings.gradle and add the following lines:

include ':react-native-sentry'
project(':react-native-sentry').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sentry/android')

Then, open android/app/build.gradle and add the following lines:

dependencies {
    compile project(':react-native-sentry')
    // other code here
}

Finally, open android/app/src/main/java/com/nupp1/MainApplication.java and add the package:

package com.your.app;

import android.app.Application;

import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;

import io.sentry.RNSentryPackage;  // <-- Add this line

import java.util.Arrays;
import java.util.List;

public class MainApplication extends Application implements ReactApplication {

  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
    @Override
    public boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }

    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
          new RNSentryPackage()        // <-- Add this line
      );
    }

    @Override
    protected String getJSMainModuleName() {
      return "index";
    }
  };

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }

  @Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this, /* native exopackage */ false);
  }
}

I hope this helps you.

💖 💪 🙅 🚩
acro5piano
Kay Gosho

Posted on April 5, 2019

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related