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 の両方のクラッシュをキャッチするために、本番環境で何を使用して成功しているのでしょうか??

4

2 に答える 2

6

私はreact-native-bugsnagの作者です。

私はその会社とは関係ありませんが、彼らのダッシュボードと価格設定モデルが好きなので、反応ネイティブのプログラマーが彼らのサービスを利用できるようにこのライブラリを作成しました。

[TL/DR]:

1) 以下のスクリプトをコピーし、プロジェクト ルートに追加します。

2) スクリプトの先頭にあるバージョンを、react-native プロジェクトのネイティブ部分のバージョンと一致するように変更します。

3) 実行します。

sh crash_report.sh -i <BUGSNAG_KEY>iOS 用のソースマップをバンドルしてアップロードするには、

また

sh crash_report.sh -a <BUGSNAG_KEY>Android 用のソースマップをバンドルしてアップロードします。

[より長いバージョン]:

公式のreact-native bugsnag SDKがリリースされました。

これは、iOS/Android と Javascriptの処理済みおよび未処理のクラッシュ レポートの両方をサポートしています。

私がそれを行う方法を説明しましょう:

crash_report.shプロジェクト ソースマップを作成し、それらをすべてのプロジェクト ファイルと同様に bugsnag にアップロードするという名前 のファイルを作成したので、以下のような豊富なエラー レポートを表示できます。ここに画像の説明を入力

これを使用するには、プロジェクトのルート フォルダーに追加し、バージョン変数 ( appVersion) を基本的に xcode プロジェクトのバージョンまたは android studio プロジェクトのバージョンに変更するだけです。(これは非常に重要です) そうしないと、bugnsag で難読化解除されたコードを確認して実行することができません。

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

これが誰かの役に立てば幸いです。これを理解するのに何時間もかかりました。楽しむ..!

于 2016-07-04T18:24:35.213 に答える