Thread
#multiplatform
    b

    Bradleycorn

    4 months ago
    Hi Again Everyone! 👋 Trying to setup Ktor and Coroutines in a KMM library project. I can’t sync, I keep getting errors that none of the dependencies can be resolved for the ios targets. Errors in the screenshot. My
    build.gradle.kts
    is posted in the 🧵 . Any Ideas? Google has been no help at all.
    import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework
    
    val ktorVersion = "1.6.1"
    
    buildscript {
        dependencies {
            classpath("org.jetbrains.kotlin:kotlin-serialization:1.6.21")
        }
    }
    
    plugins {
        kotlin("multiplatform") version "1.6.21"
        kotlin("native.cocoapods") version "1.6.21"
        kotlin("plugin.serialization") version "1.6.21"
        id("com.android.library")
    }
    
    
    
    group = "com.mylib"
    version = "1.0"
    
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
    
    kotlin {
        android()
    
        val xcFramework = XCFramework()
        listOf(
            iosX64(),
            iosArm64(),
            iosSimulatorArm64()
        ).forEach {
            it.binaries.framework {
                baseName = "MyLib"
                xcFramework.add(this)
            }
        }
    
        cocoapods {
            // Required properties
            // Specify the required Pod version here. Otherwise, the Gradle project version is used.
            // version = "1.0"
            summary = "Networking Library"
            homepage = "<https://github.com/myorg/my-lib>"
    
            // Optional properties
            // Configure the Pod name here instead of changing the Gradle project name
            name = "MyLib"
    
            framework {
                // Required properties
                // Framework name configuration. Use this property instead of deprecated 'frameworkName'
                baseName = "network"
    
                // Optional properties
                // Dynamic framework support
                isStatic = false
                // Dependency export
                //export(project(":anotherKMMModule"))
                //transitiveExport = false // This is default.
                // Bitcode embedding
                embedBitcode(org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode.BITCODE)
            }
    
            // Maps custom Xcode configuration to NativeBuildType
            xcodeConfigurationToNativeBuildType["CUSTOM_DEBUG"] = org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType.DEBUG
            xcodeConfigurationToNativeBuildType["CUSTOM_RELEASE"] = org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType.RELEASE
        }    
        
        
        sourceSets {
            val commonMain by getting {
                dependencies {
                    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0-native-mt")
                    implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.2.2")
                }
            }
            val commonTest by getting {
                dependencies {
                    implementation(kotlin("test"))
                }
            }
            val androidMain by getting {
                dependencies {
                    implementation("io.ktor:ktor-client-android:$ktorVersion")
                    implementation("io.ktor:ktor-client-core:$ktorVersion")
                    implementation("io.ktor:ktor-client-serialization:$ktorVersion")
                }
            }
            val androidTest by getting {
                dependencies {
                    implementation("junit:junit:4.13.2")
                }
            }
            val iosX64Main by getting
            val iosArm64Main by getting
            val iosSimulatorArm64Main by getting
            val iosMain by creating {
                dependsOn(commonMain)
                iosX64Main.dependsOn(this)
                iosArm64Main.dependsOn(this)
                iosSimulatorArm64Main.dependsOn(this)
    
                dependencies {
                    implementation("io.ktor:ktor-client-ios:$ktorVersion")
                }
    
            }
            val iosX64Test by getting
            val iosArm64Test by getting
            val iosSimulatorArm64Test by getting
            val iosTest by creating {
                dependsOn(commonTest)
                iosX64Test.dependsOn(this)
                iosArm64Test.dependsOn(this)
                iosSimulatorArm64Test.dependsOn(this)
            }
        }
    }
    
    android {
        compileSdkVersion(31)
        sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
        defaultConfig {
            minSdkVersion(24)
            targetSdkVersion(31)
        }
        compileOptions {
            sourceCompatibility = JavaVersion.VERSION_1_8
            targetCompatibility = JavaVersion.VERSION_1_8
        }
    }
    r

    Rick Clephas

    4 months ago
    This is probably because those library versions don't have the ARM64 targets yet. E.g. kotlinx.coroutines added support for the ARM64 targets in v1.5.2.