Check out what’s new from Firebase at Google I/O 2022. Learn more

Firebase Crashlytics を使ってみる

このクイックスタートでは、Firebase コンソールで包括的なクラッシュ レポートを表示できるよう、Firebase Crashlytics SDK を使用してアプリに Firebase Crashlytics を設定する方法について説明します。

Crashlytics を設定するには、Firebase コンソールと IDE の両方でタスク(Firebase 構成ファイルと Crashlytics SDK の追加など)を行う必要があります。設定を完了するには、強制的にテスト クラッシュを発生させて、最初のクラッシュ レポートを Firebase に送信する必要があります。

始める前に

  1. まだ Firebase を Apple プロジェクトに追加していない場合は追加します。Apple アプリをお持ちでない場合は、サンプルアプリをダウンロードできます。

  2. 推奨: クラッシュに遭遇していないユーザー数の表示、パンくずリストのログ、ベロシティ アラートなどの機能を利用するには、Firebase プロジェクトで Google アナリティクスを有効にする必要があります。

    Crashlytics でサポートされているすべての Apple プラットフォーム(watchOS を除く)で、Google アナリティクスのこれらの機能を利用できます。macOS と tvOS 向けのアプリには SDK v8.9.0 以降が必要です。

    • 既存の Firebase プロジェクトで Google アナリティクスが有効になっていない場合は、Firebase コンソールで、 > [プロジェクトの設定][統合] タブで Google アナリティクスを有効にします。

    • 新しい Firebase プロジェクトを作成する場合は、プロジェクトの作成ワークフローで Google アナリティクスを有効にします。

ステップ 1: アプリに Firebase Crashlytics SDK を追加する

Swift Package Manager を使用して Firebase の依存関係のインストールと管理を行います。

  1. Xcode でアプリのプロジェクトを開いたまま、[File] > [Add Packages] の順に移動します。
  2. プロンプトが表示されたら、Firebase Apple プラットフォーム SDK リポジトリを追加します。
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Crashlytics ライブラリを選択します。
  5. Crashlytics でのエクスペリエンスを最適化するために、Firebase プロジェクトで Google アナリティクスを有効にして、Google アナリティクス用の Firebase SDK をアプリに追加することをおすすめします。ライブラリで IDFA の収集を行う / 行わないを選択できます。
  6. 上記の作業が完了すると、Xcode は依存関係の解決とバックグラウンドでのダウンロードを自動的に開始します。

次に、Firebase モジュールを構成します。

  1. Firebase モジュールを UIApplicationDelegate にインポートします。

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  2. FirebaseApp 共有インスタンスを構成します。通常はアプリの application:didFinishLaunchingWithOptions: メソッドで行います。

    Swift

    // Use the Firebase library to configure APIs.
    FirebaseApp.configure()
    

    Objective-C

    // Use the Firebase library to configure APIs.
    [FIRApp configure];
    

ステップ 2: dSYM ファイルを自動的にアップロードするように Xcode を設定する

Crashlytics で人間が読める形式のクラッシュ レポートを生成するには、プロジェクトのデバッグ シンボル(dSYM)ファイルが必要です。以下の手順では、アプリをビルドするたびに dSYM を自動的に生成して処理し、dSYM ファイルをアップロードするように Xcode を構成する方法について説明します。

  1. プロジェクトの Xcode ワークスペースを開き、左側のナビゲータでプロジェクト ファイルを選択します。

  2. [TARGETS] リストでメインのビルド ターゲットを選択します。

  3. [Build Settings] タブをクリックして次の手順を行い、Xcode でビルドの dSYM が生成されるようにします。

    1. [All] をクリックし、debug information format を検索します。

    2. すべてのビルドタイプについて、[Debug Information Format] を DWARF with dSYM File に設定します。

  4. [Build Phases] タブをクリックして次の手順を行い、Xcode が dSYM を処理してファイルをアップロードできるようにします。

    1. [] > [New Run Script Phase] をクリックします。

      この新しい Run Script フェーズがプロジェクトの最後のビルドフェーズになるようにします。そうでない場合、Crashlytics は dSYM を適切に処理できません。

    2. 新しい [Run Script] セクションを開きます。

    3. スクリプト フィールド([Shell] ラベルの下)に、次の実行スクリプトを追加します。

      このスクリプトは、プロジェクトの dSYM ファイルを処理して Crashlytics にアップロードします。

      "${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run"
    4. [Input Files] セクションに、以下のファイルの場所のパスを追加します。

      • プロジェクトの dSYM ファイルの場所。

        ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}

        プロジェクトの dSYM ファイルの場所を指定すると、Crashlytics は大規模なアプリの dSYM をより迅速に処理できます。

      • プロジェクトのビルド済み Info.plist ファイルの場所。

        $(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)

        プロジェクトのビルド済み Info.plist ファイルの場所を指定すると、Crashlytics はアプリのバージョンを dSYM に関連付けることができます。

dSYM ファイルと Crashlytics の詳細(dSYM ファイルを手動でアップロードする方法など)については、難読化解除されたクラッシュ レポートを取得するをご覧ください。

ステップ 3: 強制的にテスト クラッシュを発生させて設定を完了する

Crashlytics の設定を完了し、Firebase コンソールの Crashlytics ダッシュボードで最初のデータを確認するには、強制的にテスト クラッシュを発生させる必要があります。

  1. 強制的にテスト クラッシュを発生させるためのコードをアプリに追加します。

    次のコードを使用するとアプリにボタンが追加され、このボタンを押すとクラッシュを発生させることができます。ボタンには「Test Crash」というラベルが付いています。

    Swift

    import UIKit
    
    class ViewController: UIViewController {
      override func viewDidLoad() {
          super.viewDidLoad()
    
          // Do any additional setup after loading the view, typically from a nib.
    
          let button = UIButton(type: .roundedRect)
          button.frame = CGRect(x: 20, y: 50, width: 100, height: 30)
          button.setTitle("Test Crash", for: [])
          button.addTarget(self, action: #selector(self.crashButtonTapped(_:)), for: .touchUpInside)
          view.addSubview(button)
      }
    
      @IBAction func crashButtonTapped(_ sender: AnyObject) {
          let numbers = [0]
          let _ = numbers[1]
      }
    }
    

    Objective-C

    #import "ViewController.h"
    
    @implementation ViewController
    ‐ (void)viewDidLoad {
        [super viewDidLoad];
    
        // Do any additional setup after loading the view, typically from a nib.
    
        UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        button.frame = CGRectMake(20, 50, 100, 30);
        [button setTitle:@"Test Crash" forState:UIControlStateNormal];
        [button addTarget:self action:@selector(crashButtonTapped:)
            forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:button];
    }
    
    ‐ (IBAction)crashButtonTapped:(id)sender {
        @[][1];
    }
    
    @end
    
  2. Xcode でアプリをビルドして実行します。次の手順を行って、テスト用のデバイスまたはシミュレータが Xcode デバッガから切断されていることを確認します(Xcode デバッガは Crashlytics の動作を妨げます)。

    1. [ Build and then run the current scheme] をクリックして、テスト用のデバイスまたはシミュレータでアプリをビルドします。

    2. アプリが実行中になるまで待ってから、[ Stop running the scheme or action] をクリックしてアプリの初期インスタンスを閉じます。この初期インスタンスには、Crashlytics の動作を妨げるデバッガが含まれています。

  3. アプリの最初のクラッシュ レポートを送信するために、強制的にテスト クラッシュを発生させます。

    1. テスト用のデバイスまたはシミュレータのホーム画面からアプリを開きます。

    2. アプリ内で、上述のコードを使用して追加した [Test Crash] ボタンを押します。

    3. アプリがクラッシュしたら Xcode からアプリを再実行します。これにより、Firebase にクラッシュ レポートが送信されます。

  4. Firebase コンソールの Crashlytics ダッシュボードに移動して、テスト クラッシュを確認します。

    コンソールを更新し、5 分経過してもテスト クラッシュが表示されない場合は、デバッグ ロギングを有効にして、アプリがクラッシュ レポートを送信しているかどうかを確認してください。


これで完了です。Crashlytics がアプリのクラッシュをモニタリングするようになりました。すべてのレポートと統計情報を参照して調査するには、Crashlytics ダッシュボードにアクセスします。

次のステップ