diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 13da4bc9..f08d7b9f 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -64,7 +64,10 @@ jobs: ios-tests: name: iOS Tests - runs-on: macos-latest + # Use macos-26 for Xcode 26 (default 26.2) which ships the iOS 26 SDK. + # Compose Multiplatform 1.11+ references iOS 26 APIs (UIViewLayoutRegion) + # that are not present in the iOS 18 SDK bundled with Xcode 16.x. + runs-on: macos-26 steps: - uses: actions/checkout@v6 diff --git a/ai/discover/src/main/kotlin/com/linroid/ketch/ai/ResourceDiscoveryService.kt b/ai/discover/src/main/kotlin/com/linroid/ketch/ai/ResourceDiscoveryService.kt index ad283cbb..c3fe53fa 100644 --- a/ai/discover/src/main/kotlin/com/linroid/ketch/ai/ResourceDiscoveryService.kt +++ b/ai/discover/src/main/kotlin/com/linroid/ketch/ai/ResourceDiscoveryService.kt @@ -2,7 +2,6 @@ package com.linroid.ketch.ai import ai.koog.agents.core.agent.AIAgent import ai.koog.agents.core.tools.ToolRegistry -import ai.koog.agents.core.tools.reflect.tools import ai.koog.prompt.executor.clients.openai.OpenAIModels import ai.koog.prompt.executor.llms.all.simpleOpenAIExecutor import com.linroid.ketch.ai.agent.AgentOutputParser diff --git a/app/shared/build.gradle.kts b/app/shared/build.gradle.kts index 2dcb48fa..9c350ede 100644 --- a/app/shared/build.gradle.kts +++ b/app/shared/build.gradle.kts @@ -1,5 +1,6 @@ import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget plugins { alias(libs.plugins.kotlinMultiplatform) @@ -10,7 +11,7 @@ plugins { } kotlin { - androidLibrary { + android { namespace = "com.linroid.ketch.app.shared" compileSdk = libs.versions.android.compileSdk.get().toInt() minSdk = libs.versions.android.minSdk.get().toInt() @@ -30,6 +31,22 @@ kotlin { } } + // Compose Multiplatform 1.11+ references iOS 18 APIs (e.g. UIViewLayoutRegion in + // compose-ui-uikit) and dnssd 1.1.0 is built for iOS 15+. Kotlin/Native defaults to + // iOS 14.0, which causes link failures and missing back-deployment dylib lookups at + // runtime. Override the minimum iOS version to 18.0. + targets.withType().configureEach { + compilations.configureEach { + compileTaskProvider.configure { + compilerOptions.freeCompilerArgs.add( + "-Xoverride-konan-properties=" + + "osVersionMin.ios_arm64=18.0;" + + "osVersionMin.ios_simulator_arm64=18.0", + ) + } + } + } + jvm() @OptIn(ExperimentalWasmDsl::class) diff --git a/config/build.gradle.kts b/config/build.gradle.kts index 515c0109..04a77e43 100644 --- a/config/build.gradle.kts +++ b/config/build.gradle.kts @@ -10,7 +10,7 @@ plugins { } kotlin { - androidLibrary { + android { namespace = "com.linroid.ketch.config" compileSdk = libs.versions.android.compileSdk.get().toInt() minSdk = libs.versions.android.minSdk.get().toInt() diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d67b968a..a86b7731 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,36 +1,36 @@ [versions] -agp = "9.0.1" -android-compileSdk = "36" +agp = "9.2.1" +android-compileSdk = "37" android-minSdk = "26" android-targetSdk = "36" -androidx-activity = "1.12.4" +androidx-activity = "1.13.0" androidx-appcompat = "1.7.1" -androidx-core = "1.17.0" +androidx-core = "1.18.0" androidx-startup = "1.2.0" androidx-espresso = "3.7.0" -androidx-lifecycle = "2.9.6" +androidx-lifecycle = "2.10.0" androidx-testExt = "1.3.0" -composeHotReload = "1.0.0" -composeMultiplatform = "1.10.1" -dnssd = "1.0.5" +composeHotReload = "1.1.1" +composeMultiplatform = "1.11.0" +dnssd = "1.1.0" junit = "4.13.2" -kotlin = "2.3.10" -kotlinx-coroutines = "1.10.2" -kotlinx-serialization = "1.10.0" +kotlin = "2.3.21" +kotlinx-coroutines = "1.11.0" +kotlinx-serialization = "1.11.0" okio = "3.16.4" kotlinx-datetime = "0.7.1" -kermit = "2.0.8" -koog = "0.6.3" +kermit = "2.1.0" +koog = "0.8.0" libtorrent4j = "2.1.0-39" kotlinx-browser = "0.5.0" ktoml = "0.7.1" -ktor = "3.4.0" -sqldelight = "2.2.1" -graalvmNative = "0.11.4" +ktor = "3.5.0" +sqldelight = "2.3.2" +graalvmNative = "1.1.0" mavenPublish = "0.36.0" logback = "1.5.32" -material3 = "1.10.0-alpha05" -material3-adaptive = "1.3.0-alpha05" +material3 = "1.11.0-alpha07" +material3-adaptive = "1.3.0-alpha07" [libraries] dnssd = { module = "com.appstractive:dns-sd-kt", version.ref = "dnssd" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5f38436f..317a32cf 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-9.3.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/library/api/build.gradle.kts b/library/api/build.gradle.kts index 92295a10..ace17729 100644 --- a/library/api/build.gradle.kts +++ b/library/api/build.gradle.kts @@ -38,7 +38,7 @@ val generateVersion by tasks.registering { } kotlin { - androidLibrary { + android { namespace = "com.linroid.ketch.api" compileSdk = libs.versions.android.compileSdk.get().toInt() minSdk = libs.versions.android.minSdk.get().toInt() diff --git a/library/core/build.gradle.kts b/library/core/build.gradle.kts index 2c1e9c43..7142fdc2 100644 --- a/library/core/build.gradle.kts +++ b/library/core/build.gradle.kts @@ -20,7 +20,7 @@ kotlin { ) } - androidLibrary { + android { namespace = "com.linroid.ketch.core" compileSdk = libs.versions.android.compileSdk.get().toInt() minSdk = libs.versions.android.minSdk.get().toInt() diff --git a/library/endpoints/build.gradle.kts b/library/endpoints/build.gradle.kts index 9d7b0259..1aaeb462 100644 --- a/library/endpoints/build.gradle.kts +++ b/library/endpoints/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } kotlin { - androidLibrary { + android { namespace = "com.linroid.ketch.endpoints" compileSdk = libs.versions.android.compileSdk.get().toInt() minSdk = libs.versions.android.minSdk.get().toInt() diff --git a/library/ftp/build.gradle.kts b/library/ftp/build.gradle.kts index 385b546d..0ce24343 100644 --- a/library/ftp/build.gradle.kts +++ b/library/ftp/build.gradle.kts @@ -12,7 +12,7 @@ plugins { } kotlin { - androidLibrary { + android { namespace = "com.linroid.ketch.ftp" compileSdk = libs.versions.android.compileSdk.get().toInt() minSdk = libs.versions.android.minSdk.get().toInt() diff --git a/library/kermit/build.gradle.kts b/library/kermit/build.gradle.kts index 91032aea..e7e5032c 100644 --- a/library/kermit/build.gradle.kts +++ b/library/kermit/build.gradle.kts @@ -10,7 +10,7 @@ plugins { } kotlin { - androidLibrary { + android { namespace = "com.linroid.ketch.kermit" compileSdk = libs.versions.android.compileSdk.get().toInt() minSdk = libs.versions.android.minSdk.get().toInt() diff --git a/library/ktor/build.gradle.kts b/library/ktor/build.gradle.kts index 3912019c..22d14618 100644 --- a/library/ktor/build.gradle.kts +++ b/library/ktor/build.gradle.kts @@ -10,7 +10,7 @@ plugins { } kotlin { - androidLibrary { + android { namespace = "com.linroid.ketch.ktor" compileSdk = libs.versions.android.compileSdk.get().toInt() minSdk = libs.versions.android.minSdk.get().toInt() diff --git a/library/mcp/src/main/kotlin/com/linroid/ketch/mcp/KetchMcpServer.kt b/library/mcp/src/main/kotlin/com/linroid/ketch/mcp/KetchMcpServer.kt index dc730a8e..3924a9d4 100644 --- a/library/mcp/src/main/kotlin/com/linroid/ketch/mcp/KetchMcpServer.kt +++ b/library/mcp/src/main/kotlin/com/linroid/ketch/mcp/KetchMcpServer.kt @@ -1,7 +1,6 @@ package com.linroid.ketch.mcp import ai.koog.agents.core.tools.ToolRegistry -import ai.koog.agents.core.tools.reflect.tools import ai.koog.agents.mcp.server.startSseMcpServer import ai.koog.agents.mcp.server.startStdioMcpServer import com.linroid.ketch.api.KetchApi diff --git a/library/remote/build.gradle.kts b/library/remote/build.gradle.kts index 171c7aa7..df1b928e 100644 --- a/library/remote/build.gradle.kts +++ b/library/remote/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } kotlin { - androidLibrary { + android { namespace = "com.linroid.ketch.remote" compileSdk = libs.versions.android.compileSdk.get().toInt() minSdk = libs.versions.android.minSdk.get().toInt() diff --git a/library/sqlite/build.gradle.kts b/library/sqlite/build.gradle.kts index 0166a70a..9ee64af3 100644 --- a/library/sqlite/build.gradle.kts +++ b/library/sqlite/build.gradle.kts @@ -10,7 +10,7 @@ plugins { } kotlin { - androidLibrary { + android { namespace = "com.linroid.ketch.sqlite" compileSdk = libs.versions.android.compileSdk.get().toInt() minSdk = libs.versions.android.minSdk.get().toInt() diff --git a/library/torrent/build.gradle.kts b/library/torrent/build.gradle.kts index 92f0bc34..d34f49c8 100644 --- a/library/torrent/build.gradle.kts +++ b/library/torrent/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } kotlin { - androidLibrary { + android { namespace = "com.linroid.ketch.torrent" compileSdk = libs.versions.android.compileSdk.get().toInt() minSdk = libs.versions.android.minSdk.get().toInt()