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 自動發現。

當從 Bitcode 重建時,使框架靜態化

從 Bitcode 重建 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
        }
    }
}