From 3d0f8f1ee0e2aba725eb6fb57c7ca93e46e7505a Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 16 May 2025 14:42:51 +0200 Subject: [PATCH 01/30] Update Kotlin and Compose version --- build.gradle.kts | 3 ++- buildSrc/src/main/java/Config.kt | 5 +++-- .../sentry_kotlin_multiplatform.podspec | 2 +- sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts | 1 + sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts | 1 + 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index da79214fb..c794d01c0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,8 @@ plugins { id(Config.dokka).version(Config.dokkaVersion) kotlin(Config.multiplatform).version(Config.kotlinVersion).apply(false) kotlin(Config.cocoapods).version(Config.kotlinVersion).apply(false) - id(Config.jetpackCompose).version(Config.composeVersion).apply(false) + id(Config.jetpackCompose).version(Config.composePluginVersion).apply(false) + id(Config.kotlinCompose).version(Config.kotlinVersion).apply(false) id(Config.androidGradle).version(Config.agpVersion).apply(false) id(Config.BuildPlugins.buildConfig).version(Config.BuildPlugins.buildConfigVersion).apply(false) kotlin(Config.kotlinSerializationPlugin).version(Config.kotlinVersion).apply(false) diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index e312a57db..fc22040a4 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -1,12 +1,13 @@ object Config { val agpVersion = "7.4.2" - val kotlinVersion = "1.9.23" - val composeVersion = "1.6.1" + val kotlinVersion = "2.1.21" + val composePluginVersion = "1.8.0" val gradleMavenPublishPluginVersion = "0.18.0" val multiplatform = "multiplatform" val cocoapods = "native.cocoapods" val jetpackCompose = "org.jetbrains.compose" + val kotlinCompose = "org.jetbrains.kotlin.plugin.compose" val gradleMavenPublishPlugin = "com.vanniktech.maven.publish" val androidGradle = "com.android.library" val kotlinSerializationPlugin = "plugin.serialization" diff --git a/sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec b/sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec index e93605e7f..00dc36a98 100644 --- a/sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec +++ b/sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec @@ -54,4 +54,4 @@ Pod::Spec.new do |spec| } ] -end +end \ No newline at end of file diff --git a/sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts b/sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts index dfb988983..4c1b4ba48 100644 --- a/sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts +++ b/sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts @@ -3,6 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("multiplatform") + id("org.jetbrains.kotlin.plugin.compose") id("org.jetbrains.compose") } diff --git a/sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts b/sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts index dfb988983..4c1b4ba48 100644 --- a/sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts +++ b/sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts @@ -3,6 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("multiplatform") + id("org.jetbrains.kotlin.plugin.compose") id("org.jetbrains.compose") } From 5938aacc5a82271e9a7a7318cf3e3298e12220b0 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 16 May 2025 14:44:11 +0200 Subject: [PATCH 02/30] Missing newline --- sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec b/sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec index 00dc36a98..e93605e7f 100644 --- a/sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec +++ b/sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec @@ -54,4 +54,4 @@ Pod::Spec.new do |spec| } ] -end \ No newline at end of file +end From 39775b7ca517677b998213d52fb5bb9c09d8ba6f Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 16 May 2025 14:53:35 +0200 Subject: [PATCH 03/30] Update --- sentry-kotlin-multiplatform/build.gradle.kts | 2 ++ .../kotlin/multiplatform/nsexception/UnhandledExceptionHook.kt | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/sentry-kotlin-multiplatform/build.gradle.kts b/sentry-kotlin-multiplatform/build.gradle.kts index 7b246d0d7..a80677c55 100644 --- a/sentry-kotlin-multiplatform/build.gradle.kts +++ b/sentry-kotlin-multiplatform/build.gradle.kts @@ -75,6 +75,8 @@ kotlin { optIn("kotlinx.cinterop.ExperimentalForeignApi") optIn("kotlinx.cinterop.UnsafeNumber") optIn("kotlin.experimental.ExperimentalNativeApi") + // TODO(buenaflor): we get compiler errors with k2 so right now don't use it + languageVersion = "1.9" } } diff --git a/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/nsexception/UnhandledExceptionHook.kt b/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/nsexception/UnhandledExceptionHook.kt index 4ffa78b71..ee97c2fa9 100644 --- a/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/nsexception/UnhandledExceptionHook.kt +++ b/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/nsexception/UnhandledExceptionHook.kt @@ -31,5 +31,5 @@ internal fun wrapUnhandledExceptionHook(hook: (Throwable) -> Unit) { prevHook.value?.invoke(it) terminateWithUnhandledException(it) } - prevHook.value = setUnhandledExceptionHook(wrappedHook.freeze()) + prevHook.value = setUnhandledExceptionHook(wrappedHook) } From ef0aa9c2afa1fd8ce1748ca7fbd32d9179a036e8 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 16 May 2025 15:12:20 +0200 Subject: [PATCH 04/30] Update deprecations --- sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts | 4 +--- sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts b/sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts index 4c1b4ba48..4ba07652a 100644 --- a/sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts +++ b/sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts @@ -26,9 +26,7 @@ tasks.withType { } kotlin { - jvm { - withJava() - } + jvm() sourceSets { val jvmMain by getting { dependencies { diff --git a/sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts b/sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts index 4c1b4ba48..4ba07652a 100644 --- a/sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts +++ b/sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts @@ -26,9 +26,7 @@ tasks.withType { } kotlin { - jvm { - withJava() - } + jvm() sourceSets { val jvmMain by getting { dependencies { From 530cdf0878d4b6680d07422759f5b4ca2e3c6567 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 04:23:56 +0200 Subject: [PATCH 05/30] Fix K2 compiler issue --- .../kotlin/io/sentry/kotlin/multiplatform/SentryBaseEvent.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryBaseEvent.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryBaseEvent.kt index 10741a4b1..604df1c19 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryBaseEvent.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryBaseEvent.kt @@ -44,7 +44,6 @@ public abstract class SentryBaseEvent( * This is not thread-safe. */ public var contexts: Map = mapOf() - internal set /** * A mutable map of breadcrumbs that led to this event. From 305871a34babe094631bdc4c61e31c592ad43122 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 13:42:47 +0200 Subject: [PATCH 06/30] Formatting --- sentry-kotlin-multiplatform/build.gradle.kts | 2 -- .../kotlin/multiplatform/nsexception/UnhandledExceptionHook.kt | 1 - 2 files changed, 3 deletions(-) diff --git a/sentry-kotlin-multiplatform/build.gradle.kts b/sentry-kotlin-multiplatform/build.gradle.kts index a80677c55..7b246d0d7 100644 --- a/sentry-kotlin-multiplatform/build.gradle.kts +++ b/sentry-kotlin-multiplatform/build.gradle.kts @@ -75,8 +75,6 @@ kotlin { optIn("kotlinx.cinterop.ExperimentalForeignApi") optIn("kotlinx.cinterop.UnsafeNumber") optIn("kotlin.experimental.ExperimentalNativeApi") - // TODO(buenaflor): we get compiler errors with k2 so right now don't use it - languageVersion = "1.9" } } diff --git a/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/nsexception/UnhandledExceptionHook.kt b/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/nsexception/UnhandledExceptionHook.kt index ee97c2fa9..eb6d49e47 100644 --- a/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/nsexception/UnhandledExceptionHook.kt +++ b/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/nsexception/UnhandledExceptionHook.kt @@ -15,7 +15,6 @@ package io.sentry.kotlin.multiplatform.nsexception import kotlin.concurrent.AtomicReference -import kotlin.native.concurrent.freeze /** * Wraps the unhandled exception hook such that the provided [hook] is invoked From cd22321cfb0caecdbea3c32aae42ad5fd2435d5c Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 13:49:13 +0200 Subject: [PATCH 07/30] Fix test --- .../kotlin/io/sentry/kotlin/multiplatform/SentryE2ETest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryE2ETest.kt b/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryE2ETest.kt index cdd3e6780..71061b375 100644 --- a/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryE2ETest.kt +++ b/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryE2ETest.kt @@ -46,7 +46,7 @@ class SentryE2ETest : BaseSentryTest() { @BeforeTest fun setup() { assertNotNull(authToken) - assertTrue(authToken.isNotEmpty()) + assertTrue(authToken!!.isNotEmpty()) sentryInit { options -> options.dsn = realDsn options.beforeSend = { event -> From c89398636a5f2a357b1a8c7178139b22c5bae505 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 14:00:03 +0200 Subject: [PATCH 08/30] Update --- .../kmp-app-spm/shared/build.gradle.kts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/sentry-samples/kmp-app-spm/shared/build.gradle.kts b/sentry-samples/kmp-app-spm/shared/build.gradle.kts index 44a3aaf58..98a85702a 100644 --- a/sentry-samples/kmp-app-spm/shared/build.gradle.kts +++ b/sentry-samples/kmp-app-spm/shared/build.gradle.kts @@ -1,3 +1,4 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { @@ -7,19 +8,20 @@ plugins { } java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 -} - -tasks.withType { - kotlinOptions.jvmTarget = "1.8" + toolchain { + languageVersion.set(JavaLanguageVersion.of(11)) + } } kotlin { applyDefaultHierarchyTemplate() androidTarget() - jvm() + jvm { + compilerOptions { + jvmTarget = JvmTarget.JVM_1_8 + } + } listOf( iosX64(), iosArm64(), From c856bd69fd29067b8ce982afd11ef4bf90e8eecc Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 14:15:48 +0200 Subject: [PATCH 09/30] Update --- buildSrc/src/main/java/Config.kt | 2 +- .../api/android/sentry-kotlin-multiplatform.api | 1 + .../api/jvm/sentry-kotlin-multiplatform.api | 1 + sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index 7839ef4c9..1b8d44f06 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -27,7 +27,7 @@ object Config { val detekt = "io.gitlab.arturbosch.detekt" val detektVersion = "1.22.0" val binaryCompatibility = "org.jetbrains.kotlinx.binary-compatibility-validator" - val binaryCompatibilityVersion = "0.13.1" + val binaryCompatibilityVersion = "0.18.0" } object Libs { diff --git a/sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api b/sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api index cab31bff8..f32b7b42d 100644 --- a/sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api +++ b/sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api @@ -109,6 +109,7 @@ public abstract class io/sentry/kotlin/multiplatform/SentryBaseEvent { public fun getUser ()Lio/sentry/kotlin/multiplatform/protocol/User; public final fun removeTag (Ljava/lang/String;)V public fun setBreadcrumbs (Ljava/util/List;)V + public final fun setContexts (Ljava/util/Map;)V public fun setDist (Ljava/lang/String;)V public fun setEnvironment (Ljava/lang/String;)V public fun setEventId (Lio/sentry/kotlin/multiplatform/protocol/SentryId;)V diff --git a/sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api b/sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api index d122843d4..4d427e886 100644 --- a/sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api +++ b/sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api @@ -106,6 +106,7 @@ public abstract class io/sentry/kotlin/multiplatform/SentryBaseEvent { public fun getUser ()Lio/sentry/kotlin/multiplatform/protocol/User; public final fun removeTag (Ljava/lang/String;)V public fun setBreadcrumbs (Ljava/util/List;)V + public final fun setContexts (Ljava/util/Map;)V public fun setDist (Ljava/lang/String;)V public fun setEnvironment (Ljava/lang/String;)V public fun setEventId (Lio/sentry/kotlin/multiplatform/protocol/SentryId;)V diff --git a/sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec b/sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec index e93605e7f..00dc36a98 100644 --- a/sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec +++ b/sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec @@ -54,4 +54,4 @@ Pod::Spec.new do |spec| } ] -end +end \ No newline at end of file From 1e18595d66ca7125429a781296f31965b85fe401 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 14:21:50 +0200 Subject: [PATCH 10/30] Formatting --- sentry-samples/kmp-app-spm/shared/build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/sentry-samples/kmp-app-spm/shared/build.gradle.kts b/sentry-samples/kmp-app-spm/shared/build.gradle.kts index 98a85702a..f3a6d3698 100644 --- a/sentry-samples/kmp-app-spm/shared/build.gradle.kts +++ b/sentry-samples/kmp-app-spm/shared/build.gradle.kts @@ -1,5 +1,4 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("multiplatform") From 23b0ea4913fc70d18d384575e5d2333bba9e190a Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 14:23:55 +0200 Subject: [PATCH 11/30] Formatting --- .../kmp-app-cocoapods/shared/build.gradle.kts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/sentry-samples/kmp-app-cocoapods/shared/build.gradle.kts b/sentry-samples/kmp-app-cocoapods/shared/build.gradle.kts index 24c265673..96035214a 100644 --- a/sentry-samples/kmp-app-cocoapods/shared/build.gradle.kts +++ b/sentry-samples/kmp-app-cocoapods/shared/build.gradle.kts @@ -1,4 +1,4 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { kotlin("multiplatform") @@ -8,19 +8,20 @@ plugins { } java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 -} - -tasks.withType { - kotlinOptions.jvmTarget = "1.8" + toolchain { + languageVersion.set(JavaLanguageVersion.of(11)) + } } kotlin { applyDefaultHierarchyTemplate() androidTarget() - jvm() + jvm { + compilerOptions { + jvmTarget = JvmTarget.JVM_1_8 + } + } iosX64() iosArm64() iosSimulatorArm64() From e0b6d237da4b56a5b69c18b7ac1bd8aa3d78480c Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 14:32:19 +0200 Subject: [PATCH 12/30] Fix Java 11 config --- sentry-samples/kmp-app-spm/shared/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentry-samples/kmp-app-spm/shared/build.gradle.kts b/sentry-samples/kmp-app-spm/shared/build.gradle.kts index f3a6d3698..525512a8b 100644 --- a/sentry-samples/kmp-app-spm/shared/build.gradle.kts +++ b/sentry-samples/kmp-app-spm/shared/build.gradle.kts @@ -18,7 +18,7 @@ kotlin { androidTarget() jvm { compilerOptions { - jvmTarget = JvmTarget.JVM_1_8 + jvmTarget = JvmTarget.JVM_11 } } listOf( From eecc5481ecd622afa3084fc5f786a21db4a39b49 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 14:41:15 +0200 Subject: [PATCH 13/30] Bump test lib versions --- buildSrc/src/main/java/Config.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index 1b8d44f06..bb780e297 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -60,9 +60,9 @@ object Config { val ktorClientOkHttp = "io.ktor:ktor-client-okhttp:2.3.6" val ktorClientDarwin = "io.ktor:ktor-client-darwin:2.3.6" - val roboelectric = "org.robolectric:robolectric:4.9" - val junitKtx = "androidx.test.ext:junit-ktx:1.1.5" - val mockitoCore = "org.mockito:mockito-core:5.4.0" + val roboelectric = "org.robolectric:robolectric:4.15.1" + val junitKtx = "androidx.test.ext:junit-ktx:1.2.1" + val mockitoCore = "org.mockito:mockito-core:5.18.0" } object Android { From 2115539b76a18077cc374cd8e7a160a55a3a60ce Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 14:50:41 +0200 Subject: [PATCH 14/30] Versions --- sentry-samples/kmp-app-cocoapods/shared/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentry-samples/kmp-app-cocoapods/shared/build.gradle.kts b/sentry-samples/kmp-app-cocoapods/shared/build.gradle.kts index 96035214a..b09ad8521 100644 --- a/sentry-samples/kmp-app-cocoapods/shared/build.gradle.kts +++ b/sentry-samples/kmp-app-cocoapods/shared/build.gradle.kts @@ -19,7 +19,7 @@ kotlin { androidTarget() jvm { compilerOptions { - jvmTarget = JvmTarget.JVM_1_8 + jvmTarget = JvmTarget.JVM_11 } } iosX64() From 1f1a4f63ce9f0a383fae95b48ace2be9c9f3ca3a Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 14:58:09 +0200 Subject: [PATCH 15/30] Java config --- .../desktopApp/build.gradle.kts | 16 +++++++++------- .../kmp-app-spm/desktopApp/build.gradle.kts | 16 +++++++++------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts b/sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts index 4ba07652a..ea92d77b6 100644 --- a/sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts +++ b/sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts @@ -1,4 +1,5 @@ import org.jetbrains.compose.desktop.application.dsl.TargetFormat +import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { @@ -17,16 +18,17 @@ repositories { } java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 -} - -tasks.withType { - kotlinOptions.jvmTarget = "1.8" + toolchain { + languageVersion.set(JavaLanguageVersion.of(11)) + } } kotlin { - jvm() + jvm { + compilerOptions { + jvmTarget = JvmTarget.JVM_11 + } + } sourceSets { val jvmMain by getting { dependencies { diff --git a/sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts b/sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts index 4ba07652a..ea92d77b6 100644 --- a/sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts +++ b/sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts @@ -1,4 +1,5 @@ import org.jetbrains.compose.desktop.application.dsl.TargetFormat +import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { @@ -17,16 +18,17 @@ repositories { } java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 -} - -tasks.withType { - kotlinOptions.jvmTarget = "1.8" + toolchain { + languageVersion.set(JavaLanguageVersion.of(11)) + } } kotlin { - jvm() + jvm { + compilerOptions { + jvmTarget = JvmTarget.JVM_11 + } + } sourceSets { val jvmMain by getting { dependencies { From e6110757b52b95da7a719bba7be1b2011502d3be Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 15:19:05 +0200 Subject: [PATCH 16/30] Update --- .../kmp-app-cocoapods/androidApp/build.gradle.kts | 12 +++++++----- .../kmp-app-cocoapods/desktopApp/build.gradle.kts | 1 - .../kmp-app-cocoapods/shared/build.gradle.kts | 4 ++++ .../kmp-app-spm/androidApp/build.gradle.kts | 4 ++-- .../kmp-app-spm/desktopApp/build.gradle.kts | 1 - sentry-samples/kmp-app-spm/shared/build.gradle.kts | 4 ++++ 6 files changed, 17 insertions(+), 9 deletions(-) diff --git a/sentry-samples/kmp-app-cocoapods/androidApp/build.gradle.kts b/sentry-samples/kmp-app-cocoapods/androidApp/build.gradle.kts index 43d7c3617..9205845a6 100644 --- a/sentry-samples/kmp-app-cocoapods/androidApp/build.gradle.kts +++ b/sentry-samples/kmp-app-cocoapods/androidApp/build.gradle.kts @@ -1,4 +1,4 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { id("com.android.application") @@ -34,12 +34,14 @@ android { } java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } -tasks.withType { - kotlinOptions.jvmTarget = "1.8" +kotlin { + compilerOptions { + jvmTarget = JvmTarget.JVM_11 + } } dependencies { diff --git a/sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts b/sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts index ea92d77b6..519005fef 100644 --- a/sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts +++ b/sentry-samples/kmp-app-cocoapods/desktopApp/build.gradle.kts @@ -1,6 +1,5 @@ import org.jetbrains.compose.desktop.application.dsl.TargetFormat import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("multiplatform") diff --git a/sentry-samples/kmp-app-cocoapods/shared/build.gradle.kts b/sentry-samples/kmp-app-cocoapods/shared/build.gradle.kts index b09ad8521..26e5883cd 100644 --- a/sentry-samples/kmp-app-cocoapods/shared/build.gradle.kts +++ b/sentry-samples/kmp-app-cocoapods/shared/build.gradle.kts @@ -60,6 +60,10 @@ kotlin { } android { + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } compileSdk = Config.Android.compileSdkVersion sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") defaultConfig { diff --git a/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts b/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts index a5855180a..282ad95ee 100644 --- a/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts +++ b/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts @@ -7,8 +7,8 @@ plugins { } java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } tasks.withType { diff --git a/sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts b/sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts index ea92d77b6..519005fef 100644 --- a/sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts +++ b/sentry-samples/kmp-app-spm/desktopApp/build.gradle.kts @@ -1,6 +1,5 @@ import org.jetbrains.compose.desktop.application.dsl.TargetFormat import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("multiplatform") diff --git a/sentry-samples/kmp-app-spm/shared/build.gradle.kts b/sentry-samples/kmp-app-spm/shared/build.gradle.kts index 525512a8b..54bb6031d 100644 --- a/sentry-samples/kmp-app-spm/shared/build.gradle.kts +++ b/sentry-samples/kmp-app-spm/shared/build.gradle.kts @@ -45,6 +45,10 @@ kotlin { } android { + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } compileSdk = Config.Android.compileSdkVersion sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") defaultConfig { From f8c356c9ddc20b99685ec76901f6eb19f0368d52 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 15:54:44 +0200 Subject: [PATCH 17/30] Enable debug temporarily --- scripts/build-jvm.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/build-jvm.sh b/scripts/build-jvm.sh index 37ab21383..f6288b8cc 100755 --- a/scripts/build-jvm.sh +++ b/scripts/build-jvm.sh @@ -12,4 +12,5 @@ PROJECT_NAME="$1" "publishAndroidReleasePublicationToMavenLocal" \ "publishJvmPublicationToMavenLocal" \ "publishKotlinMultiplatformPublicationToMavenLocal" \ - -p "${PROJECT_NAME}" \ No newline at end of file + -p "${PROJECT_NAME}" + --debug \ No newline at end of file From 43ee73acc5567b080af7ede424d12d346d0bf7b0 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 16:11:24 +0200 Subject: [PATCH 18/30] Revert --- scripts/build-jvm.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/build-jvm.sh b/scripts/build-jvm.sh index f6288b8cc..37ab21383 100755 --- a/scripts/build-jvm.sh +++ b/scripts/build-jvm.sh @@ -12,5 +12,4 @@ PROJECT_NAME="$1" "publishAndroidReleasePublicationToMavenLocal" \ "publishJvmPublicationToMavenLocal" \ "publishKotlinMultiplatformPublicationToMavenLocal" \ - -p "${PROJECT_NAME}" - --debug \ No newline at end of file + -p "${PROJECT_NAME}" \ No newline at end of file From 0223f5c1f96b8eef01dee806a106bcae884557b1 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 16:16:43 +0200 Subject: [PATCH 19/30] Update --- .../kotlin/multiplatform/SentryPlatformInstance.android.kt | 2 +- .../io/sentry/kotlin/multiplatform/SentryPlatformInstance.kt | 4 +++- .../multiplatform/SentryPlatformInstance.tvwatchmacos.kt | 2 +- .../sentry/kotlin/multiplatform/SentryPlatformInstance.ios.kt | 2 +- .../sentry/kotlin/multiplatform/SentryPlatformInstance.jvm.kt | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.android.kt b/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.android.kt index 926313324..0cd4779d5 100644 --- a/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.android.kt +++ b/sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.android.kt @@ -3,7 +3,7 @@ package io.sentry.kotlin.multiplatform import io.sentry.android.core.SentryAndroid internal actual class SentryPlatformInstance : SentryInstance { - override fun init(configuration: PlatformOptionsConfiguration) { + actual override fun init(configuration: PlatformOptionsConfiguration) { val context = applicationContext ?: run { // TODO: add logging later return diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.kt index e32b9e5df..a0ac716bc 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.kt @@ -7,4 +7,6 @@ internal interface SentryInstance { /** * Represents the actual Sentry SDK instance. */ -internal expect class SentryPlatformInstance() : SentryInstance +internal expect class SentryPlatformInstance() : SentryInstance { + override fun init(configuration: PlatformOptionsConfiguration) +} diff --git a/sentry-kotlin-multiplatform/src/commonTvWatchMacOsMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.tvwatchmacos.kt b/sentry-kotlin-multiplatform/src/commonTvWatchMacOsMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.tvwatchmacos.kt index 02532b89c..09a6780bb 100644 --- a/sentry-kotlin-multiplatform/src/commonTvWatchMacOsMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.tvwatchmacos.kt +++ b/sentry-kotlin-multiplatform/src/commonTvWatchMacOsMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.tvwatchmacos.kt @@ -3,7 +3,7 @@ package io.sentry.kotlin.multiplatform import cocoapods.Sentry.SentrySDK internal actual class SentryPlatformInstance : SentryInstance { - override fun init(configuration: PlatformOptionsConfiguration) { + actual override fun init(configuration: PlatformOptionsConfiguration) { val finalConfiguration: (CocoaSentryOptions?) -> Unit = { if (it != null) { configuration(it) diff --git a/sentry-kotlin-multiplatform/src/iosMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.ios.kt b/sentry-kotlin-multiplatform/src/iosMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.ios.kt index 02532b89c..09a6780bb 100644 --- a/sentry-kotlin-multiplatform/src/iosMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.ios.kt +++ b/sentry-kotlin-multiplatform/src/iosMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.ios.kt @@ -3,7 +3,7 @@ package io.sentry.kotlin.multiplatform import cocoapods.Sentry.SentrySDK internal actual class SentryPlatformInstance : SentryInstance { - override fun init(configuration: PlatformOptionsConfiguration) { + actual override fun init(configuration: PlatformOptionsConfiguration) { val finalConfiguration: (CocoaSentryOptions?) -> Unit = { if (it != null) { configuration(it) diff --git a/sentry-kotlin-multiplatform/src/jvmMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.jvm.kt b/sentry-kotlin-multiplatform/src/jvmMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.jvm.kt index 40a6a8c66..c5ebc23d6 100644 --- a/sentry-kotlin-multiplatform/src/jvmMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.jvm.kt +++ b/sentry-kotlin-multiplatform/src/jvmMain/kotlin/io/sentry/kotlin/multiplatform/SentryPlatformInstance.jvm.kt @@ -3,7 +3,7 @@ package io.sentry.kotlin.multiplatform import io.sentry.Sentry as JvmSentry internal actual class SentryPlatformInstance : SentryInstance { - override fun init(configuration: PlatformOptionsConfiguration) { + actual override fun init(configuration: PlatformOptionsConfiguration) { JvmSentry.init(configuration) } } From fdf6fea19fa000c8a95bcf0cc04e78629bb4ed6d Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 16:22:42 +0200 Subject: [PATCH 20/30] Update --- sentry-samples/kmp-app-cocoapods/androidApp/build.gradle.kts | 4 ++++ sentry-samples/kmp-app-spm/androidApp/build.gradle.kts | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/sentry-samples/kmp-app-cocoapods/androidApp/build.gradle.kts b/sentry-samples/kmp-app-cocoapods/androidApp/build.gradle.kts index 9205845a6..e539518a4 100644 --- a/sentry-samples/kmp-app-cocoapods/androidApp/build.gradle.kts +++ b/sentry-samples/kmp-app-cocoapods/androidApp/build.gradle.kts @@ -7,6 +7,10 @@ plugins { } android { + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } compileSdk = Config.Android.compileSdkVersion defaultConfig { applicationId = "sample.kmp.app.android" diff --git a/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts b/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts index 282ad95ee..3f65601cd 100644 --- a/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts +++ b/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts @@ -16,6 +16,10 @@ tasks.withType { } android { + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } compileSdk = Config.Android.compileSdkVersion defaultConfig { applicationId = "sample.kmp.app.android" From e9c65fd12295380e6497c5b2ca0ad550732d3663 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 27 Jun 2025 16:58:33 +0200 Subject: [PATCH 21/30] Update --- sentry-samples/kmp-app-spm/androidApp/build.gradle.kts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts b/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts index 3f65601cd..630a74b07 100644 --- a/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts +++ b/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts @@ -1,3 +1,4 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { @@ -11,8 +12,10 @@ java { targetCompatibility = JavaVersion.VERSION_11 } -tasks.withType { - kotlinOptions.jvmTarget = "1.8" +kotlin { + compilerOptions { + jvmTarget = JvmTarget.JVM_11 + } } android { From a5e2d8878caf53efc3568fe7c3ededad2f21f95c Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Sat, 28 Jun 2025 14:09:07 +0200 Subject: [PATCH 22/30] Line end --- sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec b/sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec index 00dc36a98..e93605e7f 100644 --- a/sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec +++ b/sentry-kotlin-multiplatform/sentry_kotlin_multiplatform.podspec @@ -54,4 +54,4 @@ Pod::Spec.new do |spec| } ] -end \ No newline at end of file +end From 2b5af1f147521e7d6881d9cd27a0342fe2f2d950 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Sat, 28 Jun 2025 14:09:52 +0200 Subject: [PATCH 23/30] Formatting --- sentry-samples/kmp-app-spm/androidApp/build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts b/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts index 630a74b07..882adf229 100644 --- a/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts +++ b/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts @@ -1,5 +1,4 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("com.android.application") From 31e24c638796a7901343629ffda624e8f98dbc76 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 4 Jul 2025 10:37:42 +0200 Subject: [PATCH 24/30] Add toolchain to java block --- sentry-samples/kmp-app-cocoapods/androidApp/build.gradle.kts | 4 ++++ sentry-samples/kmp-app-spm/androidApp/build.gradle.kts | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/sentry-samples/kmp-app-cocoapods/androidApp/build.gradle.kts b/sentry-samples/kmp-app-cocoapods/androidApp/build.gradle.kts index e539518a4..b0dfb6066 100644 --- a/sentry-samples/kmp-app-cocoapods/androidApp/build.gradle.kts +++ b/sentry-samples/kmp-app-cocoapods/androidApp/build.gradle.kts @@ -40,6 +40,10 @@ android { java { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 + + toolchain { + languageVersion.set(JavaLanguageVersion.of(11)) + } } kotlin { diff --git a/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts b/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts index 882adf229..d6cd30825 100644 --- a/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts +++ b/sentry-samples/kmp-app-spm/androidApp/build.gradle.kts @@ -9,6 +9,10 @@ plugins { java { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 + + toolchain { + languageVersion.set(JavaLanguageVersion.of(11)) + } } kotlin { From 0cbb44055f7923af9eea544ed777f3da8687d28b Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 4 Jul 2025 11:33:12 +0200 Subject: [PATCH 25/30] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9df024421..a7169f691 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Dependencies +- Bump Kotlin from `1.9.23` to `2.1.21` ([#389](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/389/)) - Bump Cocoa SDK from v8.49.1 to v8.53.1 ([#405](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/405)) - [changelog](https://github.com/getsentry/sentry-cocoa/blob/main/CHANGELOG.md#8531) - [diff](https://github.com/getsentry/sentry-cocoa/compare/8.49.1...8.53.1) From 737dadec4cd3dd05336d1fefb27688edff8594bc Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Wed, 16 Jul 2025 12:04:50 +0200 Subject: [PATCH 26/30] Update publication --- buildSrc/src/main/java/Publication.kt | 296 +++++++++++++------------- 1 file changed, 145 insertions(+), 151 deletions(-) diff --git a/buildSrc/src/main/java/Publication.kt b/buildSrc/src/main/java/Publication.kt index 68fddaeb1..9d341a6b4 100644 --- a/buildSrc/src/main/java/Publication.kt +++ b/buildSrc/src/main/java/Publication.kt @@ -1,24 +1,49 @@ import org.gradle.api.Project import org.gradle.api.distribution.DistributionContainer import org.gradle.api.file.CopySpec +import org.gradle.api.tasks.bundling.Zip +import org.gradle.kotlin.dsl.register import java.io.File +/** + * Helpers to assemble our platform‑specific distribution zips. + * + * For Kotlin/Native cinterop outputs we want **real** `.klib` archives whose file names + * encode the native target and version (e.g. `sentry-kotlin-multiplatform-cinterop-Sentry-iosarm64-6.36.0.klib`). + * + * On recent Kotlin versions the compiler already emits such files; on older ones the + * compiler leaves an *unpacked* klib layout on disk (`default/`, `linkdata/`, …). + * The `fromKlib(…)` helper below registers a Zip task per (target, cinterop) that: + * 1. Detects whether the compiler produced a ready‑made `.klib` **file** *or* an + * unpacked **directory**. + * 2. Zips the directory (or re‑zips the file) so we can rename it deterministically. + * 3. Declares an explicit `dependsOn` on the corresponding `cinterop*` task so Gradle + * knows the inputs are produced by another task (avoiding configuration errors). + * + * The produced Zip tasks are wired into the distribution `CopySpec` via `from(zipTask)`; + * passing a task provider automatically adds the dependency edge to the distZip task. + */ + val sep: String = File.separator -// configure distZip tasks for multiplatform +// --------------------------------------------------------------------------- +// Top‑level entry point called from the module's `publishing.gradle.kts`. +// --------------------------------------------------------------------------- + fun DistributionContainer.configureForMultiplatform(project: Project) { val version = project.properties["versionName"].toString() + + // -------------------------------------------------- + // MAIN (platform‑agnostic) DISTRIBUTION + // -------------------------------------------------- this.getByName("main").contents { from("build${sep}publications${sep}kotlinMultiplatform") { renameModule(project.name, version = version) } - // The current Kotlin version doesn't generate this *-all.jar anymore. - // This is a placeholder for backwards compatibility with craft until we fix it there directly. + // Compatibility shim: Kotlin ≥1.9 stopped writing *-all.jar. from("build${sep}libs") { include("${project.name}-metadata-$version*") - rename { - it.replace("metadata-$version", "$version-all") - } + rename { it.replace("metadata-$version", "$version-all") } } from("build${sep}kotlinToolingMetadata") { rename { @@ -33,18 +58,21 @@ fun DistributionContainer.configureForMultiplatform(project: Project) { include("${project.name}-metadata*") withJavadoc(project.name) rename { - it.replace("multiplatform-kotlin", "multiplatform").replace("-metadata", "") + it.replace("multiplatform-kotlin", "multiplatform") + .replace("-metadata", "") } } } + + // -------------------------------------------------- + // JVM & ANDROID ‑ no native klibs needed + // -------------------------------------------------- this.maybeCreate("android").contents { from("build${sep}publications${sep}androidRelease") { renameModule(project.name, "android", version) } from("build${sep}outputs${sep}aar${sep}${project.name}-release.aar") { - rename { - it.replace("-release", "-android-release") - } + rename { it.replace("-release", "-android-release") } } from("build${sep}libs") { include("*android*") @@ -60,169 +88,135 @@ fun DistributionContainer.configureForMultiplatform(project: Project) { withJavadoc(project.name, "jvm") } } - this.maybeCreate("iosarm64").contents { - from("build${sep}publications${sep}iosArm64") { - renameModule(project.name, "iosarm64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-iosarm64*") - withJavadoc(project.name, "iosarm64") - } - fromKlib(project.name, "iosArm64", version) - } - this.maybeCreate("iosx64").contents { - from("build${sep}publications${sep}iosX64") { - renameModule(project.name, "iosx64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-iosx64*") - withJavadoc(project.name, "iosx64") - } - fromKlib(project.name, "iosX64", version) - } - this.maybeCreate("iossimulatorarm64").contents { - from("build${sep}publications${sep}iosSimulatorArm64") { - renameModule(project.name, "iossimulatorarm64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-iossimulatorarm64*") - withJavadoc(project.name, "iossimulatorarm64") - } - fromKlib(project.name, "iosSimulatorArm64", version) - } - this.maybeCreate("macosarm64").contents { - from("build${sep}publications${sep}macosArm64") { - renameModule(project.name, "macosarm64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-macosarm64*") - withJavadoc(project.name, "macosarm64") - } - fromKlib(project.name, "macosArm64", version) - } - this.maybeCreate("macosx64").contents { - from("build${sep}publications${sep}macosX64") { - renameModule(project.name, "macosx64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-macosx64*") - withJavadoc(project.name, "macosx64") - } - fromKlib(project.name, "macosX64", version) - } - this.maybeCreate("watchosx64").contents { - from("build${sep}publications${sep}watchosX64") { - renameModule(project.name, "watchosx64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-watchosx64*") - withJavadoc(project.name, "watchosx64") - } - fromKlib(project.name, "watchosX64", version) - } - this.maybeCreate("watchosarm32").contents { - from("build${sep}publications${sep}watchosArm32") { - renameModule(project.name, "watchosarm32", version) - } - from("build${sep}libs$sep") { - include("${project.name}-watchosarm32*") - withJavadoc(project.name, "watchosarm32") - } - fromKlib(project.name, "watchosArm32", version) - } - this.maybeCreate("watchosarm64").contents { - from("build${sep}publications${sep}watchosArm64") { - renameModule(project.name, "watchosarm64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-watchosarm64*") - withJavadoc(project.name, "watchosarm64") - } - fromKlib(project.name, "watchosArm64", version) - } - this.maybeCreate("watchossimulatorarm64").contents { - from("build${sep}publications${sep}watchosSimulatorArm64") { - renameModule(project.name, "watchossimulatorarm64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-watchossimulatorarm64*") - withJavadoc(project.name, "watchossimulatorarm64") - } - fromKlib(project.name, "watchosSimulatorArm64", version) - } - this.maybeCreate("tvosarm64").contents { - from("build${sep}publications${sep}tvosArm64") { - renameModule(project.name, "tvosarm64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-tvosarm64*") - withJavadoc(project.name, "tvosarm64") - } - fromKlib(project.name, "tvosArm64", version) - } - this.maybeCreate("tvosx64").contents { - from("build${sep}publications${sep}tvosX64") { - renameModule(project.name, "tvosx64", version) + + // -------------------------------------------------- + // All targets that need klib packaging + // -------------------------------------------------- + fun CopySpec.native(targetGradleName: String, targetFileSuffix: String) { + from("build${sep}publications${sep}$targetGradleName") { + renameModule(project.name, targetFileSuffix, version) } from("build${sep}libs$sep") { - include("${project.name}-tvosx64*") - withJavadoc(project.name, "tvosx64") + include("${project.name}-$targetFileSuffix*") + withJavadoc(project.name, targetFileSuffix) } - fromKlib(project.name, "tvosX64", version) + fromKlib(project, targetGradleName, version) } - this.maybeCreate("tvossimulatorarm64").contents { - from("build${sep}publications${sep}tvosSimulatorArm64") { - renameModule(project.name, "tvossimulatorarm64", version) + + this.maybeCreate("iosarm64").contents { native("iosArm64", "iosarm64") } + this.maybeCreate("iosx64").contents { native("iosX64", "iosx64") } + this.maybeCreate("iossimulatorarm64") + .contents { native("iosSimulatorArm64", "iossimulatorarm64") } + this.maybeCreate("macosarm64").contents { native("macosArm64", "macosarm64") } + this.maybeCreate("macosx64").contents { native("macosX64", "macosx64") } + this.maybeCreate("watchosx64").contents { native("watchosX64", "watchosx64") } + this.maybeCreate("watchosarm32").contents { native("watchosArm32", "watchosarm32") } + this.maybeCreate("watchosarm64").contents { native("watchosArm64", "watchosarm64") } + this.maybeCreate("watchossimulatorarm64") + .contents { native("watchosSimulatorArm64", "watchossimulatorarm64") } + this.maybeCreate("tvosarm64").contents { native("tvosArm64", "tvosarm64") } + this.maybeCreate("tvosx64").contents { native("tvosX64", "tvosx64") } + this.maybeCreate("tvossimulatorarm64") + .contents { native("tvosSimulatorArm64", "tvossimulatorarm64") } + + // JS usually has no klibs but run defensively. + this.maybeCreate("js").contents { + from("build${sep}publications${sep}js") { + renameModule(project.name, "js", version) } from("build${sep}libs$sep") { - include("${project.name}-tvossimulatorarm64*") - withJavadoc(project.name, "tvossimulatorarm64") + include("${project.name}-js-*") + withJavadoc(project.name, "js") } - fromKlib(project.name, "tvosSimulatorArm64", version) + fromKlib(project, "js", version) } } -private fun CopySpec.fromKlib(projectName: String, target: String, version: String) { - val pos = projectName.length - from("build${sep}classes${sep}kotlin${sep}${target}${sep}main${sep}cinterop") { - include("*.klib") - rename { - it.replaceRange(pos, pos, "-${target.lowercase()}-$version") +// --------------------------------------------------------------------------- +// Helper to package klibs per target. +// --------------------------------------------------------------------------- + +private fun CopySpec.fromKlib( + project: Project, + target: String, + version: String +) { + val libs = listOf("Sentry", "Sentry.Internal") + val cinteropRelPath = "classes${sep}kotlin${sep}$target${sep}main${sep}cinterop" + val projectName = project.name + val targetSlug = target.lowercase() + + libs.forEach { lib -> + val baseName = "$projectName-cinterop-$lib" + + // Desired shipped artifact name: + // ---cinterop-.klib + // e.g. sentry-kotlin-multiplatform-iossimulatorarm64-0.110.0-cinterop-Sentry.klib + val finalFileName = "$projectName-$targetSlug-$version-cinterop-$lib.klib" + + // Gradle's cinterop task keeps raw lib (including '.'), so we do the same + // when locating upstream tasks; we only sanitize for our packaging task name. + val tgtTaskPartCap = target.replaceFirstChar { it.uppercase() } // iosSimulatorArm64 -> IosSimulatorArm64 + val cinteropTaskName = "cinterop${lib}$tgtTaskPartCap" // dot in lib preserved + + val libTaskSafe = lib.replace(".", "") // for our task name + val pkgTaskName = "package${tgtTaskPartCap}${libTaskSafe}CinteropKlib" + + val sourceKlibProvider = project.layout.buildDirectory.file( + "$cinteropRelPath${sep}$baseName.klib" + ) + val sourceDirProvider = project.layout.buildDirectory.dir( + "$cinteropRelPath${sep}$baseName" + ) + + val zipTask = project.tasks.register(pkgTaskName, Zip::class.java) { + group = "packaging" + description = "Package $baseName for $target into a .klib" + + archiveFileName.set(finalFileName) + destinationDirectory.set(project.layout.buildDirectory.dir("tmp${sep}klibs${sep}$targetSlug")) + + // Prefer compiler-produced klib; else zip unpacked dir. + from( + project.provider { + val klibFile = sourceKlibProvider.get().asFile + if (klibFile.isFile) project.zipTree(klibFile) else sourceDirProvider.get().asFile + } + ) + + // Skip if neither form exists (no such cinterop for this target). + onlyIf { + sourceKlibProvider.get().asFile.exists() || sourceDirProvider.get().asFile.exists() + } } - } - from("build${sep}classes${sep}kotlin${sep}${target}${sep}main${sep}klib") { - rename { - "$projectName-${target.lowercase()}-$version.klib" + + project.afterEvaluate { + val upstream = tasks.findByName(cinteropTaskName) + if (upstream != null) { + zipTask.configure { dependsOn(upstream) } + } } + + from(zipTask) } } private fun CopySpec.renameModule(projectName: String, renameTo: String = "", version: String) { - var target = "" - if (renameTo.isNotEmpty()) { - target = "-$renameTo" - } - rename { - it.replace("module.json", "$projectName$target-$version.module") - } + val suffix = if (renameTo.isNotEmpty()) "-$renameTo" else "" + rename { it.replace("module.json", "$projectName$suffix-$version.module") } } private fun CopySpec.withJavadoc(projectName: String, renameTo: String = "") { include("*javadoc*") rename { fileName -> - when { - "javadoc" in fileName -> { - val newName = buildString { - append(fileName.substring(0, projectName.length)) - if (renameTo.isNotEmpty()) { - append('-') - append(renameTo) - } - append(fileName.substring(projectName.length)) - } - newName + if ("javadoc" in fileName) { + buildString { + append(fileName.substring(0, projectName.length)) + if (renameTo.isNotEmpty()) append('-').append(renameTo) + append(fileName.substring(projectName.length)) } - else -> fileName + } else { + fileName } } } From 06a6695863b66ae139a8e043236273f940621012 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Thu, 17 Jul 2025 16:28:23 +0200 Subject: [PATCH 27/30] Update --- buildSrc/src/main/java/Config.kt | 13 +- buildSrc/src/main/java/Publication.kt | 296 +++++++++++++------------- 2 files changed, 157 insertions(+), 152 deletions(-) diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index 59684badd..e0c14d49d 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -1,13 +1,12 @@ object Config { val agpVersion = "7.4.2" - val kotlinVersion = "2.1.21" - val composePluginVersion = "1.8.0" + val kotlinVersion = "1.9.23" + val composeVersion = "1.6.1" val gradleMavenPublishPluginVersion = "0.18.0" val multiplatform = "multiplatform" val cocoapods = "native.cocoapods" val jetpackCompose = "org.jetbrains.compose" - val kotlinCompose = "org.jetbrains.kotlin.plugin.compose" val gradleMavenPublishPlugin = "com.vanniktech.maven.publish" val androidGradle = "com.android.library" val kotlinSerializationPlugin = "plugin.serialization" @@ -27,7 +26,7 @@ object Config { val detekt = "io.gitlab.arturbosch.detekt" val detektVersion = "1.22.0" val binaryCompatibility = "org.jetbrains.kotlinx.binary-compatibility-validator" - val binaryCompatibilityVersion = "0.18.0" + val binaryCompatibilityVersion = "0.13.1" } object Libs { @@ -60,9 +59,9 @@ object Config { val ktorClientOkHttp = "io.ktor:ktor-client-okhttp:2.3.6" val ktorClientDarwin = "io.ktor:ktor-client-darwin:2.3.6" - val roboelectric = "org.robolectric:robolectric:4.15.1" - val junitKtx = "androidx.test.ext:junit-ktx:1.2.1" - val mockitoCore = "org.mockito:mockito-core:5.18.0" + val roboelectric = "org.robolectric:robolectric:4.9" + val junitKtx = "androidx.test.ext:junit-ktx:1.1.5" + val mockitoCore = "org.mockito:mockito-core:5.4.0" } object Android { diff --git a/buildSrc/src/main/java/Publication.kt b/buildSrc/src/main/java/Publication.kt index 9d341a6b4..68fddaeb1 100644 --- a/buildSrc/src/main/java/Publication.kt +++ b/buildSrc/src/main/java/Publication.kt @@ -1,49 +1,24 @@ import org.gradle.api.Project import org.gradle.api.distribution.DistributionContainer import org.gradle.api.file.CopySpec -import org.gradle.api.tasks.bundling.Zip -import org.gradle.kotlin.dsl.register import java.io.File -/** - * Helpers to assemble our platform‑specific distribution zips. - * - * For Kotlin/Native cinterop outputs we want **real** `.klib` archives whose file names - * encode the native target and version (e.g. `sentry-kotlin-multiplatform-cinterop-Sentry-iosarm64-6.36.0.klib`). - * - * On recent Kotlin versions the compiler already emits such files; on older ones the - * compiler leaves an *unpacked* klib layout on disk (`default/`, `linkdata/`, …). - * The `fromKlib(…)` helper below registers a Zip task per (target, cinterop) that: - * 1. Detects whether the compiler produced a ready‑made `.klib` **file** *or* an - * unpacked **directory**. - * 2. Zips the directory (or re‑zips the file) so we can rename it deterministically. - * 3. Declares an explicit `dependsOn` on the corresponding `cinterop*` task so Gradle - * knows the inputs are produced by another task (avoiding configuration errors). - * - * The produced Zip tasks are wired into the distribution `CopySpec` via `from(zipTask)`; - * passing a task provider automatically adds the dependency edge to the distZip task. - */ - val sep: String = File.separator -// --------------------------------------------------------------------------- -// Top‑level entry point called from the module's `publishing.gradle.kts`. -// --------------------------------------------------------------------------- - +// configure distZip tasks for multiplatform fun DistributionContainer.configureForMultiplatform(project: Project) { val version = project.properties["versionName"].toString() - - // -------------------------------------------------- - // MAIN (platform‑agnostic) DISTRIBUTION - // -------------------------------------------------- this.getByName("main").contents { from("build${sep}publications${sep}kotlinMultiplatform") { renameModule(project.name, version = version) } - // Compatibility shim: Kotlin ≥1.9 stopped writing *-all.jar. + // The current Kotlin version doesn't generate this *-all.jar anymore. + // This is a placeholder for backwards compatibility with craft until we fix it there directly. from("build${sep}libs") { include("${project.name}-metadata-$version*") - rename { it.replace("metadata-$version", "$version-all") } + rename { + it.replace("metadata-$version", "$version-all") + } } from("build${sep}kotlinToolingMetadata") { rename { @@ -58,21 +33,18 @@ fun DistributionContainer.configureForMultiplatform(project: Project) { include("${project.name}-metadata*") withJavadoc(project.name) rename { - it.replace("multiplatform-kotlin", "multiplatform") - .replace("-metadata", "") + it.replace("multiplatform-kotlin", "multiplatform").replace("-metadata", "") } } } - - // -------------------------------------------------- - // JVM & ANDROID ‑ no native klibs needed - // -------------------------------------------------- this.maybeCreate("android").contents { from("build${sep}publications${sep}androidRelease") { renameModule(project.name, "android", version) } from("build${sep}outputs${sep}aar${sep}${project.name}-release.aar") { - rename { it.replace("-release", "-android-release") } + rename { + it.replace("-release", "-android-release") + } } from("build${sep}libs") { include("*android*") @@ -88,135 +60,169 @@ fun DistributionContainer.configureForMultiplatform(project: Project) { withJavadoc(project.name, "jvm") } } - - // -------------------------------------------------- - // All targets that need klib packaging - // -------------------------------------------------- - fun CopySpec.native(targetGradleName: String, targetFileSuffix: String) { - from("build${sep}publications${sep}$targetGradleName") { - renameModule(project.name, targetFileSuffix, version) + this.maybeCreate("iosarm64").contents { + from("build${sep}publications${sep}iosArm64") { + renameModule(project.name, "iosarm64", version) } from("build${sep}libs$sep") { - include("${project.name}-$targetFileSuffix*") - withJavadoc(project.name, targetFileSuffix) + include("${project.name}-iosarm64*") + withJavadoc(project.name, "iosarm64") } - fromKlib(project, targetGradleName, version) + fromKlib(project.name, "iosArm64", version) } - - this.maybeCreate("iosarm64").contents { native("iosArm64", "iosarm64") } - this.maybeCreate("iosx64").contents { native("iosX64", "iosx64") } - this.maybeCreate("iossimulatorarm64") - .contents { native("iosSimulatorArm64", "iossimulatorarm64") } - this.maybeCreate("macosarm64").contents { native("macosArm64", "macosarm64") } - this.maybeCreate("macosx64").contents { native("macosX64", "macosx64") } - this.maybeCreate("watchosx64").contents { native("watchosX64", "watchosx64") } - this.maybeCreate("watchosarm32").contents { native("watchosArm32", "watchosarm32") } - this.maybeCreate("watchosarm64").contents { native("watchosArm64", "watchosarm64") } - this.maybeCreate("watchossimulatorarm64") - .contents { native("watchosSimulatorArm64", "watchossimulatorarm64") } - this.maybeCreate("tvosarm64").contents { native("tvosArm64", "tvosarm64") } - this.maybeCreate("tvosx64").contents { native("tvosX64", "tvosx64") } - this.maybeCreate("tvossimulatorarm64") - .contents { native("tvosSimulatorArm64", "tvossimulatorarm64") } - - // JS usually has no klibs but run defensively. - this.maybeCreate("js").contents { - from("build${sep}publications${sep}js") { - renameModule(project.name, "js", version) + this.maybeCreate("iosx64").contents { + from("build${sep}publications${sep}iosX64") { + renameModule(project.name, "iosx64", version) + } + from("build${sep}libs$sep") { + include("${project.name}-iosx64*") + withJavadoc(project.name, "iosx64") + } + fromKlib(project.name, "iosX64", version) + } + this.maybeCreate("iossimulatorarm64").contents { + from("build${sep}publications${sep}iosSimulatorArm64") { + renameModule(project.name, "iossimulatorarm64", version) + } + from("build${sep}libs$sep") { + include("${project.name}-iossimulatorarm64*") + withJavadoc(project.name, "iossimulatorarm64") + } + fromKlib(project.name, "iosSimulatorArm64", version) + } + this.maybeCreate("macosarm64").contents { + from("build${sep}publications${sep}macosArm64") { + renameModule(project.name, "macosarm64", version) + } + from("build${sep}libs$sep") { + include("${project.name}-macosarm64*") + withJavadoc(project.name, "macosarm64") + } + fromKlib(project.name, "macosArm64", version) + } + this.maybeCreate("macosx64").contents { + from("build${sep}publications${sep}macosX64") { + renameModule(project.name, "macosx64", version) + } + from("build${sep}libs$sep") { + include("${project.name}-macosx64*") + withJavadoc(project.name, "macosx64") + } + fromKlib(project.name, "macosX64", version) + } + this.maybeCreate("watchosx64").contents { + from("build${sep}publications${sep}watchosX64") { + renameModule(project.name, "watchosx64", version) + } + from("build${sep}libs$sep") { + include("${project.name}-watchosx64*") + withJavadoc(project.name, "watchosx64") + } + fromKlib(project.name, "watchosX64", version) + } + this.maybeCreate("watchosarm32").contents { + from("build${sep}publications${sep}watchosArm32") { + renameModule(project.name, "watchosarm32", version) + } + from("build${sep}libs$sep") { + include("${project.name}-watchosarm32*") + withJavadoc(project.name, "watchosarm32") + } + fromKlib(project.name, "watchosArm32", version) + } + this.maybeCreate("watchosarm64").contents { + from("build${sep}publications${sep}watchosArm64") { + renameModule(project.name, "watchosarm64", version) } from("build${sep}libs$sep") { - include("${project.name}-js-*") - withJavadoc(project.name, "js") + include("${project.name}-watchosarm64*") + withJavadoc(project.name, "watchosarm64") } - fromKlib(project, "js", version) + fromKlib(project.name, "watchosArm64", version) + } + this.maybeCreate("watchossimulatorarm64").contents { + from("build${sep}publications${sep}watchosSimulatorArm64") { + renameModule(project.name, "watchossimulatorarm64", version) + } + from("build${sep}libs$sep") { + include("${project.name}-watchossimulatorarm64*") + withJavadoc(project.name, "watchossimulatorarm64") + } + fromKlib(project.name, "watchosSimulatorArm64", version) + } + this.maybeCreate("tvosarm64").contents { + from("build${sep}publications${sep}tvosArm64") { + renameModule(project.name, "tvosarm64", version) + } + from("build${sep}libs$sep") { + include("${project.name}-tvosarm64*") + withJavadoc(project.name, "tvosarm64") + } + fromKlib(project.name, "tvosArm64", version) + } + this.maybeCreate("tvosx64").contents { + from("build${sep}publications${sep}tvosX64") { + renameModule(project.name, "tvosx64", version) + } + from("build${sep}libs$sep") { + include("${project.name}-tvosx64*") + withJavadoc(project.name, "tvosx64") + } + fromKlib(project.name, "tvosX64", version) + } + this.maybeCreate("tvossimulatorarm64").contents { + from("build${sep}publications${sep}tvosSimulatorArm64") { + renameModule(project.name, "tvossimulatorarm64", version) + } + from("build${sep}libs$sep") { + include("${project.name}-tvossimulatorarm64*") + withJavadoc(project.name, "tvossimulatorarm64") + } + fromKlib(project.name, "tvosSimulatorArm64", version) } } -// --------------------------------------------------------------------------- -// Helper to package klibs per target. -// --------------------------------------------------------------------------- - -private fun CopySpec.fromKlib( - project: Project, - target: String, - version: String -) { - val libs = listOf("Sentry", "Sentry.Internal") - val cinteropRelPath = "classes${sep}kotlin${sep}$target${sep}main${sep}cinterop" - val projectName = project.name - val targetSlug = target.lowercase() - - libs.forEach { lib -> - val baseName = "$projectName-cinterop-$lib" - - // Desired shipped artifact name: - // ---cinterop-.klib - // e.g. sentry-kotlin-multiplatform-iossimulatorarm64-0.110.0-cinterop-Sentry.klib - val finalFileName = "$projectName-$targetSlug-$version-cinterop-$lib.klib" - - // Gradle's cinterop task keeps raw lib (including '.'), so we do the same - // when locating upstream tasks; we only sanitize for our packaging task name. - val tgtTaskPartCap = target.replaceFirstChar { it.uppercase() } // iosSimulatorArm64 -> IosSimulatorArm64 - val cinteropTaskName = "cinterop${lib}$tgtTaskPartCap" // dot in lib preserved - - val libTaskSafe = lib.replace(".", "") // for our task name - val pkgTaskName = "package${tgtTaskPartCap}${libTaskSafe}CinteropKlib" - - val sourceKlibProvider = project.layout.buildDirectory.file( - "$cinteropRelPath${sep}$baseName.klib" - ) - val sourceDirProvider = project.layout.buildDirectory.dir( - "$cinteropRelPath${sep}$baseName" - ) - - val zipTask = project.tasks.register(pkgTaskName, Zip::class.java) { - group = "packaging" - description = "Package $baseName for $target into a .klib" - - archiveFileName.set(finalFileName) - destinationDirectory.set(project.layout.buildDirectory.dir("tmp${sep}klibs${sep}$targetSlug")) - - // Prefer compiler-produced klib; else zip unpacked dir. - from( - project.provider { - val klibFile = sourceKlibProvider.get().asFile - if (klibFile.isFile) project.zipTree(klibFile) else sourceDirProvider.get().asFile - } - ) - - // Skip if neither form exists (no such cinterop for this target). - onlyIf { - sourceKlibProvider.get().asFile.exists() || sourceDirProvider.get().asFile.exists() - } +private fun CopySpec.fromKlib(projectName: String, target: String, version: String) { + val pos = projectName.length + from("build${sep}classes${sep}kotlin${sep}${target}${sep}main${sep}cinterop") { + include("*.klib") + rename { + it.replaceRange(pos, pos, "-${target.lowercase()}-$version") } - - project.afterEvaluate { - val upstream = tasks.findByName(cinteropTaskName) - if (upstream != null) { - zipTask.configure { dependsOn(upstream) } - } + } + from("build${sep}classes${sep}kotlin${sep}${target}${sep}main${sep}klib") { + rename { + "$projectName-${target.lowercase()}-$version.klib" } - - from(zipTask) } } private fun CopySpec.renameModule(projectName: String, renameTo: String = "", version: String) { - val suffix = if (renameTo.isNotEmpty()) "-$renameTo" else "" - rename { it.replace("module.json", "$projectName$suffix-$version.module") } + var target = "" + if (renameTo.isNotEmpty()) { + target = "-$renameTo" + } + rename { + it.replace("module.json", "$projectName$target-$version.module") + } } private fun CopySpec.withJavadoc(projectName: String, renameTo: String = "") { include("*javadoc*") rename { fileName -> - if ("javadoc" in fileName) { - buildString { - append(fileName.substring(0, projectName.length)) - if (renameTo.isNotEmpty()) append('-').append(renameTo) - append(fileName.substring(projectName.length)) + when { + "javadoc" in fileName -> { + val newName = buildString { + append(fileName.substring(0, projectName.length)) + if (renameTo.isNotEmpty()) { + append('-') + append(renameTo) + } + append(fileName.substring(projectName.length)) + } + newName } - } else { - fileName + else -> fileName } } } From b1d21e59e3623b4cc795ace51f75e42f025ee5de Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Thu, 17 Jul 2025 16:41:51 +0200 Subject: [PATCH 28/30] Update --- buildSrc/src/main/java/Config.kt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index e0c14d49d..59684badd 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -1,12 +1,13 @@ object Config { val agpVersion = "7.4.2" - val kotlinVersion = "1.9.23" - val composeVersion = "1.6.1" + val kotlinVersion = "2.1.21" + val composePluginVersion = "1.8.0" val gradleMavenPublishPluginVersion = "0.18.0" val multiplatform = "multiplatform" val cocoapods = "native.cocoapods" val jetpackCompose = "org.jetbrains.compose" + val kotlinCompose = "org.jetbrains.kotlin.plugin.compose" val gradleMavenPublishPlugin = "com.vanniktech.maven.publish" val androidGradle = "com.android.library" val kotlinSerializationPlugin = "plugin.serialization" @@ -26,7 +27,7 @@ object Config { val detekt = "io.gitlab.arturbosch.detekt" val detektVersion = "1.22.0" val binaryCompatibility = "org.jetbrains.kotlinx.binary-compatibility-validator" - val binaryCompatibilityVersion = "0.13.1" + val binaryCompatibilityVersion = "0.18.0" } object Libs { @@ -59,9 +60,9 @@ object Config { val ktorClientOkHttp = "io.ktor:ktor-client-okhttp:2.3.6" val ktorClientDarwin = "io.ktor:ktor-client-darwin:2.3.6" - val roboelectric = "org.robolectric:robolectric:4.9" - val junitKtx = "androidx.test.ext:junit-ktx:1.1.5" - val mockitoCore = "org.mockito:mockito-core:5.4.0" + val roboelectric = "org.robolectric:robolectric:4.15.1" + val junitKtx = "androidx.test.ext:junit-ktx:1.2.1" + val mockitoCore = "org.mockito:mockito-core:5.18.0" } object Android { From 0a7ac5aabf7a2f0be625d49b5d2b615dfaa187c9 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 18 Jul 2025 12:30:44 +0200 Subject: [PATCH 29/30] Update `distZip` task to use the locally published artifacts via `publishToMavenLocal` (#425) * Update * Update * Update * Let CI run for testing * Update * Update * Update * Update * Update * Clean up * Update use maybeCreate always --- CHANGELOG.md | 6 + build.gradle.kts | 11 +- buildSrc/src/main/java/Publication.kt | 251 ++++---------------------- 3 files changed, 48 insertions(+), 220 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4dcbf90da..742fba85c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Internal + +- Update `distZip` task to use the locally published artifacts via `publishToMavenLocal` ([#425](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/425)) + ## 0.15.0 ### Enhancements diff --git a/build.gradle.kts b/build.gradle.kts index c794d01c0..28338309a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,16 +31,19 @@ subprojects { apply() val sep = File.separator + // The path where we want publishToMavenLocal to output the artifacts to + val buildPublishDir = "${project.layout.buildDirectory.get().asFile.path}${sep}sentry-local-publish$sep" configure { - this.configureForMultiplatform(this@subprojects) + configureForMultiplatform(this@subprojects, buildPublishDir) } tasks.named("distZip").configure { - this.dependsOn("publishToMavenLocal") - this.doLast { + System.setProperty("maven.repo.local", buildPublishDir) + dependsOn("publishToMavenLocal") + doLast { val distributionFilePath = - "${this.project.buildDir}${sep}distributions${sep}${this.project.name}-${this.project.version}.zip" + "${project.layout.buildDirectory.get().asFile.path}${sep}distributions${sep}${project.name}-${project.version}.zip" val file = File(distributionFilePath) if (!file.exists()) throw GradleException("Distribution file: $distributionFilePath does not exist") if (file.length() == 0L) throw GradleException("Distribution file: $distributionFilePath is empty") diff --git a/buildSrc/src/main/java/Publication.kt b/buildSrc/src/main/java/Publication.kt index 68fddaeb1..a983c0717 100644 --- a/buildSrc/src/main/java/Publication.kt +++ b/buildSrc/src/main/java/Publication.kt @@ -1,228 +1,47 @@ +import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.distribution.DistributionContainer -import org.gradle.api.file.CopySpec import java.io.File -val sep: String = File.separator +private val sep: String = File.separator -// configure distZip tasks for multiplatform -fun DistributionContainer.configureForMultiplatform(project: Project) { - val version = project.properties["versionName"].toString() - this.getByName("main").contents { - from("build${sep}publications${sep}kotlinMultiplatform") { - renameModule(project.name, version = version) - } - // The current Kotlin version doesn't generate this *-all.jar anymore. - // This is a placeholder for backwards compatibility with craft until we fix it there directly. - from("build${sep}libs") { - include("${project.name}-metadata-$version*") - rename { - it.replace("metadata-$version", "$version-all") - } - } - from("build${sep}kotlinToolingMetadata") { - rename { - it.replace( - "kotlin-tooling-metadata.json", - "${project.name}-$version-kotlin-tooling-metadata.json" - ) - } - } - from("build${sep}libs") { - include("${project.name}-kotlin*") - include("${project.name}-metadata*") - withJavadoc(project.name) - rename { - it.replace("multiplatform-kotlin", "multiplatform").replace("-metadata", "") - } - } - } - this.maybeCreate("android").contents { - from("build${sep}publications${sep}androidRelease") { - renameModule(project.name, "android", version) - } - from("build${sep}outputs${sep}aar${sep}${project.name}-release.aar") { - rename { - it.replace("-release", "-android-release") - } - } - from("build${sep}libs") { - include("*android*") - withJavadoc(project.name, "android") - } - } - this.maybeCreate("jvm").contents { - from("build${sep}publications${sep}jvm") { - renameModule(project.name, "jvm", version) - } - from("build${sep}libs$sep") { - include("*jvm*") - withJavadoc(project.name, "jvm") - } - } - this.maybeCreate("iosarm64").contents { - from("build${sep}publications${sep}iosArm64") { - renameModule(project.name, "iosarm64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-iosarm64*") - withJavadoc(project.name, "iosarm64") - } - fromKlib(project.name, "iosArm64", version) - } - this.maybeCreate("iosx64").contents { - from("build${sep}publications${sep}iosX64") { - renameModule(project.name, "iosx64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-iosx64*") - withJavadoc(project.name, "iosx64") - } - fromKlib(project.name, "iosX64", version) - } - this.maybeCreate("iossimulatorarm64").contents { - from("build${sep}publications${sep}iosSimulatorArm64") { - renameModule(project.name, "iossimulatorarm64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-iossimulatorarm64*") - withJavadoc(project.name, "iossimulatorarm64") - } - fromKlib(project.name, "iosSimulatorArm64", version) - } - this.maybeCreate("macosarm64").contents { - from("build${sep}publications${sep}macosArm64") { - renameModule(project.name, "macosarm64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-macosarm64*") - withJavadoc(project.name, "macosarm64") - } - fromKlib(project.name, "macosArm64", version) - } - this.maybeCreate("macosx64").contents { - from("build${sep}publications${sep}macosX64") { - renameModule(project.name, "macosx64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-macosx64*") - withJavadoc(project.name, "macosx64") - } - fromKlib(project.name, "macosX64", version) - } - this.maybeCreate("watchosx64").contents { - from("build${sep}publications${sep}watchosX64") { - renameModule(project.name, "watchosx64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-watchosx64*") - withJavadoc(project.name, "watchosx64") - } - fromKlib(project.name, "watchosX64", version) - } - this.maybeCreate("watchosarm32").contents { - from("build${sep}publications${sep}watchosArm32") { - renameModule(project.name, "watchosarm32", version) - } - from("build${sep}libs$sep") { - include("${project.name}-watchosarm32*") - withJavadoc(project.name, "watchosarm32") - } - fromKlib(project.name, "watchosArm32", version) - } - this.maybeCreate("watchosarm64").contents { - from("build${sep}publications${sep}watchosArm64") { - renameModule(project.name, "watchosarm64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-watchosarm64*") - withJavadoc(project.name, "watchosarm64") - } - fromKlib(project.name, "watchosArm64", version) - } - this.maybeCreate("watchossimulatorarm64").contents { - from("build${sep}publications${sep}watchosSimulatorArm64") { - renameModule(project.name, "watchossimulatorarm64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-watchossimulatorarm64*") - withJavadoc(project.name, "watchossimulatorarm64") - } - fromKlib(project.name, "watchosSimulatorArm64", version) - } - this.maybeCreate("tvosarm64").contents { - from("build${sep}publications${sep}tvosArm64") { - renameModule(project.name, "tvosarm64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-tvosarm64*") - withJavadoc(project.name, "tvosarm64") - } - fromKlib(project.name, "tvosArm64", version) - } - this.maybeCreate("tvosx64").contents { - from("build${sep}publications${sep}tvosX64") { - renameModule(project.name, "tvosx64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-tvosx64*") - withJavadoc(project.name, "tvosx64") - } - fromKlib(project.name, "tvosX64", version) - } - this.maybeCreate("tvossimulatorarm64").contents { - from("build${sep}publications${sep}tvosSimulatorArm64") { - renameModule(project.name, "tvossimulatorarm64", version) - } - from("build${sep}libs$sep") { - include("${project.name}-tvossimulatorarm64*") - withJavadoc(project.name, "tvossimulatorarm64") - } - fromKlib(project.name, "tvosSimulatorArm64", version) - } -} +fun DistributionContainer.configureForMultiplatform(project: Project, buildPublishDir: String) { + val version = project.property("versionName").toString() + if (version.isEmpty()) { + throw GradleException("DistZip: version name is empty") + } + val projectName = project.name + val platforms = mapOf( + "main" to projectName, + "android" to "$projectName-android", + "jvm" to "$projectName-jvm", + "iosarm64" to "$projectName-iosarm64", + "iossimulatorarm64" to "$projectName-iossimulatorarm64", + "iosx64" to "$projectName-iosx64", + "macosarm64" to "$projectName-macosarm64", + "macosx64" to "$projectName-macosx64", + "tvosarm64" to "$projectName-tvosarm64", + "tvossimulatorarm64" to "$projectName-tvossimulatorarm64", + "tvosx64" to "$projectName-tvosx64", + "watchosarm32" to "$projectName-watchosarm32", + "watchosarm64" to "$projectName-watchosarm64", + "watchossimulatorarm64" to "$projectName-watchossimulatorarm64", + "watchosx64" to "$projectName-watchosx64" + ) -private fun CopySpec.fromKlib(projectName: String, target: String, version: String) { - val pos = projectName.length - from("build${sep}classes${sep}kotlin${sep}${target}${sep}main${sep}cinterop") { - include("*.klib") - rename { - it.replaceRange(pos, pos, "-${target.lowercase()}-$version") - } - } - from("build${sep}classes${sep}kotlin${sep}${target}${sep}main${sep}klib") { - rename { - "$projectName-${target.lowercase()}-$version.klib" - } - } -} + platforms.forEach { (distName, projectName) -> + val distribution = maybeCreate(distName) + distribution.contents { + val basePath = "${buildPublishDir}io${sep}sentry${sep}$projectName$sep$version" -private fun CopySpec.renameModule(projectName: String, renameTo: String = "", version: String) { - var target = "" - if (renameTo.isNotEmpty()) { - target = "-$renameTo" - } - rename { - it.replace("module.json", "$projectName$target-$version.module") - } -} + // Rename the POM since craft looks for pom-default.xml + from("$basePath$sep$projectName-$version.pom") { + rename { "pom-default.xml" } + } -private fun CopySpec.withJavadoc(projectName: String, renameTo: String = "") { - include("*javadoc*") - rename { fileName -> - when { - "javadoc" in fileName -> { - val newName = buildString { - append(fileName.substring(0, projectName.length)) - if (renameTo.isNotEmpty()) { - append('-') - append(renameTo) - } - append(fileName.substring(projectName.length)) - } - newName + from(basePath) { + exclude("*.pom") } - else -> fileName } } } From 1915b7a7ccf7fe9400a2f5171407d72e81b3b019 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Fri, 18 Jul 2025 12:49:51 +0200 Subject: [PATCH 30/30] Update CHANGELOG.md --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 742fba85c..3d4f390f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +Potentially breaking: this release bumps the used Kotlin version to `2.1.21`. + +### Dependencies + +- Bump Kotlin from `1.9.23` to `2.1.21` ([#389](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/389/)) + ### Internal - Update `distZip` task to use the locally published artifacts via `publishToMavenLocal` ([#425](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/425)) @@ -25,7 +31,6 @@ ### Dependencies -- Bump Kotlin from `1.9.23` to `2.1.21` ([#389](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/389/)) - Bump Cocoa SDK from v8.49.1 to v8.53.1 ([#405](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/405)) - [changelog](https://github.com/getsentry/sentry-cocoa/blob/main/CHANGELOG.md#8531) - [diff](https://github.com/getsentry/sentry-cocoa/compare/8.49.1...8.53.1)