Skip to content

iOSクラッシュレポートのシンボリケーション

iOSアプリケーションのクラッシュのデバッグには、クラッシュレポートの分析を伴う場合があります。 クラッシュレポートに関する詳細情報は、Appleのドキュメントで確認できます。

クラッシュレポートが適切に読み取り可能になるには、通常シンボリケーションが必要です。シンボリケーションは、マシンコードのアドレスを人間が読み取り可能なソースロケーションに変換します。 以下のドキュメントでは、Kotlinを使用するiOSアプリケーションからのクラッシュレポートをシンボリケーションする際の具体的な詳細について説明します。

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

Kotlinコード内のアドレスをシンボリケーションするには(例: Kotlinコードに対応するスタックトレース要素の場合)、Kotlinコード用の.dSYMバンドルが必要です。

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

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

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

ビットコードからのリビルドを使用する際のフレームワークの静的化

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

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

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