web-dev-qa-db-ja.com

Crashlyticsはクラッシュを表示しません

this 公式指示を使用してCrashlitycsをインストールしました。

デバッグとリリースの両方でデバッグ情報フォ​​ーマットを「dSYMファイルを使用したDWARF」に設定し、ビットコードを無効に設定しました(一部の人はそれが役立つと書いています):

enter image description here

AppDelegate:

Fabric.sharedSDK().debug = true
Fabric.with([Crashlytics.self])

クラッシュをシミュレートするには

Crashlytics.sharedInstance().crash()

そして

var ggg: Int!
print(ggg)

Crashliticsはセッションに関する情報を収集します。たとえば、バンドルバージョン情報を更新します。

enter image description here

したがって、Crashliticsとの接続は機能します。ただし、クラッシュ情報は空です。

enter image description here

XCode 8とiOS 9/10を使用しています。私が間違っているのは何ですか?

編集:

XCodeデバッガー接続なしのシミュレーターおよびデバイスでテストしました(つまり、サミュレーター/デバイス画面から起動します)

最後に、クラッシュから7〜8時間後にCrashlyticsのレポートを受け取りました。 ドキュメント

数分以内に、Fabric Dashboardにクラッシュが表示されます。

しかし、私は待っていたすべてのクラッシュを受けませんでした。私の実験中に、Crashlyticsを初期化するさまざまな方法を試しました。

Fabric.with([Crashlytics.self])
and
Fabric.with([Crashlytics.self()])

それが理由でしょうか?同様の未回答の question も見つかりました。

21
Avt

次の条件を確認し、

  1. Crashlytics SDK行が他のすべてのサードパーティSDK行の後にあることを確認してください。 (appDidFinishLaunchingメソッドで最後に呼び出される必要があります。)

  2. 強制的にクラッシュしてから、アプリを再起動します。 Xcodeは、クラッシュレポートを傍受しないように切断する必要があります。 Xcodeを切断するには、指示 here に従ってください。

  3. [Crashlytics sharedInstance] crash]を使用している場合;クラッシュをテストするには、appDidFinishLaunchingメソッドにないことを確認してください。

これらはサポートセクションですでに言及されています、ここに追加のものがあります-

  1. 組織のチェックイン->あなたのアプリ-> dSYMの欠落、dSYMの欠落ファイルの表示

enter image description here

はいの場合、次の手順を実行します

  1. アーカイブを右クリック-> Finderで表示->ファイルを右クリックして、パッケージの内容を表示をクリックします
  2. DSYMファイルを右クリック->パッケージの内容を表示->コンテンツ->リソース-> DWARF(ターミナルで開く)
  3. コマンドdwarfdump --uuid "dwarfフォルダーにあるファイル名"を実行します

enter image description here

これにより、関連付けられているすべてのUUIDが表示されます。また、リストされたUUIDが欠落しているdSYM idに記載されているUUIDと一致する場合は、dSYMフォルダーを圧縮してcrashlyticsの欠落しているdSYMセグメントにアップロードします。

オーガナイザーから抽出したdSYMファイルに正しいUUIDが含まれていないことがあるため、この手順は重要です。そして、間違ったものをアップロードした後、その更新を待ちます。したがって、正しいdSYMファイルをアップロードしていることを確認することをお勧めします。

前述のもの以外に、ビルド設定のビットコードプロパティとデバッグ情報形式もクラッシュレポートに影響します。

28
Rahul Verma

Xcodeからではなく、アプリを実行する必要があります。

デバイスを使用している場合は、USBに接続せずにアプリを起動するだけです。シミュレーターを使用している場合は、Xcodeからアプリの実行を停止します。次に、代わりにマウスクリックで再度開きます。

次に、Crashlytics.sharedInstance().crash()を呼び出すbuttonPressまたはfunctionに移動します。

次に、reopenクラッシュ後にアプリを再度(必要に応じてコンソールに接続できます)crashlyticsはクラッシュレポートを直前に保存するため、この手順は重要ですアプリは終了します。次回アプリを開くと、crashlyticsにレポートが投稿されます。

Docs here は実際にトラブルシューティングの問題も説明しています。

11
Zac Kwan

デバッグとリリースの両方で、デバッグ情報の形式が「dSYMファイルを使用したDWARF」であることをビルド設定で再確認します。

4
Parth

アップロードしないクラッシュの別の潜在的な原因は、完了ハンドラーを呼び出さずにCrashlyticsデリゲートを実装することです。

// MARK: CrashlyitcsDelegate
func crashlyticsDidDetectReport(forLastExecution report: CLSReport, completionHandler: @escaping (Bool) -> Void) {
    // Last launch we crashed!
    }
}

代わりに、次のようになります。

// MARK: CrashlyitcsDelegate
func crashlyticsDidDetectReport(forLastExecution report: CLSReport, completionHandler: @escaping (Bool) -> Void) {
    // Last launch we crashed!
         completionHandler(true)
    }
}
2
chadnewbry

2019年も引き続き関連。

Zac Kwan が言ったように、アプリのインスタンスをXcodeに接続せずにこれを行う必要があります。

these docsをフォリオしている場合は、必要な情報を追加し、テストするためにクラッシュボタンを押して、すべてXcodeを介して再起動することを理解させます。

以下をせよ:

  1. 必要なCrashlytics情報をプロジェクトに追加します。 Xcodeで1回実行します。次に、手動でシミュレーターに移動してアプリを開き、クラッシュを強制します。
  2. 「致命的なエラー」に関するメールを受け取る必要があります。
  3. 約5〜10分後に、Firebaseコンソールに表示されます。
1
Michael