React Native 如何在使用EAS的世博会中设置哨兵?

kadbb459  于 2023-02-05  发布在  React
关注(0)|答案(3)|浏览(125)

我在Expo应用中使用sentry-expo。我使用EAS构建。所有事件都在开发中成功捕获,但当我进行构建时,Sentry无法从独立应用捕获任何事件。
我可以看到源Map已成功上传。
在我的App.tsx中:

Sentry.init({
  dsn: Constants.manifest.extra!.sentryDsn || SENTRY_DSN,
  enableInExpoDevelopment: true,
  debug: true,
});

我的app.config.js

import { SENTRY_AUTH_TOKEN, SENTRY_DSN } from "react-native-dotenv";

export default ({ config }) => {
  const extra = {
    sentryDsn: SENTRY_DSN,
  };

  const sentryConfig = {
    file: "sentry-expo/upload-sourcemaps",
    config: {
      organization: "***",
      project: "***",
      authToken: SENTRY_AUTH_TOKEN,
    },
  };

  config.hooks.postPublish.push(sentryConfig);

  return {
    ...config,
    extra,
  };
};

我错过了什么?

erhoui1w

erhoui1w1#

先生,我真的不知道。但是我可以想象,你必须检查https://docs.expo.dev/guides/using-sentry/中的第3步,并检查你的sentryConfig。
有点不一样

{
  "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"
          }
        }
      ]
    }
  }
}
r7xajy2e

r7xajy2e2#

EAS构建版本将使用如下格式写入帧:
应用程序:///捆绑包-{一些GUID}.jsbundle
并上传名称如下的源图:
~/主.jsbundle
问题是源贴图名称和帧不匹配。
您可以在init期间重写这些帧,如下所示:

import { RewriteFrames } from "@sentry/integrations";

  Sentry.init({
    dsn: SENTRY_KEY,
    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;
        },
      }),
    ],
  });

然后,您的源Map应该在将来的构建中正确链接。

b09cbbtk

b09cbbtk3#

你的env工作正常吗?我在这里看到了一些问题,首先你使用Constants.manifest来访问env变量。一旦你发布了一个更新到eas,Constants.manifest就变得不明确了。所以使用Constants.expoConfig
第二件事是你是否检查了react-native-dotenv是否与eas一起工作,因为我们可以直接使用dotenv来设置env。
安装dotenv;
npm install dotenvyarn add dotenv
应用程序配置js;

import 'dotenv/config'

expo {
   ...,
   extra: {
      DSN: process.env.DSN // this will be read from .env file locally and for eas build, it will use the env variables add to eas project
}

}

相关问题