Skip to content

Commit ddfbbee

Browse files
authored
feat: override sdk name and version (#50)
* override sdk versions * introduce kmm buildconfig * add common sdk version class * improve sdkVersion * remove options that are default * apply formatting * add comments to SdkVersion * use buildconfig * improve SdkVersion * format code with spotless * include cinterop PrivateSentrySDKOnly header to set the sdk * set event sdk on cocoa * make name and version required in SdkVersion
1 parent 4878ca4 commit ddfbbee

File tree

13 files changed

+149
-16
lines changed

13 files changed

+149
-16
lines changed

build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ plugins {
99
kotlin(Config.cocoapods).version(Config.kotlinVersion).apply(false)
1010
id(Config.jetpackCompose).version(Config.composeVersion).apply(false)
1111
id(Config.androidGradle).version(Config.agpVersion).apply(false)
12+
id(Config.BuildPlugins.buildConfig).version(Config.BuildPlugins.buildConfigVersion).apply(false)
1213
}
1314

1415
allprojects {
15-
group = "io.sentry"
16+
group = Config.Sentry.group
1617
version = properties["versionName"].toString()
1718
}
1819

buildSrc/src/main/java/Config.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ object Config {
1010
val gradleMavenPublishPlugin = "com.vanniktech.maven.publish"
1111
val androidGradle = "com.android.library"
1212

13+
object BuildPlugins {
14+
val buildConfig = "com.codingfeline.buildkonfig"
15+
val buildConfigVersion = "0.13.3"
16+
}
17+
1318
object QualityPlugins {
1419
val spotless = "com.diffplug.spotless"
1520
val spotlessVersion = "6.11.0"
@@ -22,7 +27,7 @@ object Config {
2227
val sentryAndroid = "io.sentry:sentry-android:$sentryJavaVersion"
2328
val sentryJava = "io.sentry:sentry:$sentryJavaVersion"
2429

25-
val sentryCocoaVersion = "~> 8.2.0"
30+
val sentryCocoaVersion = "8.2.0"
2631
val sentryCocoa = "Sentry"
2732
}
2833

@@ -46,4 +51,14 @@ object Config {
4651
val tvosDeploymentTarget = "11.0"
4752
val watchosDeploymentTarget = "4.0"
4853
}
54+
55+
object Sentry {
56+
val kotlinMultiplatformSdkName = "sentry.kotlin.kmp"
57+
val javaPackageName = "maven:io.sentry:sentry"
58+
val androidPackageName = "maven:io.sentry:sentry-android"
59+
val cocoaPackageName = "cocoapods:sentry-cocoa"
60+
val group = "io.sentry"
61+
val description = "SDK for sentry.io"
62+
val versionNameProp = "versionName"
63+
}
4964
}

gradle.properties

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,8 @@ versionName=0.0.1
1717
# Increase memory for in-process compiler execution.
1818
org.gradle.jvmargs=-Xmx3g
1919

20-
# 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
21-
kotlin.native.cacheKind=none
22-
2320
# https://kotlinlang.org/docs/migrating-multiplatform-project-to-14.html#migrate-to-the-hierarchical-project-structure
24-
kotlin.mpp.enableGranularSourceSetsMetadata=true
2521
kotlin.mpp.enableCompatibilityMetadataVariant=true
26-
kotlin.native.enableDependencyPropagation=false
2722
kotlin.mpp.enableCInteropCommonization=true
2823
kotlin.mpp.enableHierarchicalCommonization=true
2924
kotlin.mpp.androidSourceSetLayoutVersion=2

sentry-kotlin-multiplatform/build.gradle.kts

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
import com.codingfeline.buildkonfig.compiler.FieldSpec.Type.STRING
12
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
23

34
plugins {
4-
kotlin("multiplatform")
5-
kotlin("native.cocoapods")
6-
id("com.android.library")
5+
kotlin(Config.multiplatform)
6+
kotlin(Config.cocoapods)
7+
id(Config.androidGradle)
8+
id(Config.BuildPlugins.buildConfig)
79
`maven-publish`
810
}
911

@@ -80,7 +82,7 @@ kotlin {
8082
summary = "Official Sentry SDK Kotlin Multiplatform"
8183
homepage = "https://github.com/getsentry/sentry-kotlin-multiplatform"
8284

83-
pod(Config.Libs.sentryCocoa, Config.Libs.sentryCocoaVersion)
85+
pod(Config.Libs.sentryCocoa, "~> ${Config.Libs.sentryCocoaVersion}")
8486

8587
ios.deploymentTarget = Config.Cocoa.iosDeploymentTarget
8688
osx.deploymentTarget = Config.Cocoa.osxDeploymentTarget
@@ -167,6 +169,9 @@ kotlin {
167169
cinterops.create("Sentry.Scope") {
168170
includeDirs("$projectDir/src/nativeInterop/cinterop/SentryScope")
169171
}
172+
cinterops.create("Sentry.PrivateSentrySDKOnly") {
173+
includeDirs("$projectDir/src/nativeInterop/cinterop/SentryPrivateSentrySDKOnly")
174+
}
170175
}
171176
}
172177

@@ -179,3 +184,22 @@ kotlin {
179184
)
180185
}
181186
}
187+
188+
buildkonfig {
189+
packageName = "io.sentry.kotlin.multiplatform"
190+
defaultConfigs {
191+
buildConfigField(
192+
STRING,
193+
"SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME",
194+
Config.Sentry.kotlinMultiplatformSdkName
195+
)
196+
buildConfigField(STRING, "VERSION_NAME", project.version.toString())
197+
buildConfigField(STRING, "SENTRY_JVM_PACKAGE_NAME", Config.Sentry.javaPackageName)
198+
buildConfigField(STRING, "SENTRY_ANDROID_PACKAGE_NAME", Config.Sentry.androidPackageName)
199+
buildConfigField(STRING, "SENTRY_COCOA_PACKAGE_NAME", Config.Sentry.cocoaPackageName)
200+
201+
buildConfigField(STRING, "SENTRY_JVM_VERSION", Config.Libs.sentryJavaVersion)
202+
buildConfigField(STRING, "SENTRY_ANDROID_VERSION", Config.Libs.sentryJavaVersion)
203+
buildConfigField(STRING, "SENTRY_COCOA_VERSION", Config.Libs.sentryCocoaVersion)
204+
}
205+
}

sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryAndroidOptionsExtensions.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.sentry.kotlin.multiplatform.extensions
22

33
import io.sentry.android.core.SentryAndroidOptions
4+
import io.sentry.kotlin.multiplatform.BuildKonfig
45
import io.sentry.kotlin.multiplatform.SentryOptions
56

67
internal fun SentryOptions.toAndroidSentryOptionsCallback(): (SentryAndroidOptions) -> Unit = {
@@ -9,4 +10,6 @@ internal fun SentryOptions.toAndroidSentryOptionsCallback(): (SentryAndroidOptio
910

1011
// Apply Android specific options
1112
it.isAttachScreenshot = this.attachScreenshot
13+
sdk.addPackage(BuildKonfig.SENTRY_ANDROID_PACKAGE_NAME, BuildKonfig.SENTRY_ANDROID_VERSION)
14+
it.sdkVersion = sdk.toJvmSdkVersion()
1215
}

sentry-kotlin-multiplatform/src/commonAppleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package io.sentry.kotlin.multiplatform.extensions
22

3+
import PrivateSentrySDKOnly.Sentry.PrivateSentrySDKOnly
34
import cocoapods.Sentry.SentryEvent
5+
import io.sentry.kotlin.multiplatform.BuildKonfig
46
import io.sentry.kotlin.multiplatform.CocoaSentryOptions
57
import io.sentry.kotlin.multiplatform.SentryOptions
68
import io.sentry.kotlin.multiplatform.nsexception.dropKotlinCrashEvent
@@ -28,11 +30,29 @@ internal fun CocoaSentryOptions.applyCocoaBaseOptions(options: SentryOptions) {
2830
this.enableAutoSessionTracking = options.enableAutoSessionTracking
2931
this.beforeSend = { event ->
3032
dropKotlinCrashEvent(event as NSExceptionSentryEvent?) as SentryEvent?
33+
34+
val cocoaName = BuildKonfig.SENTRY_COCOA_PACKAGE_NAME
35+
val cocoaVersion = BuildKonfig.SENTRY_COCOA_VERSION
36+
options.sdk.apply {
37+
val names = this.packages?.map { it.name }
38+
if (names?.contains(cocoaName) != true) {
39+
this.addPackage(cocoaName, cocoaVersion)
40+
}
41+
}
42+
val sdk = event?.sdk?.toMutableMap()
43+
sdk?.set(
44+
"packages",
45+
options.sdk.packages?.map {
46+
mapOf("name" to it.name, "version" to it.version)
47+
}
48+
)
49+
event?.sdk = sdk
50+
51+
event
3152
}
53+
PrivateSentrySDKOnly.setSdkName(options.sdk.name, options.sdk.version)
3254
this.beforeBreadcrumb = { cocoaBreadcrumb ->
33-
cocoaBreadcrumb
34-
?.toKmpBreadcrumb()
35-
.apply { this?.let { options.beforeBreadcrumb?.invoke(it) } }
36-
?.toCocoaBreadcrumb()
55+
cocoaBreadcrumb?.toKmpBreadcrumb()
56+
.apply { this?.let { options.beforeBreadcrumb?.invoke(it) } }?.toCocoaBreadcrumb()
3757
}
3858
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.sentry.kotlin.multiplatform.extensions
2+
3+
import io.sentry.kotlin.multiplatform.protocol.SdkVersion
4+
import io.sentry.protocol.SdkVersion as JvmSdkVersion
5+
6+
fun SdkVersion.toJvmSdkVersion(): JvmSdkVersion {
7+
val sdk = JvmSdkVersion(this.name, this.version)
8+
packages?.forEach { pkg ->
9+
sdk.addPackage(pkg.name, pkg.version)
10+
}
11+
return sdk
12+
}

sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
package io.sentry.kotlin.multiplatform.extensions
22

3+
import io.sentry.kotlin.multiplatform.BuildKonfig
34
import io.sentry.kotlin.multiplatform.JvmSentryOptions
45
import io.sentry.kotlin.multiplatform.SentryOptions
56

67
internal fun SentryOptions.toJvmSentryOptionsCallback(): (JvmSentryOptions) -> Unit = {
78
it.applyJvmBaseOptions(this)
9+
10+
// Apply JVM specific options
11+
this.sdk.apply {
12+
addPackage(BuildKonfig.SENTRY_JVM_PACKAGE_NAME, BuildKonfig.SENTRY_JVM_VERSION)
13+
}
14+
it.sdkVersion = this.sdk.toJvmSdkVersion()
815
}
916

1017
/**

sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.sentry.kotlin.multiplatform
22

33
import io.sentry.kotlin.multiplatform.protocol.Breadcrumb
4+
import io.sentry.kotlin.multiplatform.protocol.SdkVersion
45

56
open class SentryOptions {
67

@@ -56,4 +57,7 @@ open class SentryOptions {
5657

5758
/** Hook that is triggered before a breadcrumb is sent to Sentry */
5859
var beforeBreadcrumb: ((Breadcrumb) -> Breadcrumb)? = null
60+
61+
/** Information about the Sentry SDK that generated this event. */
62+
var sdk: SdkVersion = SdkVersion(BuildKonfig.SENTRY_KOTLIN_MULTIPLATFORM_SDK_NAME, BuildKonfig.VERSION_NAME)
5963
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package io.sentry.kotlin.multiplatform.protocol
2+
3+
/** The SDK Interface describes the Sentry SDK and its configuration used to capture and transmit an event. */
4+
data class SdkVersion(
5+
/** The name of the SDK. */
6+
val name: String,
7+
8+
/** The version of the SDK. */
9+
val version: String
10+
) {
11+
/** Packages used by the SDK. */
12+
var packages: List<Package>? = mutableListOf()
13+
private set
14+
15+
fun addPackage(name: String, version: String) {
16+
val mutableList = packages?.toMutableList()
17+
mutableList?.add(Package(name, version))
18+
packages = mutableList
19+
}
20+
}
21+
22+
data class Package(
23+
val name: String,
24+
val version: String
25+
)

0 commit comments

Comments
 (0)