| name | kotlin-multiplatform |
| description | Kotlin Multiplatform - shared code, expect/actual, iOS integration |
| version | 1.0.0 |
| sasmp_version | 1.3.0 |
| bonded_agent | 04-kotlin-multiplatform |
| bond_type | PRIMARY_BOND |
| execution | {"timeout_ms":30000,"retry":{"max_attempts":3,"backoff":"exponential","initial_delay_ms":1000}} |
| parameters | {"required":[{"name":"target","type":"string","validation":"^(setup|shared|expect_actual|ios)$"}],"optional":[{"name":"platforms","type":"array","default":["android","ios"]}]} |
| logging | {"level":"info","events":["skill_invoked","target_loaded","error_occurred"]} |
Kotlin Multiplatform Skill
Build cross-platform applications with shared Kotlin code.
Topics Covered
Project Setup
kotlin {
androidTarget()
listOf(iosX64(), iosArm64(), iosSimulatorArm64()).forEach {
it.binaries.framework { baseName = "Shared"; isStatic = true }
}
sourceSets {
commonMain.dependencies {
implementation("io.ktor:ktor-client-core:2.3.8")
}
androidMain.dependencies { implementation("io.ktor:ktor-client-okhttp:2.3.8") }
iosMain.dependencies { implementation("io.ktor:ktor-client-darwin:2.3.8") }
}
}
expect/actual
expect class SecureStorage { fun get(key: String): String? }
actual class SecureStorage { actual fun get(key: String) = prefs.getString(key, null) }
actual class SecureStorage { actual fun get(key: String) = KeychainWrapper.get(key) }
Troubleshooting
| Issue | Resolution |
|---|
| "No actual for expect" | Add implementation in platform source set |
| iOS framework not found | Run linkDebugFrameworkIos task |
Usage
Skill("kotlin-multiplatform")