首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:不允许直接解析配置'ios32Api‘

错误:不允许直接解析配置'ios32Api‘
EN

Stack Overflow用户
提问于 2020-07-04 06:30:03
回答 1查看 35关注 0票数 0

我正在尝试在KMP中为iOS创建一个通用的框架。下面是我的模块build.gradle文件

代码语言:javascript
复制
import org.jetbrains.kotlin.gradle.tasks.FatFrameworkTask

buildscript {
    ext.serialization_version = "0.20.0"

    repositories {
        mavenCentral()
        jcenter()
        maven { url "https://dl.bintray.com/jetbrains/kotlin-native-dependencies" }
    }
}


repositories {
    mavenCentral()
    maven { url "https://kotlin.bintray.com/kotlinx" }
}

apply plugin: 'kotlin-multiplatform'
apply plugin: 'kotlinx-serialization'

def serialization_version = "0.20.0"

kotlin{
    targets {
        fromPreset(presets.jvm, 'android')
        iosArm32("ios32")
        iosArm64("ios64")
        iosX64("simulator")

        configure([ios32, ios64, simulator]) {
            binaries.framework('Shared')
        }


    }
    //we have 3 different sourceSets for common, android and iOS.
    //each sourceSet can have their own set of dependencies and configurations
    sourceSets {
        commonMain.dependencies {
            api 'org.jetbrains.kotlin:kotlin-stdlib-common'
            implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serialization_version"
        }

        androidMain.dependencies {
            api 'org.jetbrains.kotlin:kotlin-stdlib'
            implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$serialization_version"
        }


        iosMain {
            dependencies {
                implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:$serialization_version")
            }
        }

        ios32.dependencies {
            implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:$serialization_version")
        }
        ios64.dependencies {
            implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:$serialization_version")
        }
        simulator.dependencies {
            implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:$serialization_version")
        }


    }

    task fatFramework(type: FatFrameworkTask) {
        // the fat framework must have the same base name as the initial frameworks
        baseName = "Shared"

        final File frameworkDir = new File(buildDir, "xcode-frameworks")
        destinationDir = frameworkDir

        // specify the frameworks to be merged
        from(
                targets.ios32.binaries.getFramework('Shared', 'RELEASE'),
                targets.ios64.binaries.getFramework('Shared', 'RELEASE'),
                targets.simulator.binaries.getFramework('Shared', 'RELEASE')
        )

        doLast {
            new File(frameworkDir, 'gradlew').with {
                text = "#!/bin/bash\nexport 'JAVA_HOME=${System.getProperty("java.home")}'\ncd '${rootProject.rootDir}'\n./gradlew \$@\n"
                setExecutable(true)
            }
        }
    }


}
configurations {

    compileClasspath
}
tasks.build.dependsOn fatFramework

当我尝试构建我的模块时,它给我这个错误

代码语言:javascript
复制
Execution failed for task ':Shared:linkSharedReleaseFrameworkIos32'.
> Resolving configuration 'ios32Api' directly is not allowed

我的配置中是否遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2020-07-13 16:14:15

我无法重现这个错误,因为这个问题只是项目的一部分。因此,在修改它以使其作为一个单独的项目而不是一个模块工作时,我意外地丢失了原始问题。但以下是我对可能的原因的看法。

这段代码似乎缺少源集和目标之间的区别。我的意思是,由于有三个命名的目标ios32ios64simulator,kotlin-multiplatform插件创建了六个默认的源集:ios32Mainios64MainsimulatorMainios32Testios64TestsimulatorTest。但在这段代码中,我看到创建了名为ios32等的新源集,而不是设置默认值的依赖项。这可能是一个问题,因为在这些源集和声明的目标之间没有显式的连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62723384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档