gradle 未解析引用iosMainKotlin多平台

7eumitmz  于 2023-06-06  发布在  iOS
关注(0)|答案(1)|浏览(128)

我有一个其他KMM项目正在使用的Kotlin多平台库。我正在尝试构建其中一个KMM项目的iOS应用程序,但首先我需要将库二进制文件发布到Maven存储库。
当尝试构建iOS ARM 64二进制文件时,我使用的一个库的Unresolved reference失败了。它只在gradle任务compileIosMainKotlinMetadata上失败,构建项目工作得很好,但由于这个错误,我无法生成二进制文件。
这是我常用的多平台库设置gradle:(kotlin-multiplatform-lib-setup

plugins {
    kotlin("multiplatform")
    id("com.android.library")
}

kotlin {
    android {
        publishAllLibraryVariants()
    }
    ios()

    sourceSets {
         commonTest {
             dependencies {
                 implementation(kotlin("test-common"))
                 implementation(kotlin("test-annotations-common"))
             }
         }

        val androidTest by getting {
            dependencies {
                implementation(kotlin("test-junit"))
                implementation("junit:junit:4.13.2")
            }
        }
    }

    tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
        kotlinOptions.jvmTarget = "1.8"
    }
}

android {
    compileSdkVersion(31)

    defaultConfig {
        minSdkVersion(23)
        targetSdkVersion(31)
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }

    sourceSets {
        named("main") {
            manifest.srcFile("src/androidMain/AndroidManifest.xml")
            res.srcDirs("src/androidMain/res")
        }
    }
}

这是我正在开发的模块的build.gradle.kts:

plugins {
    id("kotlin-multiplatform-lib-setup")
    id("publish-setup")
}

publishing {
    publications.withType<MavenPublication> {
        groupId = "${Constants.artifactGroup}.architecture"
        artifactId = "core"
        version = Constants.artifactVersion
    }
}

kotlin {
    ios()

    sourceSets {
        commonMain {
            dependencies {
                implementation(Deps.Badoo.reaktive)
                implementation(Deps.Badoo.coroutinesInterop)
                implementation(Deps.KotlinX.Coroutines.core)
                implementation(Deps.uuid)
            }
        }

        commonTest {
            dependencies {
                implementation(Deps.Badoo.reaktive)
                implementation(Deps.KotlinX.Coroutines.core)
                implementation(Deps.Badoo.reaktiveTesting)
            }
        }

        iosMain {
            dependencies {
                implementation(Deps.Badoo.reaktive)
            }
        }
    }
}

我也试过加法没有结果

kotlin {
  ios {
        binaries {
            framework { 
                export(Deps.Badoo.reaktive)
                transitiveExport = true
            }
        }
    }
}
kognpnkq

kognpnkq1#

默认情况下,iosMain源集在模块的build.gradle中不可用。因此,不要将ios()添加到源集中,而是添加三个iOS配置

iosX64()
iosArm64()
iosSimulatorArm64()

并且,不要只为iosMain提供依赖关系,而是包括所有配置

iosMain {
    dependencies {
        implementation(Deps.Badoo.reaktive)
    }
}

不如这样,

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(Deps.Badoo.reaktive)
    }
}

通过这种方式,它添加了一个新的公共依赖项源集,用于处理所有iOS配置。

相关问题