From 2b9c0bd63675575b907537fabee157857e069a93 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 3 Mar 2023 17:10:47 +0100 Subject: [PATCH 01/13] override sdk versions --- build.gradle.kts | 1 + buildSrc/src/main/java/Config.kt | 14 +++++++++- sentry-kotlin-multiplatform/build.gradle.kts | 16 +++++++++--- .../SentryAndroidOptionsExtensions.kt | 6 +++++ .../extensions/SentryOptionsExtensions.kt | 11 ++++++++ .../multiplatform/protocol/SdkVersion.kt | 21 +++++++++++++++ .../extensions/SentryOptionsExtensions.kt | 14 ++++++++++ .../multiplatform/protocol/SdkVersion.kt | 18 +++++++++++++ .../multiplatform/protocol/SdkVersion.kt | 26 +++++++++++++++++++ .../kmp-app/shared/build.gradle.kts | 2 +- 10 files changed, 123 insertions(+), 6 deletions(-) create mode 100644 sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt create mode 100644 sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt create mode 100644 sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt diff --git a/build.gradle.kts b/build.gradle.kts index dc60e227..98798bdc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,6 +9,7 @@ plugins { kotlin(Config.cocoapods).version(Config.kotlinVersion).apply(false) id(Config.jetpackCompose).version(Config.composeVersion).apply(false) id(Config.androidGradle).version(Config.agpVersion).apply(false) + id(Config.BuildPlugins.buildConfig).version(Config.BuildPlugins.buildConfigVersion).apply(false) } allprojects { diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index 9a958203..13b2685a 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -10,6 +10,11 @@ object Config { val gradleMavenPublishPlugin = "com.vanniktech.maven.publish" val androidGradle = "com.android.library" + object BuildPlugins { + val buildConfig = "com.github.gmazzo.buildconfig" + val buildConfigVersion = "3.1.0" + } + object QualityPlugins { val spotless = "com.diffplug.spotless" val spotlessVersion = "6.11.0" @@ -22,7 +27,7 @@ object Config { val sentryAndroid = "io.sentry:sentry-android:$sentryJavaVersion" val sentryJava = "io.sentry:sentry:$sentryJavaVersion" - val sentryCocoaVersion = "~> 8.2.0" + val sentryCocoaVersion = "8.2.0" val sentryCocoa = "Sentry" } @@ -46,4 +51,11 @@ object Config { val tvosDeploymentTarget = "11.0" val watchosDeploymentTarget = "4.0" } + + object Sentry { + val SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME = "sentry.kotlin.kotlin-multiplatform" + val group = "io.sentry" + val description = "SDK for sentry.io" + val versionNameProp = "versionName" + } } diff --git a/sentry-kotlin-multiplatform/build.gradle.kts b/sentry-kotlin-multiplatform/build.gradle.kts index 9c9fa604..0d67c679 100644 --- a/sentry-kotlin-multiplatform/build.gradle.kts +++ b/sentry-kotlin-multiplatform/build.gradle.kts @@ -1,9 +1,10 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget plugins { - kotlin("multiplatform") - kotlin("native.cocoapods") - id("com.android.library") + kotlin(Config.multiplatform) + kotlin(Config.cocoapods) + id(Config.androidGradle) + id(Config.BuildPlugins.buildConfig) `maven-publish` } @@ -80,7 +81,7 @@ kotlin { summary = "Official Sentry SDK Kotlin Multiplatform" homepage = "https://github.com/getsentry/sentry-kotlin-multiplatform" - pod(Config.Libs.sentryCocoa, Config.Libs.sentryCocoaVersion) + pod(Config.Libs.sentryCocoa, "~> ${Config.Libs.sentryCocoaVersion}") ios.deploymentTarget = Config.Cocoa.iosDeploymentTarget osx.deploymentTarget = Config.Cocoa.osxDeploymentTarget @@ -179,3 +180,10 @@ kotlin { ) } } + +buildConfig { + buildConfigField("String", "SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME", "\"${Config.Sentry.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME}\"") + buildConfigField("String", "VERSION_NAME", "\"${project.version}\"") + buildConfigField("String", "SENTRY_ANDROID_VERSION", "\"${Config.Libs.sentryJavaVersion}\"") + buildConfigField("String", "SENTRY_COCOA_VERSION", "\"${Config.Libs.sentryCocoaVersion}\"") +} diff --git a/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt index 263c11c2..75b086ec 100644 --- a/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt @@ -2,6 +2,7 @@ package io.sentry.kotlin.multiplatform.extensions import io.sentry.android.core.SentryAndroidOptions import io.sentry.kotlin.multiplatform.SentryOptions +import io.sentry.sentry_kotlin_multiplatform.BuildConfig internal fun SentryOptions.toAndroidSentryOptionsCallback(): (SentryAndroidOptions) -> Unit = { // Apply base options available to all JVM targets @@ -9,4 +10,9 @@ internal fun SentryOptions.toAndroidSentryOptionsCallback(): (SentryAndroidOptio // Apply Android specific options it.isAttachScreenshot = this.attachScreenshot + + it.setBeforeSend { event, _ -> + event.sdk?.addPackage(" maven:io.sentry:sentry-android", BuildConfig.SENTRY_ANDROID_VERSION) + event + } } diff --git a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt index 7ea34b8f..c9fb000e 100644 --- a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt @@ -4,6 +4,9 @@ import cocoapods.Sentry.SentryEvent import io.sentry.kotlin.multiplatform.CocoaSentryOptions import io.sentry.kotlin.multiplatform.SentryOptions import io.sentry.kotlin.multiplatform.nsexception.dropKotlinCrashEvent +import io.sentry.kotlin.multiplatform.protocol.SdkVersion +import io.sentry.kotlin.multiplatform.protocol.addPackage +import io.sentry.sentry_kotlin_multiplatform.BuildConfig import kotlinx.cinterop.convert import NSException.Sentry.SentryEvent as NSExceptionSentryEvent @@ -28,5 +31,13 @@ internal fun CocoaSentryOptions.applyCocoaBaseOptions(options: SentryOptions) { this.enableAutoSessionTracking = options.enableAutoSessionTracking this.beforeSend = { event -> dropKotlinCrashEvent(event as NSExceptionSentryEvent?) as SentryEvent? + val sdk = SdkVersion( + BuildConfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, + BuildConfig.VERSION_NAME + ).apply { + addPackage("cocoapods:sentry-cocoa", "8.2.0") + }.toCocoaSdkVersion() + event?.setSdk(sdk) + event } } diff --git a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt new file mode 100644 index 00000000..752fb452 --- /dev/null +++ b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt @@ -0,0 +1,21 @@ +package io.sentry.kotlin.multiplatform.protocol + +actual class SdkVersion actual constructor( + actual val name: String, + actual val version: String +) { + actual val packages: MutableList = mutableListOf() + + fun toCocoaSdkVersion(): Map { + return mapOf( + "name" to name, + "version" to version, + "packages" to packages.map { pkg -> + mapOf( + "name" to pkg.name, + "version" to pkg.version + ) + } + ) + } +} diff --git a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt index 210fbf47..8c89060f 100644 --- a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt @@ -2,6 +2,9 @@ package io.sentry.kotlin.multiplatform.extensions import io.sentry.kotlin.multiplatform.JvmSentryOptions import io.sentry.kotlin.multiplatform.SentryOptions +import io.sentry.kotlin.multiplatform.protocol.SdkVersion +import io.sentry.kotlin.multiplatform.protocol.addPackage +import io.sentry.sentry_kotlin_multiplatform.BuildConfig internal fun SentryOptions.toJvmSentryOptionsCallback(): (JvmSentryOptions) -> Unit = { it.applyJvmBaseOptions(this) @@ -21,4 +24,15 @@ internal fun JvmSentryOptions.applyJvmBaseOptions(options: SentryOptions) { this.isDebug = options.debug this.sessionTrackingIntervalMillis = options.sessionTrackingIntervalMillis this.isEnableAutoSessionTracking = options.enableAutoSessionTracking + + this.setBeforeSend { event, _ -> + val sdk = SdkVersion( + BuildConfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, + BuildConfig.VERSION_NAME + ).apply { + addPackage(" maven:io.sentry:sentry", BuildConfig.VERSION_NAME) + }.toJvmSdkVersion() + event.sdk = sdk + event + } } diff --git a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt new file mode 100644 index 00000000..06eee079 --- /dev/null +++ b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt @@ -0,0 +1,18 @@ +package io.sentry.kotlin.multiplatform.protocol + +import io.sentry.protocol.SdkVersion as JvmSdkVersion + +actual class SdkVersion actual constructor( + actual val name: String, + actual val version: String +) { + actual val packages: MutableList = mutableListOf() + + fun toJvmSdkVersion(): JvmSdkVersion { + val sdk = JvmSdkVersion(name, version) + packages.forEach { pkg -> + sdk.addPackage(pkg.name, pkg.version) + } + return sdk + } +} diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt new file mode 100644 index 00000000..f0dc9ac2 --- /dev/null +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt @@ -0,0 +1,26 @@ +package io.sentry.kotlin.multiplatform.protocol + +import io.sentry.sentry_kotlin_multiplatform.BuildConfig + +expect class SdkVersion( + name: String = BuildConfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, + version: String = BuildConfig.VERSION_NAME +) { + val name: String + val version: String + val packages: MutableList +} + +fun SdkVersion.setPackages(packages: List) { + this.packages.clear() + this.packages.addAll(packages) +} + +fun SdkVersion.addPackage(name: String, version: String) { + this.packages.add(Package(name, version)) +} + +data class Package( + val name: String, + val version: String +) diff --git a/sentry-samples/kmp-app/shared/build.gradle.kts b/sentry-samples/kmp-app/shared/build.gradle.kts index 8aa4912f..32f9922a 100644 --- a/sentry-samples/kmp-app/shared/build.gradle.kts +++ b/sentry-samples/kmp-app/shared/build.gradle.kts @@ -19,7 +19,7 @@ kotlin { ios.deploymentTarget = "14.1" podfile = project.file("../iosApp/Podfile") - pod(Config.Libs.sentryCocoa, Config.Libs.sentryCocoaVersion) + pod(Config.Libs.sentryCocoa, "~> ${Config.Libs.sentryCocoaVersion}") framework { baseName = "shared" From 837059561be85fcaec56e15a0fa0476bb954a9f4 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 3 Mar 2023 18:01:24 +0100 Subject: [PATCH 02/13] introduce kmm buildconfig --- buildSrc/src/main/java/Config.kt | 4 ++-- sentry-kotlin-multiplatform/build.gradle.kts | 18 +++++++++++++----- .../SentryAndroidOptionsExtensions.kt | 4 ++-- .../extensions/SentryOptionsExtensions.kt | 8 ++++---- .../extensions/SentryOptionsExtensions.kt | 8 ++++---- .../multiplatform/protocol/SdkVersion.kt | 11 +++-------- 6 files changed, 28 insertions(+), 25 deletions(-) diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index 13b2685a..9c869b29 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -11,8 +11,8 @@ object Config { val androidGradle = "com.android.library" object BuildPlugins { - val buildConfig = "com.github.gmazzo.buildconfig" - val buildConfigVersion = "3.1.0" + val buildConfig = "com.codingfeline.buildkonfig" + val buildConfigVersion = "0.13.3" } object QualityPlugins { diff --git a/sentry-kotlin-multiplatform/build.gradle.kts b/sentry-kotlin-multiplatform/build.gradle.kts index 0d67c679..bafb649c 100644 --- a/sentry-kotlin-multiplatform/build.gradle.kts +++ b/sentry-kotlin-multiplatform/build.gradle.kts @@ -1,3 +1,4 @@ +import com.codingfeline.buildkonfig.compiler.FieldSpec.Type.STRING import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget plugins { @@ -181,9 +182,16 @@ kotlin { } } -buildConfig { - buildConfigField("String", "SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME", "\"${Config.Sentry.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME}\"") - buildConfigField("String", "VERSION_NAME", "\"${project.version}\"") - buildConfigField("String", "SENTRY_ANDROID_VERSION", "\"${Config.Libs.sentryJavaVersion}\"") - buildConfigField("String", "SENTRY_COCOA_VERSION", "\"${Config.Libs.sentryCocoaVersion}\"") +buildkonfig { + packageName = "io.sentry.kotlin.multiplatform" + defaultConfigs { + buildConfigField( + STRING, + "SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME", + Config.Sentry.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME + ) + buildConfigField(STRING, "VERSION_NAME", project.version.toString()) + buildConfigField(STRING, "SENTRY_ANDROID_VERSION", Config.Libs.sentryJavaVersion) + buildConfigField(STRING, "SENTRY_COCOA_VERSION", Config.Libs.sentryCocoaVersion) + } } diff --git a/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt index 75b086ec..383e0948 100644 --- a/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt @@ -1,8 +1,8 @@ package io.sentry.kotlin.multiplatform.extensions import io.sentry.android.core.SentryAndroidOptions +import io.sentry.kotlin.multiplatform.BuildKonfig import io.sentry.kotlin.multiplatform.SentryOptions -import io.sentry.sentry_kotlin_multiplatform.BuildConfig internal fun SentryOptions.toAndroidSentryOptionsCallback(): (SentryAndroidOptions) -> Unit = { // Apply base options available to all JVM targets @@ -12,7 +12,7 @@ internal fun SentryOptions.toAndroidSentryOptionsCallback(): (SentryAndroidOptio it.isAttachScreenshot = this.attachScreenshot it.setBeforeSend { event, _ -> - event.sdk?.addPackage(" maven:io.sentry:sentry-android", BuildConfig.SENTRY_ANDROID_VERSION) + event.sdk?.addPackage(" maven:io.sentry:sentry-android", BuildKonfig.SENTRY_ANDROID_VERSION) event } } diff --git a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt index c9fb000e..eb61fb22 100644 --- a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt @@ -1,12 +1,12 @@ package io.sentry.kotlin.multiplatform.extensions import cocoapods.Sentry.SentryEvent +import io.sentry.kotlin.multiplatform.BuildKonfig import io.sentry.kotlin.multiplatform.CocoaSentryOptions import io.sentry.kotlin.multiplatform.SentryOptions import io.sentry.kotlin.multiplatform.nsexception.dropKotlinCrashEvent import io.sentry.kotlin.multiplatform.protocol.SdkVersion import io.sentry.kotlin.multiplatform.protocol.addPackage -import io.sentry.sentry_kotlin_multiplatform.BuildConfig import kotlinx.cinterop.convert import NSException.Sentry.SentryEvent as NSExceptionSentryEvent @@ -32,10 +32,10 @@ internal fun CocoaSentryOptions.applyCocoaBaseOptions(options: SentryOptions) { this.beforeSend = { event -> dropKotlinCrashEvent(event as NSExceptionSentryEvent?) as SentryEvent? val sdk = SdkVersion( - BuildConfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, - BuildConfig.VERSION_NAME + BuildKonfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, + BuildKonfig.VERSION_NAME ).apply { - addPackage("cocoapods:sentry-cocoa", "8.2.0") + addPackage("cocoapods:sentry-cocoa", BuildKonfig.SENTRY_COCOA_VERSION) }.toCocoaSdkVersion() event?.setSdk(sdk) event diff --git a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt index 8c89060f..2b1d4b3e 100644 --- a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt @@ -1,10 +1,10 @@ package io.sentry.kotlin.multiplatform.extensions +import io.sentry.kotlin.multiplatform.BuildKonfig import io.sentry.kotlin.multiplatform.JvmSentryOptions import io.sentry.kotlin.multiplatform.SentryOptions import io.sentry.kotlin.multiplatform.protocol.SdkVersion import io.sentry.kotlin.multiplatform.protocol.addPackage -import io.sentry.sentry_kotlin_multiplatform.BuildConfig internal fun SentryOptions.toJvmSentryOptionsCallback(): (JvmSentryOptions) -> Unit = { it.applyJvmBaseOptions(this) @@ -27,10 +27,10 @@ internal fun JvmSentryOptions.applyJvmBaseOptions(options: SentryOptions) { this.setBeforeSend { event, _ -> val sdk = SdkVersion( - BuildConfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, - BuildConfig.VERSION_NAME + BuildKonfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, + BuildKonfig.VERSION_NAME ).apply { - addPackage(" maven:io.sentry:sentry", BuildConfig.VERSION_NAME) + addPackage(" maven:io.sentry:sentry", BuildKonfig.VERSION_NAME) }.toJvmSdkVersion() event.sdk = sdk event diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt index f0dc9ac2..f985ef24 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt @@ -1,21 +1,16 @@ package io.sentry.kotlin.multiplatform.protocol -import io.sentry.sentry_kotlin_multiplatform.BuildConfig +import io.sentry.kotlin.multiplatform.BuildKonfig expect class SdkVersion( - name: String = BuildConfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, - version: String = BuildConfig.VERSION_NAME + name: String = BuildKonfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, + version: String = BuildKonfig.VERSION_NAME ) { val name: String val version: String val packages: MutableList } -fun SdkVersion.setPackages(packages: List) { - this.packages.clear() - this.packages.addAll(packages) -} - fun SdkVersion.addPackage(name: String, version: String) { this.packages.add(Package(name, version)) } From cff5fd2ce708e55e52030ec5a3fec12ffbbfa87b Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Sun, 5 Mar 2023 11:25:29 +0100 Subject: [PATCH 03/13] add common sdk version class --- gradle.properties | 1 - sentry-kotlin-multiplatform/build.gradle.kts | 5 +++++ .../SentryAndroidOptionsExtensions.kt | 12 +++++++++-- .../extensions/SentryOptionsExtensions.kt | 20 ++++++++++++------- .../multiplatform/protocol/SdkVersion.kt | 2 +- .../extensions/SentryOptionsExtensions.kt | 13 ++++++------ .../multiplatform/protocol/SdkVersion.kt | 2 +- .../kotlin/multiplatform/SentryOptions.kt | 4 ++++ .../multiplatform/protocol/SdkVersion.kt | 3 +++ 9 files changed, 44 insertions(+), 18 deletions(-) diff --git a/gradle.properties b/gradle.properties index 57b0149a..488ddb50 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,4 @@ # Kotlin -kotlin.version=1.8.0 kotlin.incremental.multiplatform=true kotlin.code.style=official kotlin.mpp.stability.nowarn=true diff --git a/sentry-kotlin-multiplatform/build.gradle.kts b/sentry-kotlin-multiplatform/build.gradle.kts index bafb649c..37ef1a61 100644 --- a/sentry-kotlin-multiplatform/build.gradle.kts +++ b/sentry-kotlin-multiplatform/build.gradle.kts @@ -191,6 +191,11 @@ buildkonfig { Config.Sentry.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME ) buildConfigField(STRING, "VERSION_NAME", project.version.toString()) + buildConfigField(STRING, "SENTRY_JVM_SDK_NAME", "maven:io.sentry:sentry") + buildConfigField(STRING, "SENTRY_ANDROID_SDK_NAME", "maven:io.sentry:sentry-android") + buildConfigField(STRING, "SENTRY_COCOA_SDK_NAME", "maven:io.sentry:sentry-cocoa") + + buildConfigField(STRING, "SENTRY_JVM_VERSION", Config.Libs.sentryJavaVersion) buildConfigField(STRING, "SENTRY_ANDROID_VERSION", Config.Libs.sentryJavaVersion) buildConfigField(STRING, "SENTRY_COCOA_VERSION", Config.Libs.sentryCocoaVersion) } diff --git a/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt index 383e0948..0b837d3a 100644 --- a/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt @@ -3,6 +3,8 @@ package io.sentry.kotlin.multiplatform.extensions import io.sentry.android.core.SentryAndroidOptions import io.sentry.kotlin.multiplatform.BuildKonfig import io.sentry.kotlin.multiplatform.SentryOptions +import io.sentry.kotlin.multiplatform.protocol.SdkVersion +import io.sentry.kotlin.multiplatform.protocol.addPackage internal fun SentryOptions.toAndroidSentryOptionsCallback(): (SentryAndroidOptions) -> Unit = { // Apply base options available to all JVM targets @@ -10,9 +12,15 @@ internal fun SentryOptions.toAndroidSentryOptionsCallback(): (SentryAndroidOptio // Apply Android specific options it.isAttachScreenshot = this.attachScreenshot - it.setBeforeSend { event, _ -> - event.sdk?.addPackage(" maven:io.sentry:sentry-android", BuildKonfig.SENTRY_ANDROID_VERSION) + val androidName = BuildKonfig.SENTRY_ANDROID_SDK_NAME + val androidVersion = BuildKonfig.SENTRY_ANDROID_VERSION + + val defaultSdk = SdkVersion().apply { + addPackage(androidName, androidVersion) + }.toJvmSdkVersion() + + event.sdk = this.sdk?.toJvmSdkVersion() ?: defaultSdk event } } diff --git a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt index 7e0f0041..b7bcab84 100644 --- a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt @@ -31,19 +31,25 @@ internal fun CocoaSentryOptions.applyCocoaBaseOptions(options: SentryOptions) { this.enableAutoSessionTracking = options.enableAutoSessionTracking this.beforeSend = { event -> dropKotlinCrashEvent(event as NSExceptionSentryEvent?) as SentryEvent? - val sdk = SdkVersion( + + val cocoaName = BuildKonfig.SENTRY_COCOA_SDK_NAME + val cocoaVersion = BuildKonfig.SENTRY_COCOA_VERSION + + // The SdkVersion expect class contains default constructor arguments but for native modules those do not work + // The workaround is to explicitly set the values + // This should be fixed in Kotlin 1.8.20: https://youtrack.jetbrains.com/issue/KT-53201/Native-compileNativeMainKotlinMetadata-fails-on-default-parameters-in-expected-declarations + val defaultSdk = SdkVersion( BuildKonfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, BuildKonfig.VERSION_NAME ).apply { - addPackage("cocoapods:sentry-cocoa", BuildKonfig.SENTRY_COCOA_VERSION) + addPackage(cocoaName, cocoaVersion) }.toCocoaSdkVersion() - event?.setSdk(sdk) + + event?.sdk = options.sdk?.toCocoaSdkVersion() ?: defaultSdk event } this.beforeBreadcrumb = { cocoaBreadcrumb -> - cocoaBreadcrumb - ?.toKmpBreadcrumb() - .apply { this?.let { options.beforeBreadcrumb?.invoke(it) } } - ?.toCocoaBreadcrumb() + cocoaBreadcrumb?.toKmpBreadcrumb() + .apply { this?.let { options.beforeBreadcrumb?.invoke(it) } }?.toCocoaBreadcrumb() } } diff --git a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt index 752fb452..ab4372e8 100644 --- a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt +++ b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt @@ -1,6 +1,6 @@ package io.sentry.kotlin.multiplatform.protocol -actual class SdkVersion actual constructor( +actual data class SdkVersion actual constructor( actual val name: String, actual val version: String ) { diff --git a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt index dadf856e..427f9fe9 100644 --- a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt @@ -25,13 +25,14 @@ internal fun JvmSentryOptions.applyJvmBaseOptions(options: SentryOptions) { this.sessionTrackingIntervalMillis = options.sessionTrackingIntervalMillis this.isEnableAutoSessionTracking = options.enableAutoSessionTracking this.setBeforeSend { event, _ -> - val sdk = SdkVersion( - BuildKonfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, - BuildKonfig.VERSION_NAME - ).apply { - addPackage(" maven:io.sentry:sentry", BuildKonfig.VERSION_NAME) + val jvmName = BuildKonfig.SENTRY_JVM_SDK_NAME + val jvmVersion = BuildKonfig.SENTRY_JVM_VERSION + + val defaultSdk = SdkVersion().apply { + addPackage(jvmName, jvmVersion) }.toJvmSdkVersion() - event.sdk = sdk + + event.sdk = options.sdk?.toJvmSdkVersion() ?: defaultSdk event } this.setBeforeBreadcrumb { jvmBreadcrumb, _ -> diff --git a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt index 06eee079..ac75a01c 100644 --- a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt +++ b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt @@ -2,7 +2,7 @@ package io.sentry.kotlin.multiplatform.protocol import io.sentry.protocol.SdkVersion as JvmSdkVersion -actual class SdkVersion actual constructor( +actual data class SdkVersion actual constructor( actual val name: String, actual val version: String ) { diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt index 290204ac..6b6d8df8 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt @@ -1,6 +1,7 @@ package io.sentry.kotlin.multiplatform import io.sentry.kotlin.multiplatform.protocol.Breadcrumb +import io.sentry.kotlin.multiplatform.protocol.SdkVersion open class SentryOptions { @@ -56,4 +57,7 @@ open class SentryOptions { /** Hook that is triggered before a breadcrumb is sent to Sentry */ var beforeBreadcrumb: ((Breadcrumb) -> Breadcrumb)? = null + + /** Information about the Sentry SDK that generated this event. */ + var sdk: SdkVersion? = null } diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt index f985ef24..130782f2 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt @@ -2,6 +2,7 @@ package io.sentry.kotlin.multiplatform.protocol import io.sentry.kotlin.multiplatform.BuildKonfig +/** The SDK Interface describes the Sentry SDK and its configuration used to capture and transmit an event. */ expect class SdkVersion( name: String = BuildKonfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, version: String = BuildKonfig.VERSION_NAME @@ -11,6 +12,8 @@ expect class SdkVersion( val packages: MutableList } +// expect classes cannot have default implementations yet +// this extension function serves as a workaround fun SdkVersion.addPackage(name: String, version: String) { this.packages.add(Package(name, version)) } From ae3af5cb61574cff4396c9bfbfab7564c2a3ddc6 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Sun, 5 Mar 2023 22:28:04 +0100 Subject: [PATCH 04/13] improve sdkVersion --- gradle.properties | 4 +--- .../SentryAndroidOptionsExtensions.kt | 20 ++++++----------- .../extensions/SentryOptionsExtensions.kt | 22 +++++++------------ .../multiplatform/protocol/SdkVersion.kt | 11 +++++----- .../extensions/SentryOptionsExtensions.kt | 20 ++++++----------- .../multiplatform/protocol/SdkVersion.kt | 6 ++--- .../kotlin/multiplatform/SentryOptions.kt | 2 +- .../multiplatform/protocol/SdkVersion.kt | 9 ++------ 8 files changed, 34 insertions(+), 60 deletions(-) diff --git a/gradle.properties b/gradle.properties index 488ddb50..f023edce 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,5 @@ # Kotlin +kotlin.version=1.8.0 kotlin.incremental.multiplatform=true kotlin.code.style=official kotlin.mpp.stability.nowarn=true @@ -16,9 +17,6 @@ versionName=0.0.1 # Increase memory for in-process compiler execution. org.gradle.jvmargs=-Xmx3g -# Because of: Please try to disable compiler caches and rerun the build. To disable compiler caches, add the following line to the gradle.properties file in the project's root directory -kotlin.native.cacheKind=none - # https://kotlinlang.org/docs/migrating-multiplatform-project-to-14.html#migrate-to-the-hierarchical-project-structure kotlin.mpp.enableGranularSourceSetsMetadata=true kotlin.mpp.enableCompatibilityMetadataVariant=true diff --git a/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt index 0b837d3a..ad3ed64d 100644 --- a/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt @@ -1,10 +1,10 @@ package io.sentry.kotlin.multiplatform.extensions +import android.util.Log import io.sentry.android.core.SentryAndroidOptions import io.sentry.kotlin.multiplatform.BuildKonfig import io.sentry.kotlin.multiplatform.SentryOptions -import io.sentry.kotlin.multiplatform.protocol.SdkVersion -import io.sentry.kotlin.multiplatform.protocol.addPackage +import io.sentry.kotlin.multiplatform.protocol.Package internal fun SentryOptions.toAndroidSentryOptionsCallback(): (SentryAndroidOptions) -> Unit = { // Apply base options available to all JVM targets @@ -12,15 +12,9 @@ internal fun SentryOptions.toAndroidSentryOptionsCallback(): (SentryAndroidOptio // Apply Android specific options it.isAttachScreenshot = this.attachScreenshot - it.setBeforeSend { event, _ -> - val androidName = BuildKonfig.SENTRY_ANDROID_SDK_NAME - val androidVersion = BuildKonfig.SENTRY_ANDROID_VERSION - - val defaultSdk = SdkVersion().apply { - addPackage(androidName, androidVersion) - }.toJvmSdkVersion() - - event.sdk = this.sdk?.toJvmSdkVersion() ?: defaultSdk - event - } + it.sdkVersion = sdk.toJvmSdkVersion() + it.sdkVersion?.addPackage( + BuildKonfig.SENTRY_ANDROID_SDK_NAME, + BuildKonfig.SENTRY_ANDROID_VERSION + ) } diff --git a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt index b7bcab84..42c444ca 100644 --- a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt @@ -5,8 +5,7 @@ import io.sentry.kotlin.multiplatform.BuildKonfig import io.sentry.kotlin.multiplatform.CocoaSentryOptions import io.sentry.kotlin.multiplatform.SentryOptions import io.sentry.kotlin.multiplatform.nsexception.dropKotlinCrashEvent -import io.sentry.kotlin.multiplatform.protocol.SdkVersion -import io.sentry.kotlin.multiplatform.protocol.addPackage +import io.sentry.kotlin.multiplatform.protocol.Package import kotlinx.cinterop.convert import NSException.Sentry.SentryEvent as NSExceptionSentryEvent @@ -34,18 +33,13 @@ internal fun CocoaSentryOptions.applyCocoaBaseOptions(options: SentryOptions) { val cocoaName = BuildKonfig.SENTRY_COCOA_SDK_NAME val cocoaVersion = BuildKonfig.SENTRY_COCOA_VERSION - - // The SdkVersion expect class contains default constructor arguments but for native modules those do not work - // The workaround is to explicitly set the values - // This should be fixed in Kotlin 1.8.20: https://youtrack.jetbrains.com/issue/KT-53201/Native-compileNativeMainKotlinMetadata-fails-on-default-parameters-in-expected-declarations - val defaultSdk = SdkVersion( - BuildKonfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, - BuildKonfig.VERSION_NAME - ).apply { - addPackage(cocoaName, cocoaVersion) - }.toCocoaSdkVersion() - - event?.sdk = options.sdk?.toCocoaSdkVersion() ?: defaultSdk + options.sdk.apply { + val pkg = Package(cocoaName, cocoaVersion) + if (!this.packages.contains(pkg)) { + this.packages.add(Package(cocoaName, cocoaVersion)) + } + } + event?.sdk = options.sdk.toCocoaSdkVersion() event } this.beforeBreadcrumb = { cocoaBreadcrumb -> diff --git a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt index ab4372e8..ef4012b0 100644 --- a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt +++ b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt @@ -2,15 +2,14 @@ package io.sentry.kotlin.multiplatform.protocol actual data class SdkVersion actual constructor( actual val name: String, - actual val version: String + actual val version: String, + actual val packages: MutableList ) { - actual val packages: MutableList = mutableListOf() - fun toCocoaSdkVersion(): Map { return mapOf( - "name" to name, - "version" to version, - "packages" to packages.map { pkg -> + "name" to this.name, + "version" to this.version, + "packages" to this.packages.map { pkg -> mapOf( "name" to pkg.name, "version" to pkg.version diff --git a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt index 427f9fe9..c01dbac4 100644 --- a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt @@ -3,11 +3,16 @@ package io.sentry.kotlin.multiplatform.extensions import io.sentry.kotlin.multiplatform.BuildKonfig import io.sentry.kotlin.multiplatform.JvmSentryOptions import io.sentry.kotlin.multiplatform.SentryOptions -import io.sentry.kotlin.multiplatform.protocol.SdkVersion -import io.sentry.kotlin.multiplatform.protocol.addPackage internal fun SentryOptions.toJvmSentryOptionsCallback(): (JvmSentryOptions) -> Unit = { it.applyJvmBaseOptions(this) + + // Apply JVM specific options + it.sdkVersion = this.sdk.toJvmSdkVersion() + it.sdkVersion?.addPackage( + BuildKonfig.SENTRY_JVM_SDK_NAME, + BuildKonfig.SENTRY_JVM_VERSION + ) } /** @@ -24,17 +29,6 @@ internal fun JvmSentryOptions.applyJvmBaseOptions(options: SentryOptions) { this.isDebug = options.debug this.sessionTrackingIntervalMillis = options.sessionTrackingIntervalMillis this.isEnableAutoSessionTracking = options.enableAutoSessionTracking - this.setBeforeSend { event, _ -> - val jvmName = BuildKonfig.SENTRY_JVM_SDK_NAME - val jvmVersion = BuildKonfig.SENTRY_JVM_VERSION - - val defaultSdk = SdkVersion().apply { - addPackage(jvmName, jvmVersion) - }.toJvmSdkVersion() - - event.sdk = options.sdk?.toJvmSdkVersion() ?: defaultSdk - event - } this.setBeforeBreadcrumb { jvmBreadcrumb, _ -> jvmBreadcrumb .toKmpBreadcrumb() diff --git a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt index ac75a01c..3fdf7bbc 100644 --- a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt +++ b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt @@ -4,12 +4,12 @@ import io.sentry.protocol.SdkVersion as JvmSdkVersion actual data class SdkVersion actual constructor( actual val name: String, - actual val version: String + actual val version: String, + actual val packages: MutableList ) { - actual val packages: MutableList = mutableListOf() fun toJvmSdkVersion(): JvmSdkVersion { - val sdk = JvmSdkVersion(name, version) + val sdk = JvmSdkVersion(this.name, this.version) packages.forEach { pkg -> sdk.addPackage(pkg.name, pkg.version) } diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt index 6b6d8df8..9218f5af 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt @@ -59,5 +59,5 @@ open class SentryOptions { var beforeBreadcrumb: ((Breadcrumb) -> Breadcrumb)? = null /** Information about the Sentry SDK that generated this event. */ - var sdk: SdkVersion? = null + var sdk: SdkVersion = SdkVersion() } diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt index 130782f2..e0ffbc71 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt @@ -5,19 +5,14 @@ import io.sentry.kotlin.multiplatform.BuildKonfig /** The SDK Interface describes the Sentry SDK and its configuration used to capture and transmit an event. */ expect class SdkVersion( name: String = BuildKonfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, - version: String = BuildKonfig.VERSION_NAME + version: String = BuildKonfig.VERSION_NAME, + packages: MutableList = mutableListOf() ) { val name: String val version: String val packages: MutableList } -// expect classes cannot have default implementations yet -// this extension function serves as a workaround -fun SdkVersion.addPackage(name: String, version: String) { - this.packages.add(Package(name, version)) -} - data class Package( val name: String, val version: String From d7238b4cb4639d1061a2b4c0c1022b1ade82378a Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Sun, 5 Mar 2023 22:31:39 +0100 Subject: [PATCH 05/13] remove options that are default --- gradle.properties | 2 -- 1 file changed, 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index f023edce..e1ce4fdd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,9 +18,7 @@ versionName=0.0.1 org.gradle.jvmargs=-Xmx3g # https://kotlinlang.org/docs/migrating-multiplatform-project-to-14.html#migrate-to-the-hierarchical-project-structure -kotlin.mpp.enableGranularSourceSetsMetadata=true kotlin.mpp.enableCompatibilityMetadataVariant=true -kotlin.native.enableDependencyPropagation=false kotlin.mpp.enableCInteropCommonization=true kotlin.mpp.enableHierarchicalCommonization=true kotlin.mpp.androidSourceSetLayoutVersion=2 From 39793dc3af0cb3e3588796069d276d7488986ad5 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Sun, 5 Mar 2023 22:35:21 +0100 Subject: [PATCH 06/13] apply formatting --- .../multiplatform/extensions/SentryAndroidOptionsExtensions.kt | 2 -- .../io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt | 1 - 2 files changed, 3 deletions(-) diff --git a/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt index ad3ed64d..75236c73 100644 --- a/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt @@ -1,10 +1,8 @@ package io.sentry.kotlin.multiplatform.extensions -import android.util.Log import io.sentry.android.core.SentryAndroidOptions import io.sentry.kotlin.multiplatform.BuildKonfig import io.sentry.kotlin.multiplatform.SentryOptions -import io.sentry.kotlin.multiplatform.protocol.Package internal fun SentryOptions.toAndroidSentryOptionsCallback(): (SentryAndroidOptions) -> Unit = { // Apply base options available to all JVM targets diff --git a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt index 3fdf7bbc..691cd1b0 100644 --- a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt +++ b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt @@ -7,7 +7,6 @@ actual data class SdkVersion actual constructor( actual val version: String, actual val packages: MutableList ) { - fun toJvmSdkVersion(): JvmSdkVersion { val sdk = JvmSdkVersion(this.name, this.version) packages.forEach { pkg -> From 53ddc998c32d415f70ffa3129eb66496a02fb477 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Sun, 5 Mar 2023 22:46:15 +0100 Subject: [PATCH 07/13] add comments to SdkVersion --- .../io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt index e0ffbc71..6b786dca 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt @@ -8,8 +8,13 @@ expect class SdkVersion( version: String = BuildKonfig.VERSION_NAME, packages: MutableList = mutableListOf() ) { + /** The name of the SDK. */ val name: String + + /** The version of the SDK. */ val version: String + + /** A list of packages used by the SDK. */ val packages: MutableList } From df6bce7dfe31a168e682abeda3e927ed7ac12ca0 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Mon, 6 Mar 2023 10:07:51 +0100 Subject: [PATCH 08/13] use buildconfig --- build.gradle.kts | 2 +- buildSrc/src/main/java/Config.kt | 5 ++++- sentry-kotlin-multiplatform/build.gradle.kts | 8 ++++---- .../extensions/SentryAndroidOptionsExtensions.kt | 2 +- .../multiplatform/extensions/SentryOptionsExtensions.kt | 2 +- .../multiplatform/extensions/SentryOptionsExtensions.kt | 2 +- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 98798bdc..6a3ccb15 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,7 @@ plugins { } allprojects { - group = "io.sentry" + group = Config.Sentry.group version = properties["versionName"].toString() } diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index 9c869b29..1ea0a7b5 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -53,7 +53,10 @@ object Config { } object Sentry { - val SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME = "sentry.kotlin.kotlin-multiplatform" + val kotlinMultiplatformSdkName = "sentry.kotlin.kotlin-multiplatform" + val javaPackageName = "maven:io.sentry:sentry" + val androidPackageName = "maven:io.sentry:sentry-android" + val cocoaPackageName = "cocoapods:sentry-cocoa" val group = "io.sentry" val description = "SDK for sentry.io" val versionNameProp = "versionName" diff --git a/sentry-kotlin-multiplatform/build.gradle.kts b/sentry-kotlin-multiplatform/build.gradle.kts index 37ef1a61..9164ae06 100644 --- a/sentry-kotlin-multiplatform/build.gradle.kts +++ b/sentry-kotlin-multiplatform/build.gradle.kts @@ -188,12 +188,12 @@ buildkonfig { buildConfigField( STRING, "SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME", - Config.Sentry.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME + Config.Sentry.kotlinMultiplatformSdkName ) buildConfigField(STRING, "VERSION_NAME", project.version.toString()) - buildConfigField(STRING, "SENTRY_JVM_SDK_NAME", "maven:io.sentry:sentry") - buildConfigField(STRING, "SENTRY_ANDROID_SDK_NAME", "maven:io.sentry:sentry-android") - buildConfigField(STRING, "SENTRY_COCOA_SDK_NAME", "maven:io.sentry:sentry-cocoa") + buildConfigField(STRING, "SENTRY_JVM_PACKAGE_NAME", Config.Sentry.javaPackageName) + buildConfigField(STRING, "SENTRY_ANDROID_PACKAGE_NAME", Config.Sentry.androidPackageName) + buildConfigField(STRING, "SENTRY_COCOA_PACKAGE_NAME", Config.Sentry.cocoaPackageName) buildConfigField(STRING, "SENTRY_JVM_VERSION", Config.Libs.sentryJavaVersion) buildConfigField(STRING, "SENTRY_ANDROID_VERSION", Config.Libs.sentryJavaVersion) diff --git a/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt index 75236c73..9f59a828 100644 --- a/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt @@ -12,7 +12,7 @@ internal fun SentryOptions.toAndroidSentryOptionsCallback(): (SentryAndroidOptio it.isAttachScreenshot = this.attachScreenshot it.sdkVersion = sdk.toJvmSdkVersion() it.sdkVersion?.addPackage( - BuildKonfig.SENTRY_ANDROID_SDK_NAME, + BuildKonfig.SENTRY_ANDROID_PACKAGE_NAME, BuildKonfig.SENTRY_ANDROID_VERSION ) } diff --git a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt index 42c444ca..3f43a3ff 100644 --- a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt @@ -31,7 +31,7 @@ internal fun CocoaSentryOptions.applyCocoaBaseOptions(options: SentryOptions) { this.beforeSend = { event -> dropKotlinCrashEvent(event as NSExceptionSentryEvent?) as SentryEvent? - val cocoaName = BuildKonfig.SENTRY_COCOA_SDK_NAME + val cocoaName = BuildKonfig.SENTRY_COCOA_PACKAGE_NAME val cocoaVersion = BuildKonfig.SENTRY_COCOA_VERSION options.sdk.apply { val pkg = Package(cocoaName, cocoaVersion) diff --git a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt index c01dbac4..8453b4d0 100644 --- a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt @@ -10,7 +10,7 @@ internal fun SentryOptions.toJvmSentryOptionsCallback(): (JvmSentryOptions) -> U // Apply JVM specific options it.sdkVersion = this.sdk.toJvmSdkVersion() it.sdkVersion?.addPackage( - BuildKonfig.SENTRY_JVM_SDK_NAME, + BuildKonfig.SENTRY_JVM_PACKAGE_NAME, BuildKonfig.SENTRY_JVM_VERSION ) } From 15c390e6028bc44a85cbf498336d0d05c85a8ae2 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Mon, 6 Mar 2023 15:37:35 +0100 Subject: [PATCH 09/13] improve SdkVersion --- .../SentryAndroidOptionsExtensions.kt | 5 +---- .../extensions/SdkVersionExtensions.kt | 16 ++++++++++++++ .../extensions/SentryOptionsExtensions.kt | 6 +++--- .../multiplatform/protocol/SdkVersion.kt | 20 ------------------ .../extensions/SdkVersionExtensions.kt | 12 +++++++++++ .../extensions/SentryOptionsExtensions.kt | 7 +++---- .../multiplatform/protocol/SdkVersion.kt | 17 --------------- .../multiplatform/protocol/SdkVersion.kt | 21 +++++++++++-------- 8 files changed, 47 insertions(+), 57 deletions(-) create mode 100644 sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt delete mode 100644 sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt create mode 100644 sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt delete mode 100644 sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt diff --git a/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt index 9f59a828..6ab883f6 100644 --- a/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt @@ -10,9 +10,6 @@ internal fun SentryOptions.toAndroidSentryOptionsCallback(): (SentryAndroidOptio // Apply Android specific options it.isAttachScreenshot = this.attachScreenshot + sdk.addPackage(BuildKonfig.SENTRY_ANDROID_PACKAGE_NAME, BuildKonfig.SENTRY_ANDROID_VERSION) it.sdkVersion = sdk.toJvmSdkVersion() - it.sdkVersion?.addPackage( - BuildKonfig.SENTRY_ANDROID_PACKAGE_NAME, - BuildKonfig.SENTRY_ANDROID_VERSION - ) } diff --git a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt new file mode 100644 index 00000000..3b9aa36e --- /dev/null +++ b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt @@ -0,0 +1,16 @@ +package io.sentry.kotlin.multiplatform.extensions + +import io.sentry.kotlin.multiplatform.protocol.SdkVersion + +fun SdkVersion.toCocoaSdkVersion(): Map { + return mapOf( + "name" to this.name, + "version" to this.version, + "packages" to this.packages?.map { pkg -> + mapOf( + "name" to pkg.name, + "version" to pkg.version + ) + } + ) +} \ No newline at end of file diff --git a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt index 3f43a3ff..7b5e0016 100644 --- a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt @@ -34,9 +34,9 @@ internal fun CocoaSentryOptions.applyCocoaBaseOptions(options: SentryOptions) { val cocoaName = BuildKonfig.SENTRY_COCOA_PACKAGE_NAME val cocoaVersion = BuildKonfig.SENTRY_COCOA_VERSION options.sdk.apply { - val pkg = Package(cocoaName, cocoaVersion) - if (!this.packages.contains(pkg)) { - this.packages.add(Package(cocoaName, cocoaVersion)) + val names = this.packages?.map { it.name } + if (names?.contains(cocoaName) != true) { + this.addPackage(cocoaName, cocoaVersion) } } event?.sdk = options.sdk.toCocoaSdkVersion() diff --git a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt deleted file mode 100644 index ef4012b0..00000000 --- a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt +++ /dev/null @@ -1,20 +0,0 @@ -package io.sentry.kotlin.multiplatform.protocol - -actual data class SdkVersion actual constructor( - actual val name: String, - actual val version: String, - actual val packages: MutableList -) { - fun toCocoaSdkVersion(): Map { - return mapOf( - "name" to this.name, - "version" to this.version, - "packages" to this.packages.map { pkg -> - mapOf( - "name" to pkg.name, - "version" to pkg.version - ) - } - ) - } -} diff --git a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt new file mode 100644 index 00000000..e62def05 --- /dev/null +++ b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt @@ -0,0 +1,12 @@ +package io.sentry.kotlin.multiplatform.extensions + +import io.sentry.kotlin.multiplatform.protocol.SdkVersion +import io.sentry.protocol.SdkVersion as JvmSdkVersion + +fun SdkVersion.toJvmSdkVersion(): JvmSdkVersion { + val sdk = JvmSdkVersion(this.name, this.version) + packages?.forEach { pkg -> + sdk.addPackage(pkg.name, pkg.version) + } + return sdk +} \ No newline at end of file diff --git a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt index 8453b4d0..8b36e9f1 100644 --- a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt @@ -8,11 +8,10 @@ internal fun SentryOptions.toJvmSentryOptionsCallback(): (JvmSentryOptions) -> U it.applyJvmBaseOptions(this) // Apply JVM specific options + this.sdk.apply { + addPackage(BuildKonfig.SENTRY_JVM_PACKAGE_NAME, BuildKonfig.SENTRY_JVM_VERSION) + } it.sdkVersion = this.sdk.toJvmSdkVersion() - it.sdkVersion?.addPackage( - BuildKonfig.SENTRY_JVM_PACKAGE_NAME, - BuildKonfig.SENTRY_JVM_VERSION - ) } /** diff --git a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt deleted file mode 100644 index 691cd1b0..00000000 --- a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt +++ /dev/null @@ -1,17 +0,0 @@ -package io.sentry.kotlin.multiplatform.protocol - -import io.sentry.protocol.SdkVersion as JvmSdkVersion - -actual data class SdkVersion actual constructor( - actual val name: String, - actual val version: String, - actual val packages: MutableList -) { - fun toJvmSdkVersion(): JvmSdkVersion { - val sdk = JvmSdkVersion(this.name, this.version) - packages.forEach { pkg -> - sdk.addPackage(pkg.name, pkg.version) - } - return sdk - } -} diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt index 6b786dca..3dbfb2d7 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt @@ -3,19 +3,22 @@ package io.sentry.kotlin.multiplatform.protocol import io.sentry.kotlin.multiplatform.BuildKonfig /** The SDK Interface describes the Sentry SDK and its configuration used to capture and transmit an event. */ -expect class SdkVersion( - name: String = BuildKonfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, - version: String = BuildKonfig.VERSION_NAME, - packages: MutableList = mutableListOf() -) { +data class SdkVersion( /** The name of the SDK. */ - val name: String + val name: String = BuildKonfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, /** The version of the SDK. */ - val version: String + val version: String = BuildKonfig.VERSION_NAME, +) { + /** Packages used by the SDK. */ + var packages: List? = mutableListOf() + private set - /** A list of packages used by the SDK. */ - val packages: MutableList + fun addPackage(name: String, version: String) { + val mutableList = packages?.toMutableList() + mutableList?.add(Package(name, version)) + packages = mutableList + } } data class Package( From 3a0e3622b5fa4690e718929cc02a64f29c3ae4bf Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Mon, 6 Mar 2023 15:49:42 +0100 Subject: [PATCH 10/13] format code with spotless --- .../kotlin/multiplatform/extensions/SdkVersionExtensions.kt | 2 +- .../kotlin/multiplatform/extensions/SentryOptionsExtensions.kt | 1 - .../kotlin/multiplatform/extensions/SdkVersionExtensions.kt | 2 +- .../io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt index 3b9aa36e..67155511 100644 --- a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt @@ -13,4 +13,4 @@ fun SdkVersion.toCocoaSdkVersion(): Map { ) } ) -} \ No newline at end of file +} diff --git a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt index 7b5e0016..6193247c 100644 --- a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt @@ -5,7 +5,6 @@ import io.sentry.kotlin.multiplatform.BuildKonfig import io.sentry.kotlin.multiplatform.CocoaSentryOptions import io.sentry.kotlin.multiplatform.SentryOptions import io.sentry.kotlin.multiplatform.nsexception.dropKotlinCrashEvent -import io.sentry.kotlin.multiplatform.protocol.Package import kotlinx.cinterop.convert import NSException.Sentry.SentryEvent as NSExceptionSentryEvent diff --git a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt index e62def05..fa329f93 100644 --- a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt @@ -9,4 +9,4 @@ fun SdkVersion.toJvmSdkVersion(): JvmSdkVersion { sdk.addPackage(pkg.name, pkg.version) } return sdk -} \ No newline at end of file +} diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt index 3dbfb2d7..517db48b 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt @@ -8,7 +8,7 @@ data class SdkVersion( val name: String = BuildKonfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, /** The version of the SDK. */ - val version: String = BuildKonfig.VERSION_NAME, + val version: String = BuildKonfig.VERSION_NAME ) { /** Packages used by the SDK. */ var packages: List? = mutableListOf() From 3362091146b284c35f074e5dd478a58b4c5aa157 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Mon, 6 Mar 2023 18:44:00 +0100 Subject: [PATCH 11/13] include cinterop PrivateSentrySDKOnly header to set the sdk --- buildSrc/src/main/java/Config.kt | 2 +- sentry-kotlin-multiplatform/build.gradle.kts | 3 +++ .../extensions/SdkVersionExtensions.kt | 16 ------------ .../extensions/SentryOptionsExtensions.kt | 11 +++++++- .../cinterop/Sentry.PrivateSentrySDKOnly.def | 2 ++ .../PrivateSentrySDKOnly.h | 25 +++++++++++++++++++ 6 files changed, 41 insertions(+), 18 deletions(-) delete mode 100644 sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt create mode 100644 sentry-kotlin-multiplatform/src/nativeInterop/cinterop/Sentry.PrivateSentrySDKOnly.def create mode 100644 sentry-kotlin-multiplatform/src/nativeInterop/cinterop/SentryPrivateSentrySDKOnly/PrivateSentrySDKOnly.h diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index 1ea0a7b5..fdff7da3 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -53,7 +53,7 @@ object Config { } object Sentry { - val kotlinMultiplatformSdkName = "sentry.kotlin.kotlin-multiplatform" + val kotlinMultiplatformSdkName = "sentry.kotlin.kmp" val javaPackageName = "maven:io.sentry:sentry" val androidPackageName = "maven:io.sentry:sentry-android" val cocoaPackageName = "cocoapods:sentry-cocoa" diff --git a/sentry-kotlin-multiplatform/build.gradle.kts b/sentry-kotlin-multiplatform/build.gradle.kts index 9164ae06..093a562f 100644 --- a/sentry-kotlin-multiplatform/build.gradle.kts +++ b/sentry-kotlin-multiplatform/build.gradle.kts @@ -169,6 +169,9 @@ kotlin { cinterops.create("Sentry.Scope") { includeDirs("$projectDir/src/nativeInterop/cinterop/SentryScope") } + cinterops.create("Sentry.PrivateSentrySDKOnly") { + includeDirs("$projectDir/src/nativeInterop/cinterop/SentryPrivateSentrySDKOnly") + } } } diff --git a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt deleted file mode 100644 index 67155511..00000000 --- a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SdkVersionExtensions.kt +++ /dev/null @@ -1,16 +0,0 @@ -package io.sentry.kotlin.multiplatform.extensions - -import io.sentry.kotlin.multiplatform.protocol.SdkVersion - -fun SdkVersion.toCocoaSdkVersion(): Map { - return mapOf( - "name" to this.name, - "version" to this.version, - "packages" to this.packages?.map { pkg -> - mapOf( - "name" to pkg.name, - "version" to pkg.version - ) - } - ) -} diff --git a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt index 6193247c..713f1561 100644 --- a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt @@ -1,5 +1,6 @@ package io.sentry.kotlin.multiplatform.extensions +import PrivateSentrySDKOnly.Sentry.PrivateSentrySDKOnly import cocoapods.Sentry.SentryEvent import io.sentry.kotlin.multiplatform.BuildKonfig import io.sentry.kotlin.multiplatform.CocoaSentryOptions @@ -38,9 +39,17 @@ internal fun CocoaSentryOptions.applyCocoaBaseOptions(options: SentryOptions) { this.addPackage(cocoaName, cocoaVersion) } } - event?.sdk = options.sdk.toCocoaSdkVersion() + val sdkPackages = event?.sdk?.toMutableMap() + sdkPackages?.set( + "packages", + options.sdk.packages?.map { + mapOf("name" to it.name, "version" to it.version) + } + ) + event } + PrivateSentrySDKOnly.setSdkName(options.sdk.name, options.sdk.version) this.beforeBreadcrumb = { cocoaBreadcrumb -> cocoaBreadcrumb?.toKmpBreadcrumb() .apply { this?.let { options.beforeBreadcrumb?.invoke(it) } }?.toCocoaBreadcrumb() diff --git a/sentry-kotlin-multiplatform/src/nativeInterop/cinterop/Sentry.PrivateSentrySDKOnly.def b/sentry-kotlin-multiplatform/src/nativeInterop/cinterop/Sentry.PrivateSentrySDKOnly.def new file mode 100644 index 00000000..44786412 --- /dev/null +++ b/sentry-kotlin-multiplatform/src/nativeInterop/cinterop/Sentry.PrivateSentrySDKOnly.def @@ -0,0 +1,2 @@ +language = Objective-C +headers = PrivateSentrySDKOnly.h diff --git a/sentry-kotlin-multiplatform/src/nativeInterop/cinterop/SentryPrivateSentrySDKOnly/PrivateSentrySDKOnly.h b/sentry-kotlin-multiplatform/src/nativeInterop/cinterop/SentryPrivateSentrySDKOnly/PrivateSentrySDKOnly.h new file mode 100644 index 00000000..1ff6bfed --- /dev/null +++ b/sentry-kotlin-multiplatform/src/nativeInterop/cinterop/SentryPrivateSentrySDKOnly/PrivateSentrySDKOnly.h @@ -0,0 +1,25 @@ +#import + +@interface PrivateSentrySDKOnly : NSObject + +/** + * Override SDK information. + */ ++ (void)setSdkName:(NSString *)sdkName andVersionString:(NSString *)versionString; + +/** + * Override SDK information. + */ ++ (void)setSdkName:(NSString *)sdkName; + +/** + * Retrieves the SDK name + */ ++ (NSString *)getSdkName; + +/** + * Retrieves the SDK version string + */ ++ (NSString *)getSdkVersionString; + +@end From 0eba0fb6ded7387faa5621a9caf70bb1df926a39 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Mon, 6 Mar 2023 18:47:24 +0100 Subject: [PATCH 12/13] set event sdk on cocoa --- .../multiplatform/extensions/SentryOptionsExtensions.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt index 713f1561..1f0f8347 100644 --- a/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt +++ b/sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt @@ -39,13 +39,14 @@ internal fun CocoaSentryOptions.applyCocoaBaseOptions(options: SentryOptions) { this.addPackage(cocoaName, cocoaVersion) } } - val sdkPackages = event?.sdk?.toMutableMap() - sdkPackages?.set( + val sdk = event?.sdk?.toMutableMap() + sdk?.set( "packages", options.sdk.packages?.map { mapOf("name" to it.name, "version" to it.version) } ) + event?.sdk = sdk event } From 5fcca144d12c076417fb0af4052e0bc43d60440e Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Tue, 7 Mar 2023 11:15:34 +0100 Subject: [PATCH 13/13] make name and version required in SdkVersion --- .../kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt | 2 +- .../io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt index 9218f5af..c0b5bee5 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt @@ -59,5 +59,5 @@ open class SentryOptions { var beforeBreadcrumb: ((Breadcrumb) -> Breadcrumb)? = null /** Information about the Sentry SDK that generated this event. */ - var sdk: SdkVersion = SdkVersion() + var sdk: SdkVersion = SdkVersion(BuildKonfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, BuildKonfig.VERSION_NAME) } diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt index 517db48b..3a962678 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/protocol/SdkVersion.kt @@ -1,14 +1,12 @@ package io.sentry.kotlin.multiplatform.protocol -import io.sentry.kotlin.multiplatform.BuildKonfig - /** The SDK Interface describes the Sentry SDK and its configuration used to capture and transmit an event. */ data class SdkVersion( /** The name of the SDK. */ - val name: String = BuildKonfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, + val name: String, /** The version of the SDK. */ - val version: String = BuildKonfig.VERSION_NAME + val version: String ) { /** Packages used by the SDK. */ var packages: List? = mutableListOf()