Apple プラットフォーム向け Crashlytics を使ってみる

プラットフォームを選択: iOS+ Android Android NDK Flutter Unity


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

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

始める前に

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

  2. 推奨: パンくずリストのログを自動的に取得して、クラッシュ イベントまたは非致命的イベントに至るまでのユーザー操作を把握するには、Firebase プロジェクトで Google Analytics を有効にする必要があります。

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

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

    パンくずリストのログは、Crashlytics でサポートされているすべての Apple プラットフォーム(watchOS を除く)で利用できます。

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

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

  1. Xcode でアプリのプロジェクトを開いたまま、[File] > [Add Packages] の順に移動します。
  2. プロンプトが表示されたら、Firebase Apple プラットフォーム SDK リポジトリを追加します。
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Crashlytics ライブラリを選択します。
  5. パンくずリストのログを利用するには、Google Analytics 用の Firebase SDK もアプリに追加します。Firebase プロジェクトで Google アナリティクスが有効になっていることを確認してください。
  6. ターゲットのビルド設定の [Other Linker Flags] セクションに -ObjC フラグを追加します。
  7. (macOS のみ)Info.plist にキー NSApplicationCrashOnExceptions を追加し、YES に設定します。
  8. 上記の作業が完了すると、Xcode は依存関係の解決とダウンロードをバックグラウンドで自動的に開始します。

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

  1. Firebase モジュールを App 構造体または 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] セクションに、以下のファイルの場所のパスを追加します。

      ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
      ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}
      ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist
      $(TARGET_BUILD_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/GoogleService-Info.plist
      $(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)
      プロジェクトのビルド設定に ENABLE_USER_SCRIPT_SANDBOXING=YESENABLE_DEBUG_DYLIB=YES がある場合は、以下の内容を組み込みます。
      ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}.debug.dylib

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

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

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

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

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

    SwiftUI

    Button("Crash") {
      fatalError("Crash was triggered")
    }

    UIKit

    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 でアプリをビルドして実行します。

    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 ダッシュボードにアクセスします。

次のステップ

  • クラッシュ レポートの設定をカスタマイズするために、オプトイン レポート、ログ、キー、非致命的なエラーの追跡を追加する。

  • Android アプリのクラッシュ レポートを Crashlytics ダッシュボードから直接 Google Play トラックでフィルタリングできるように、Google Play と統合する。これにより、ダッシュボードで特定のビルドに注目できます。