diff --git a/.gitignore b/.gitignore index a3cb81a..0c4acc6 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ out/ # Gradle files .gradle/ +.kotlin/ build/ # Local configuration file (sdk path, etc) diff --git a/bugsnag-ios-link/build.gradle.kts b/bugsnag-ios-link/build.gradle.kts index 30ca78e..cda6164 100644 --- a/bugsnag-ios-link/build.gradle.kts +++ b/bugsnag-ios-link/build.gradle.kts @@ -13,7 +13,6 @@ plugins { `kotlin-dsl` - kotlin("jvm") id("java-gradle-plugin") id("com.vanniktech.maven.publish.base") id("com.gradle.plugin-publish") diff --git a/bugsnag-ios-link/src/main/kotlin/co/touchlab/crashkios/BugsnagLinkPlugin.kt b/bugsnag-ios-link/src/main/kotlin/co/touchlab/crashkios/BugsnagLinkPlugin.kt index 327d532..915eb2a 100644 --- a/bugsnag-ios-link/src/main/kotlin/co/touchlab/crashkios/BugsnagLinkPlugin.kt +++ b/bugsnag-ios-link/src/main/kotlin/co/touchlab/crashkios/BugsnagLinkPlugin.kt @@ -64,7 +64,9 @@ private fun KotlinMultiplatformExtension.crashLinkerConfig(linkerOpts: String) { val hasDynamicFrameworks = binaries.any { it is Framework && !it.isStatic } if (hasDynamicFrameworks) { - compilations.getByName("main").kotlinOptions.freeCompilerArgs += listOf("-linker-options", linkerOpts) + compilations.getByName("main").compileTaskProvider.configure { + compilerOptions.freeCompilerArgs.addAll("-linker-options", linkerOpts) + } } } } diff --git a/bugsnag/build.gradle.kts b/bugsnag/build.gradle.kts index 8a80d15..e74a79b 100644 --- a/bugsnag/build.gradle.kts +++ b/bugsnag/build.gradle.kts @@ -11,7 +11,6 @@ * the License. */ import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("com.android.library") @@ -106,7 +105,3 @@ android { targetCompatibility = JavaVersion.VERSION_1_8 } } - -tasks.withType { - kotlinOptions.jvmTarget = "1.8" -} diff --git a/bugsnag/src/androidMain/kotlin/co/touchlab/crashkios/bugsnag/BugsnagCallsActual.kt b/bugsnag/src/androidMain/kotlin/co/touchlab/crashkios/bugsnag/BugsnagCallsActual.kt index b0e7a52..3bf7f7f 100644 --- a/bugsnag/src/androidMain/kotlin/co/touchlab/crashkios/bugsnag/BugsnagCallsActual.kt +++ b/bugsnag/src/androidMain/kotlin/co/touchlab/crashkios/bugsnag/BugsnagCallsActual.kt @@ -3,19 +3,19 @@ package co.touchlab.crashkios.bugsnag import com.bugsnag.android.Bugsnag actual class BugsnagCallsActual : BugsnagCalls { - override fun logMessage(message: String) { + actual override fun logMessage(message: String) { Bugsnag.leaveBreadcrumb(message) } - override fun sendHandledException(throwable: Throwable) { + actual override fun sendHandledException(throwable: Throwable) { Bugsnag.notify(throwable) } - override fun sendFatalException(throwable: Throwable) { + actual override fun sendFatalException(throwable: Throwable) { Bugsnag.notify(throwable) } - override fun setCustomValue(section: String, key: String, value: Any) { + actual override fun setCustomValue(section: String, key: String, value: Any) { Bugsnag.addMetadata(section, key, value) } } diff --git a/bugsnag/src/appleMain/kotlin/co/touchlab/crashkios/bugsnag/BugsnagCallsActual.kt b/bugsnag/src/appleMain/kotlin/co/touchlab/crashkios/bugsnag/BugsnagCallsActual.kt index 36c9d43..e331a17 100644 --- a/bugsnag/src/appleMain/kotlin/co/touchlab/crashkios/bugsnag/BugsnagCallsActual.kt +++ b/bugsnag/src/appleMain/kotlin/co/touchlab/crashkios/bugsnag/BugsnagCallsActual.kt @@ -6,19 +6,19 @@ import kotlinx.cinterop.ExperimentalForeignApi @OptIn(ExperimentalForeignApi::class) actual class BugsnagCallsActual : BugsnagCalls { - override fun logMessage(message: String) { + actual override fun logMessage(message: String) { Bugsnag.leaveBreadcrumbWithMessage(message) } - override fun sendHandledException(throwable: Throwable) { + actual override fun sendHandledException(throwable: Throwable) { sendException(throwable, true) } - override fun sendFatalException(throwable: Throwable) { + actual override fun sendFatalException(throwable: Throwable) { sendException(throwable, false) } - override fun setCustomValue(section: String, key: String, value: Any) { + actual override fun setCustomValue(section: String, key: String, value: Any) { Bugsnag.addMetadata(value, key, section) } diff --git a/bugsnag/src/commonMain/kotlin/co/touchlab/crashkios/bugsnag/BugsnagCalls.kt b/bugsnag/src/commonMain/kotlin/co/touchlab/crashkios/bugsnag/BugsnagCalls.kt index c49affa..59daed1 100644 --- a/bugsnag/src/commonMain/kotlin/co/touchlab/crashkios/bugsnag/BugsnagCalls.kt +++ b/bugsnag/src/commonMain/kotlin/co/touchlab/crashkios/bugsnag/BugsnagCalls.kt @@ -10,4 +10,9 @@ interface BugsnagCalls { fun setCustomValue(section: String, key: String, value: Any) } -expect class BugsnagCallsActual() : BugsnagCalls +expect class BugsnagCallsActual() : BugsnagCalls { + override fun logMessage(message: String) + override fun sendHandledException(throwable: Throwable) + override fun sendFatalException(throwable: Throwable) + override fun setCustomValue(section: String, key: String, value: Any) +} diff --git a/build.gradle.kts b/build.gradle.kts index 9509351..11fd7a5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,6 @@ plugins { alias(libs.plugins.kotlin.multiplatform) apply false alias(libs.plugins.maven.publish) apply false alias(libs.plugins.android.library) apply false - alias(libs.plugins.touchlab.docusaurus.template) alias(libs.plugins.gradle.publish) apply false id("org.jlleitschuh.gradle.ktlint") version "12.2.0" apply false } @@ -31,4 +30,4 @@ subprojects { dependsOn(tasks.getByName("ktlintCheck")) } } -} \ No newline at end of file +} diff --git a/core/build.gradle.kts b/core/build.gradle.kts index bcabf0b..09d95ad 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -11,7 +11,6 @@ * the License. */ import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("com.android.library") @@ -79,8 +78,4 @@ android { } } -tasks.withType { - kotlinOptions.jvmTarget = "1.8" -} - apply(plugin = "com.vanniktech.maven.publish") diff --git a/core/src/appleMain/kotlin/co/touchlab/crashkios/core/ThreadSafeVar.kt b/core/src/appleMain/kotlin/co/touchlab/crashkios/core/ThreadSafeVar.kt index 7206dfc..8fa40f4 100644 --- a/core/src/appleMain/kotlin/co/touchlab/crashkios/core/ThreadSafeVar.kt +++ b/core/src/appleMain/kotlin/co/touchlab/crashkios/core/ThreadSafeVar.kt @@ -1,20 +1,14 @@ package co.touchlab.crashkios.core import kotlin.concurrent.AtomicReference -import kotlin.experimental.ExperimentalNativeApi -import kotlin.native.concurrent.freeze import kotlin.reflect.KProperty -@OptIn(FreezingIsDeprecated::class, ExperimentalNativeApi::class) actual class ThreadSafeVar actual constructor(target: T) { private val atom = AtomicReference(target) actual operator fun getValue(thisRef: Any?, property: KProperty<*>): T = atom.value actual operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) { - if (Platform.memoryModel == MemoryModel.STRICT) { - value.freeze() - } atom.value = value } } diff --git a/crashlytics-ios-link/build.gradle.kts b/crashlytics-ios-link/build.gradle.kts index 4885b4e..7b583b2 100644 --- a/crashlytics-ios-link/build.gradle.kts +++ b/crashlytics-ios-link/build.gradle.kts @@ -12,7 +12,6 @@ */ plugins { `kotlin-dsl` - kotlin("jvm") id("java-gradle-plugin") id("com.vanniktech.maven.publish.base") id("com.gradle.plugin-publish") diff --git a/crashlytics-ios-link/src/main/kotlin/co/touchlab/crashkios/CrashlyticsLinkPlugin.kt b/crashlytics-ios-link/src/main/kotlin/co/touchlab/crashkios/CrashlyticsLinkPlugin.kt index b9f5919..a59ebc5 100644 --- a/crashlytics-ios-link/src/main/kotlin/co/touchlab/crashkios/CrashlyticsLinkPlugin.kt +++ b/crashlytics-ios-link/src/main/kotlin/co/touchlab/crashkios/CrashlyticsLinkPlugin.kt @@ -59,7 +59,9 @@ private fun KotlinMultiplatformExtension.crashLinkerConfig(linkerOpts: String) { val hasDynamicFrameworks = binaries.any { it is Framework && !it.isStatic } if (hasDynamicFrameworks) { - compilations.getByName("main").kotlinOptions.freeCompilerArgs += listOf("-linker-options", linkerOpts) + compilations.getByName("main").compileTaskProvider.configure { + compilerOptions.freeCompilerArgs.addAll("-linker-options", linkerOpts) + } } } } diff --git a/crashlytics/build.gradle.kts b/crashlytics/build.gradle.kts index cccdeba..db207a0 100644 --- a/crashlytics/build.gradle.kts +++ b/crashlytics/build.gradle.kts @@ -11,7 +11,6 @@ * the License. */ import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("com.android.library") @@ -104,7 +103,3 @@ android { targetCompatibility = JavaVersion.VERSION_1_8 } } - -tasks.withType { - kotlinOptions.jvmTarget = "1.8" -} diff --git a/crashlytics/src/androidMain/kotlin/co/touchlab/crashkios/crashlytics/CrashlyticsCallsActual.kt b/crashlytics/src/androidMain/kotlin/co/touchlab/crashkios/crashlytics/CrashlyticsCallsActual.kt index b8a8c4b..bad5a10 100644 --- a/crashlytics/src/androidMain/kotlin/co/touchlab/crashkios/crashlytics/CrashlyticsCallsActual.kt +++ b/crashlytics/src/androidMain/kotlin/co/touchlab/crashkios/crashlytics/CrashlyticsCallsActual.kt @@ -3,19 +3,19 @@ package co.touchlab.crashkios.crashlytics import com.google.firebase.crashlytics.FirebaseCrashlytics actual class CrashlyticsCallsActual : CrashlyticsCalls { - override fun logMessage(message: String) { + actual override fun logMessage(message: String) { FirebaseCrashlytics.getInstance().log(message) } - override fun sendHandledException(throwable: Throwable) { + actual override fun sendHandledException(throwable: Throwable) { FirebaseCrashlytics.getInstance().recordException(throwable) } - override fun sendFatalException(throwable: Throwable) { + actual override fun sendFatalException(throwable: Throwable) { FirebaseCrashlytics.getInstance().recordException(throwable) } - override fun setCustomValue(key: String, value: Any) { + actual override fun setCustomValue(key: String, value: Any) { when (value) { is Boolean -> FirebaseCrashlytics.getInstance().setCustomKey(key, value) is Double -> FirebaseCrashlytics.getInstance().setCustomKey(key, value) @@ -29,7 +29,7 @@ actual class CrashlyticsCallsActual : CrashlyticsCalls { } } - override fun setUserId(identifier: String) { + actual override fun setUserId(identifier: String) { FirebaseCrashlytics.getInstance().setUserId(identifier) } } diff --git a/crashlytics/src/appleMain/kotlin/co/touchlab/crashkios/crashlytics/CrashlyticsCallsActual.kt b/crashlytics/src/appleMain/kotlin/co/touchlab/crashkios/crashlytics/CrashlyticsCallsActual.kt index 7e3809b..caf6ed5 100644 --- a/crashlytics/src/appleMain/kotlin/co/touchlab/crashkios/crashlytics/CrashlyticsCallsActual.kt +++ b/crashlytics/src/appleMain/kotlin/co/touchlab/crashkios/crashlytics/CrashlyticsCallsActual.kt @@ -12,12 +12,12 @@ actual class CrashlyticsCallsActual : CrashlyticsCalls { FIRCheckLinkDependencies() } - override fun logMessage(message: String) { + actual override fun logMessage(message: String) { FIRCrashlyticsLog(message) } @OptIn(UnsafeNumber::class) - override fun sendHandledException(throwable: Throwable) { + actual override fun sendHandledException(throwable: Throwable) { val exceptionClassName = throwable::class.qualifiedName ?: throwable::class.simpleName ?: "kotlin.Throwable" FIRCrashlyticsRecordHandledException( exceptionClassName, @@ -28,18 +28,18 @@ actual class CrashlyticsCallsActual : CrashlyticsCalls { ) } - override fun sendFatalException(throwable: Throwable) { + actual override fun sendFatalException(throwable: Throwable) { val exception = throwable.asNSException(true) // The recorded exception is persisted, so we can safely terminate afterwards. // https://github.com/firebase/firebase-ios-sdk/blob/82f163bd86566f83c5d7572a1c2c0024a04eb4dc/Crashlytics/Crashlytics/Handlers/FIRCLSException.mm#L227 tryFIRCLSExceptionRecordNSException(exception) } - override fun setCustomValue(key: String, value: Any) { + actual override fun setCustomValue(key: String, value: Any) { FIRCrashlyticsSetCustomValue(key, value) } - override fun setUserId(identifier: String) { + actual override fun setUserId(identifier: String) { FIRCrashlyticsSetUserID(identifier) } } diff --git a/crashlytics/src/commonMain/kotlin/co/touchlab/crashkios/crashlytics/CrashlyticsCalls.kt b/crashlytics/src/commonMain/kotlin/co/touchlab/crashkios/crashlytics/CrashlyticsCalls.kt index 454b99f..99760ce 100644 --- a/crashlytics/src/commonMain/kotlin/co/touchlab/crashkios/crashlytics/CrashlyticsCalls.kt +++ b/crashlytics/src/commonMain/kotlin/co/touchlab/crashkios/crashlytics/CrashlyticsCalls.kt @@ -8,4 +8,10 @@ interface CrashlyticsCalls { fun setUserId(identifier: String) } -expect class CrashlyticsCallsActual() : CrashlyticsCalls +expect class CrashlyticsCallsActual() : CrashlyticsCalls { + override fun logMessage(message: String) + override fun sendHandledException(throwable: Throwable) + override fun sendFatalException(throwable: Throwable) + override fun setCustomValue(key: String, value: Any) + override fun setUserId(identifier: String) +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 71359ca..ecacc06 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,12 +1,12 @@ [versions] ## SDK Versions minSdk = "21" -targetSdk = "34" -compileSdk = "34" +targetSdk = "35" +compileSdk = "35" # Dependencies -kotlin = "1.9.24" -android-gradle-plugin = "8.2.1" +kotlin = "2.2.10" +android-gradle-plugin = "8.10.0" mavenPublish = "0.29.0" touchlab-docusaurus-template = "0.1.10" gradlePublish = "1.2.1" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3fa8f86..e2847c8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle.kts b/settings.gradle.kts index 40e850c..a17dd5e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,8 +1,8 @@ include(":core") include(":bugsnag") -include(":bugsnag-ios-link") include(":crashlytics") -include(":crashlytics-ios-link") +include("bugsnag-ios-link") +include("crashlytics-ios-link") pluginManagement { repositories { @@ -14,5 +14,5 @@ pluginManagement { } plugins { - id("org.gradle.toolchains.foojay-resolver-convention") version("0.8.0") + id("org.gradle.toolchains.foojay-resolver-convention") version ("0.8.0") }