LoginSignup
4
3

More than 3 years have passed since last update.

[Android][iOS]Crashlytics導入メモ

Last updated at Posted at 2020-11-13

1. Androidメモ

難読化への対応

build.gradle(app)への設定の注意

Execution failed for task
‘:app:uploadCrashlyticsMappingFileRelease’.
> Expected file collection to contain exactly one file, however, it contains no files.

とかいうエラーが出た時の原因と対処

前提
build.gradleで「minify true」を設定している場合、ビルド時に難読化が適用され、mapping.txtが作成される。
「minify false」の場合、ビルド時に難読化されず、mapping.txtは作成されない。

原因と対処
「minify false」かつ「mappingFileUploadEnabled true」を設定すると、ビルド時にmapping.txtが作成されていなくても、FirebaseSDKはmapping.txtをFirebaseにアップロードしようとして、上記のエラーが発生する。

したがって、「minify false」を設定する場合は、「mappingFileUploadEnabled false」(またはmappingFileUploadEnabled自体を書かないデフォルトfalseだから)を設定する必要があり、
「minify true」を設定する場合は、「mappingFileUploadEnabled trueまたはfalse」どちらでもよい(ただし、mappingFileUploadEnabled falseの場合、Firebaseのクラッシュログは難読化されているので、クラッシュログ見てもよくわかんなくなりそう)。

参考

Crashテスト方法

  1. 以下のコードを任意のActivityのonCreate()に仕込む
 Button crashButton = new Button(this);
        crashButton.setText("Crash!");
        crashButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                throw new RuntimeException("Test Crash"); // Force a crash
            }
        });

        addContentView(crashButton, new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
  1. ビルドしてアプリを起動して上記Activityの画面まで遷移し、Crashボタンをタップしてクラッシュさせる
  2. アプリをキルして再起動して、Firebaseにクラッシュレポートとしてあがってくるのをまつ(最長5分かかるらしい)

なお、なんでボタンが必要なの?という疑問があり、ボタン無しでソッコークラッシュするようにしたところ、クラッシュレポートをアプリから上げる前にクラッシュすることがあるみたいで、一生Firebaseに上がってこなかった・・・・

そもそも仕組みとしてクラッシュした次の起動後にレポートを上げる、というもののようで。

2. iOSメモ

難読化への対応

Crashテストして、FirebaseコンソールからCrashlyticsを確認すると、
「不足している X 個の dSYM ファイルをアップロードしてください。これにより Y 件のクラッシュが処理されます」
と表示されることがある。

先輩に教えていただいた感じ、以下の理解。

  • Crashlyticsが導入されているipaが難読化されている場合はdSYM ファイル(Androidでいうところのmapping.txt)のアップロードが必要。
  • dSYMファイルはビルド時に生成される。・・・が、そもそもビルド時の設定で、「Debug Information Format」フィールドが「DWARF with dSYM File」になっていないと生成されない(これはTARGET, Debug/Release毎にフィールドが存在するので全て確認しないとダメ)。
  • ビルドがRun/ArchveでDebug/Releaseどちらが採用されるか決まる。
  • ビルド後に生成されるdSYMファイルは手動でアップロードしてやらないとダメ。
  • dSYMファイルが生成先のファイルパスは、ipaビルドが終わったあとに表示されるウィンドウ(Window > Organizerからも到達可)でビルドしたipaのレコードを右クリックしてShow in Finderでわかる(★)。
  • 手動アップロードのコマンドは、以下の通り(プロジェクトルート直下にいる場合)
Pods/FirebaseCrashlytics/upload-symbols -gsp <GoogleService-Info.plistへのパス> -p ios <★のファイルパスでdSYMsまで>

Crashテスト方法

  1. 以下のコードをトップの画面のソースに付け加える。
    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("Crash", for: [])
        button.addTarget(self, action: #selector(self.crashButtonTapped(_:)), for: .touchUpInside)
        view.addSubview(button)
    }

    @IBAction func crashButtonTapped(_ sender: AnyObject) {
        fatalError()
    }
  1. ビルドしてアプリを起動してCrashボタンをタップしてクラッシュさせる
  2. アプリをキルして再起動して、Firebaseにクラッシュレポートとしてあがってくるのをまつ(最長5分かかるらしい)

※Xcodeと端末を接続してデバッグ状態だとうまく動かないので注意。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3