メインコンテンツまでスキップ

iOSクラッシュレポートのシンボル化

iOSアプリケーションのクラッシュをデバッグするには、クラッシュレポートの分析が必要になる場合があります。 クラッシュレポートの詳細については、Apple documentationを参照してください。

通常、クラッシュレポートを適切に判読できるようにするには、シンボル化が必要です。 シンボル化とは、マシンコードのアドレスを人間が読めるソースの場所に変換することです。 以下のドキュメントでは、Kotlinを使用したiOSアプリケーションのクラッシュレポートをシンボル化する際の具体的な詳細について説明します。

リリースKotlinバイナリ用の.dSYMの生成

Kotlinコードのアドレスをシンボル化するには(たとえば、Kotlinコードに対応するスタックトレース要素の場合)、Kotlinコード用の.dSYMバンドルが必要です。

デフォルトでは、Kotlin/Nativeコンパイラーは、Darwinプラットフォーム上のリリース(つまり、最適化された)バイナリ用に.dSYMを生成します。これは、-Xadd-light-debug=disableコンパイラーフラグで無効にできます。同時に、このオプションは他のプラットフォームではデフォルトで無効になっています。有効にするには、-Xadd-light-debug=enableコンパイラーオプションを使用します。

kotlin {
targets.withType<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
binaries.all {
freeCompilerArgs += "-Xadd-light-debug=\{enable|disable\}"
}
}
}

IntelliJ IDEAまたはAppCodeテンプレートから作成されたプロジェクトでは、これらの.dSYMバンドルはXcodeによって自動的に検出されます。

bitcodeからの再構築を使用する場合は、フレームワークを静的にする

bitcodeからKotlinで生成されたフレームワークを再構築すると、元の.dSYMが無効になります。 ローカルで実行する場合は、クラッシュレポートをシンボル化するときに、更新された.dSYMが使用されていることを確認してください。

再構築がApp Store側で実行される場合、再構築された動的フレームワークの.dSYMは破棄され、App Store Connectからダウンロードできないようです。 この場合、フレームワークを静的にする必要がある場合があります。

kotlin {
targets.withType<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
binaries.withType<org.jetbrains.kotlin.gradle.plugin.mpp.Framework> {
isStatic = true
}
}
}