React Native崩溃报告的最佳设置是什么?

7
我发现getSentry现在有React Native的崩溃报告功能: https://docs.getsentry.com/hosted/clients/javascript/integrations/react-native/
我很喜欢它们,因为它们能够将异常与您的源代码映射相对应。但我也想捕获本地崩溃。你是否需要同时设置getSentry和Crashlytics?
这里有一个讨论各种选项的主题: https://github.com/facebook/react-native/issues/5378
这是一个看起来不错但有些绕弯的hokeyapp解决方案: http://blog.nparashuram.com/2015/10/crash-analytics-and-feedback-for.html
我想知道人们在生产中成功使用什么来捕获本地和JavaScript崩溃并生成详细的源代码映射报告?

嘿@faceyspacey.com。自你提出问题以来(希望时间不会太长,让你回答以下问题:),很长时间过去了,因此您可能已经使用了一个或多个工具积累了经验。您能分享一下您的经验吗(最好作为对你的问题的补充,因为未格式化的评论难以阅读...)?特别是,我对在react native中使用Crashlytics和Sentry的经验感兴趣(其中之一,而不是两者都用):关于功能、定价的优缺点。我看到Crashlytics没有为js崩溃提供崩溃报告。这是真的吗? - Yossi
2个回答

6

我是react-native-bugsnag的作者。

虽然我与该公司无关,但我喜欢他们的仪表板和定价模型,因此我创建了这个库,为我们的React Native程序员提供使用它们的服务的方式。

[TL/DR]:

1)复制下面的脚本,将其添加到项目根目录中,

2)在脚本开头更改版本以匹配您的React Native项目的本地部分的版本。

3)运行它:

sh crash_report.sh -i <BUGSNAG_KEY> 以打包和上传iOS源代码映射文件,

或者

sh crash_report.sh -a <BUGSNAG_KEY>以打包并上传Android源代码映射文件。

[LONGER VERSION]:

官方的React Native Bugsnag SDK已经发布。

它支持的手动和非手动崩溃报告。

让我解释一下如何操作:

我创建了一个名为crash_report.sh的文件,用于创建我的项目源代码映射,并将它们上传到Bugsnag,以及我所有的项目文件,这样我就可以看到如下所示的丰富错误报告:

enter image description here

要使用此功能,您只需将其添加到项目的根文件夹中,将版本变量(appVersion)更改为与您的Xcode项目或Android Studio项目相对应的版本即可。

crash_report.sh

#!/bin/bash

appVersion='1.0.0'  # IMPORTANT, this has to be the same as the version of your native project in xcode or android studio.

# Get shell args
aflag=''
iflag=''
platform=''
bugsnagKey=''
while getopts 'i:a:' flag; do
  case "${flag}" in
    a) 
    aflag='true'
    bugsnagKey=$OPTARG
    ;;
    i) iflag='true' 
    bugsnagKey=$OPTARG
    ;;
    *) printf "Usage: %s: [-a] [-i] args\n" $0
  esac
done

if [ -n "$aflag" ] && [ -z "$iflag" ]; then
    printf "Now bundling for android.\n"
    platform='android'
fi
if [ -n "$iflag" ] && [ -z "$aflag" ]; then
    printf "Now bundling for ios.\n"
    platform='ios'
fi

if [ -z "$platform" ]; then
    printf "\nUsage: <script> -i <BUGSNAG_KEY> OR -a <BUGSNAG_KEY>. \nTerminating...\n\n"
else
    printf "Now fetching project properties from package.json\n"

    echo 'Now creating sourcemaps\n App version: '${appVersion}' for platform: '${platform}

    # #Create iOS sourcemaps
    react-native bundle --dev false --platform ${platform} --entry-file index.${platform}.js --bundle-output main.${platform}.jsbundle --sourcemap-output main.${platform}.jsbundle.map

    echo 'Now uploading with key: '${bugsnagKey}' for version '${appVersion}

    CUR_DIRR=`pwd`  # Get current directory
    CUR_DIRR=${CUR_DIRR}'/' # Append a forward slash to it

    # Here we get ALL the project files, and form them as curl params, so that we can later on pass them to curl
    PROJECT_FILES=$(find src -name '*.js'  | while read -r i; do echo '-F '$CUR_DIRR$i'=@'$i; done) # Form the right file ending for curl
    # echo ${PROJECT_FILES}

    # #Upload iOS sourcemaps
    curl -w "\n\n%{http_code}\n" --progress-bar -F apiKey=${bugsnagKey} -F appVersion=${appVersion} -F minifiedUrl="main.jsbundle" -F sourceMap=@main.${platform}.jsbundle.map -F minifiedFile=@main.${platform}.jsbundle -F overwrite=true ${PROJECT_FILES} https://upload.bugsnag.com

    echo '\nDone.\n'

fi

希望这能帮助到某些人,我花了好几个小时才弄明白。 祝你玩得开心..!


太棒了,我会去看看的! - faceyspacey.com
1
快速更新 - 我们刚刚推出了官方的 React Native 错误报告 支持,用于 Bugsnag - 它可以报告 JS 和本地 (java/cocoa) 层中的错误,并支持源映射、proguard 和符号化。 - loopj

2
Sentry的原生iOS客户端支持符号化(类似于Crashlytics),因此您可以为JavaScript和Objective-C层添加Sentry。

你认为将get sentry try/catch错误报告放在哪里比较好呢?他们的示例将其放在render函数中,显然添加到所有render函数中的想法非常不吸引人(或者通过某些猴子补丁来覆盖所有渲染方法)。你可以在registerComponent周围包裹它吗? - faceyspacey.com
我对React Native不够熟悉,无法回答这个问题。https://dev59.com/ol0Z5IYBdhLWcg3w6j0e 似乎有一些不错的答案。但我很想知道你最终会采取什么措施——我一直想尝试一下,但一直没有时间。 - ehfeng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接