パッケージ、リポジトリ、アプリカテゴリを検索

パッケージ詳細v1.0.0

flutter_crashlytics

Android および iOS で Crashlytics レポートを有効にするための Flutter プラグインであり、レポートにカスタムログや情報を追加する機能も提供します。

30日間ダウンロード
460
いいね数
24
Pub ポイント
40

パッケージをインストール

flutter pub add flutter_crashlytics

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

Flutter Crashlytics は、Android および iOS 向けの Flutter アプリに Firebase Crashlytics を統合するためのプラグインであり、自動クラッシュレポートを可能にします。開発者は、カスタムメッセージやメタデータを含む詳細なクラッシュログをキャプチャして送信でき、問題の診断を支援します。このプラグインは、クラッシュやエラーに関するリアルタイムのインサイトを提供することでアプリの安定性を高め、デバッグおよびパフォーマンス最適化をサポートします。Firebase のバックエンドサービスとシームレスに連携し、複数プラットフォームでアプリの健全性をモニタリングするツールを提供します。

用途

  • 本番環境でのアプリのクラッシュをモニタリングする
  • 詳細なスタックトレースを使用した実行時エラーのデバッグ
  • クラッシュレポートにカスタムログを追加する
  • 時間の経過に伴うアプリの安定性の追跡
  • Firebase Analyticsダッシュボードとの統合

主な機能

  • 自動クラッシュ検出
  • カスタムログおよびメタデータのサポート
  • クロスプラットフォームの Android および iOS 対応
  • リアルタイムクラッシュレポート
  • Firebase Crashlyticsダッシュボードとの統合

適している対象

  • Firebase を使用するモバイルアプリ開発者
  • アプリの信頼性に注力するチーム
  • クラッシュ分析を必要とするプロジェクト
  • プロダクショングレードのFlutterアプリを開発する開発者
  • エラー追跡および診断が必要なアプリ

注意事項

  • Firebase プロジェクトの設定が必要です
  • Android および iOS プラットフォームに限定
  • アプリ起動時に適切な初期化が必要です
  • 一部のデバイスでは追加の権限が必要になる場合があります
  • データの過負荷を避けるために、カスタムログは慎重に使用するべきです

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

flutter_crashlytics

pub package

Flutter plugin to enable Crashlytics reporting.

Setup

Firebase Crashlytics

If you're using Firebase instead of Fabric, you must first setup your app to use Firebase as per this tutorial. https://codelabs.developers.google.com/codelabs/flutter-firebase/#4

The instructions are the same for Fabric and Firebase, except that for Firebase, you don't get an API key so you don't have to add it anywhere.

Android

To setup Crashlytics on Android side, you need to set the Fabric ID in your manifest like this: (Only do this if using Fabric, not Firebase as you will not have an API Key)

 <meta-data
            android:name="io.fabric.ApiKey"
            android:value="YOUR_ID_HERE" />

You also need to change your build.gradle file like this:

buildscript {
    repositories {
        ...
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
        ...
    }
}

And apply the fabric plugin apply plugin: 'io.fabric'

Nothing more.

Symbolicating Native Android Crashes

Unfortunately, even pure Dart projects can't always protect you from native crashes. Without the following setup, a native crash like SIGSEGV will appear as a blank stacktrace in Crashlytics. Here's how to get some symbols:

Add the following to build.gradle, after apply plugin: 'io.fabric':

crashlytics {
    enableNdk true
    androidNdkOut "../../debugSymbols"
    androidNdkLibsOut "../../build/app/intermediates/transforms/stripDebugSymbol/release/0/lib"
}

Ensure that the NDK bundle is installed or the stripDebugSymbol directory won't get created.

Now setup a release script to populate the debugSymbols directory, guided by the instructions from https://github.com/flutter/flutter/wiki/Crashes

# Build our app like usual
flutter -v build apk --release

### BEGIN MODIFICATIONS

# Copy mergeJniLibs to debugSymbols
cp -R ./build/app/intermediates/transforms/mergeJniLibs/release/0/lib debugSymbols

# The libflutter.so here is the same as in the artifacts.zip found with symbols.zip
cd debugSymbols/armeabi-v7a

# Download the corresponding libflutter.so with debug symbols
ENGINE_VERSION=`cat $HOME/flutter/bin/internal/engine.version`
gsutil cp gs://flutter_infra/flutter/${ENGINE_VERSION}/android-arm-release/symbols.zip .

# Replace libflutter.so
unzip -o symbols.zip
rm -rf symbols.zip

# Upload symbols to Crashlytics
cd ../../android
./gradlew crashlyticsUploadSymbolsRelease

### END MODIFICATIONS

# Release your app like usual
cd ../..
fastlane submit_playalpha
iOS

On iOS side you need to set your Fabric ID under your Info.plist like: (Only do this if using Fabric, not Firebase as you will not have an API Key)

<key>Fabric</key>
    <dict>
        <key>APIKey</key>
        <string>YOUR_ID_HERE</string>
        <key>Kits</key>
        <array>
            <dict>
                <key>KitInfo</key>
                <dict/>
                <key>KitName</key>
                <string>Crashlytics</string>
            </dict>
        </array>
    </dict>

Turn off automatic collection with a new key to your Info.plist file (GDPR compliency if you want it):

Key: firebase_crashlytics_collection_enabled

Value: false

Don't forget to add your Run Script step (with any version of Xcode) on the build phases tab. If using Xcode 10, you also must add your app's built Info.plist location to the Build Phase's Input Files field:

$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)

ios run script

That's it :)

Flutter

All you need to do under your code is to let the plugin handle the Flutter crashes.

Your main method should look like:

void main() async {
  bool isInDebugMode = false;

  FlutterError.onError = (FlutterErrorDetails details) {
    if (isInDebugMode) {
      // In development mode simply print to console.
      FlutterError.dumpErrorToConsole(details);
    } else {
      // In production mode report to the application zone to report to
      // Crashlytics.
      Zone.current.handleUncaughtError(details.exception, details.stack);
    }
  };

  await FlutterCrashlytics().initialize();

  runZoned<Future<Null>>(() async {
    runApp(MyApp());
  }, onError: (error, stackTrace) async {
    // Whenever an error occurs, call the `reportCrash` function. This will send
    // Dart errors to our dev console or Crashlytics depending on the environment.
    await FlutterCrashlytics().reportCrash(error, stackTrace, forceCrash: false);
  });
}

forceCrash allows you to have a real crash instead of the red screen, in that case the exception will be tagged as fatal.

API available

  • Add log to crash reporting with log(String msg, {int priority, String tag})
  • Add manual log to crash reporting with logException(Error/Exception exception, Stacktrace stack)
  • Add user info to crash reporting with setUserInfo(String identifier, String email, String name)
  • Add general info to crash reporting with setInfo(String key, dyncamic value)

Limitation

This plugin uses Crashlytics SDK to log manual dart crashes, all manually logged crashes are tagged as non fatal under Crashlytics, that's a limitation of the SDK.

You can bypass that limitation with the forceCrash parameter, instead of the red screen an actual crash will be appended, the crash will be tagged as fatal.

On iOS fatal crash has their dart stacktrace under the Logs tab of Crashlytics, that's a limitation of iOS that prevents developers to set a custom stacktrace to an exception.

Contribution

We love contributions! Don't hesitate to open issues and make pull request to help improve this plugin.

カテゴリー

依存関係

依存関係一覧 1 件

ソースリポジトリ

このパッケージを使用しているプロジェクト

データはまだありません。