npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@fobos531/sentry-expo

v4.1.1

Published

Catch your Javascript errors for your production Expo apps!

Downloads

2

Readme

runs with expo

sentry-expo

Keep 🐛🐜🐞 out of your app

Bugs can be really cool, but not when it comes to your app.

That's where sentry-expo comes in! Keep a close eye on your app, whether it's in development, staging, or production, by getting real-time insight into errors and bugs. That way, you can quickly reproduce, fix, and re-deploy!

🤔 How do I use this?

Before getting real-time updates on errors and making your app generally incredible, you'll need to follow these steps:

  1. Sign up for Sentry (it's free), and create a project in your Dashboard. Take note of your organization name, and project name.
  2. Take note of your DSN, you'll need it later
  3. Go to the Sentry API section, and create an auth token (Ensure you have project:write selected under scopes). Save this, too.

Once you have each of these: organization name, project name, DSN, and auth token, you're all set!

Step 1: Installation

In your project directory, run

expo install sentry-expo

sentry-expo requires some additional dependencies, so you should also run

expo install expo-application expo-constants expo-device expo-updates @sentry/react-native

If you don't have expo-cli installed, you should! But you can also just install with yarn or npm.

Step 2: Code

Add the following to your app's main file (usually App.js):

import * as Sentry from 'sentry-expo';

Sentry.init({
  dsn: 'YOUR DSN HERE',
  enableInExpoDevelopment: true,
  debug: true, // If `true`, Sentry will try to print out useful debugging information if something goes wrong with sending the event. Set it to `false` in production
});

// Access any @sentry/react-native exports via:
Sentry.Native.*

// Access any @sentry/browser exports via:
Sentry.Browser.*

Step 3: App Config

Configure your postPublish hook

Add expo.hooks to your project's app.json (or app.config) file:

{
  "expo": {
    // ... your existing configuration
    "hooks": {
      "postPublish": [
        {
          "file": "sentry-expo/upload-sourcemaps",
          "config": {
            "organization": "your sentry organization's short name here",
            "project": "your sentry project's name here",
            "authToken": "your auth token here"
          }
        }
      ]
    }
  }
}

Add the Config Plugin

Note: Disregard the following if you're using the classic build system (expo build:[android|ios]).

Add expo.plugins to your project's app.json (or app.config) file:

{
  "expo": {
    // ... your existing configuration
    "plugins": ["sentry-expo"]
  }
}

If you directly edit your native ios/ and android/ directories (i.e. you have ejected your project, or have a bare workflow project), you should instead use yarn sentry-wizard -i reactNative -p ios android to configure your native projects.

"No publish builds"

Note: Disregard the following if you're using the classic build system (expo build:[android|ios]).

With expo-updates, release builds of both iOS and Android apps will create and embed a new update from your JavaScript source at build-time. This new update will not be published automatically and will exist only in the binary with which it was bundled. Since it isn't published, the sourcemaps aren't uploaded in the usual way like they are when you run expo publish (actually, we are relying on Sentry's native scripts to handle that). Because of this you have some extra things to be aware of:

  • Your release will automatically be set to Sentry's expected value- ${bundleIdentifier}@${version}+${buildNumber} (iOS) or ${androidPackage}@${version}+${versionCode} (Android).
  • Your dist will automatically be set to Sentry's expected value- ${buildNumber} (iOS) or ${versionCode} (Android).
  • The configuration for build time sourcemaps comes from the ios/sentry.properties and android/sentry.properties files. For more information, refer to Sentry's documentation. If you're using the managed workflow, then we handle setting these values for your via the plugin you added above.

Please note that configuration for expo publish and expo export in bare and managed is still done via app.json.

Skipping or misconfiguring either of these will result in sourcemaps not working, and thus you won't see proper stacktraces in your errors.

Self-hosting OTA?

If you're self-hosting your Over the Air Updates (this means you run expo export instead of expo publish), you need to:

  • replace hooks.postPublish in your app.json file with hooks.postExport (everything else stays the same)
  • add the RewriteFrames integration to your Sentry.init call like so:
Sentry.init({
  dsn: SENTRY_DSN,
  enableInExpoDevelopment: true,
  integrations: [
    new RewriteFrames({
      iteratee: (frame) => {
        if (frame.filename) {
          // the values depend on what names you give the bundle files you are uploading to Sentry
          frame.filename =
            Platform.OS === 'android' ? 'app:///index.android.bundle' : 'app:///main.jsbundle';
        }
        return frame;
      },
    }),
  ],
});

👏 Contributing

If you like sentry-expo and want to help make it better then please feel free to open a PR! Make sure you request a review from one of our maintainers 😎

Some Links

Sentry Website

sentry-react-native repo