符號化 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
}
}
}