为什么Kotlin多平台不执行和导出iOS框架?

时间:2018-12-31 08:29:33

标签: kotlin kotlin-native kotlin-multiplatform

我开始开发kotlin多平台,并开发了一个简单的lib进行测试。我可以为Android导出.jar文件,但不能为iOS导出.framework文件。 我查看了其他项目,但没有找到问题。

我的Gradle lib脚本是:

apply plugin: 'kotlin-multiplatform'

kotlin {
targets {
    final def iOSTarget = 
    System.getenv('SDK_NAME')?.startsWith("iphoneos") \
                          ? presets.iosArm64 : presets.iosX64

    fromPreset(iOSTarget, 'iOS') {
        compilations.main.outputKinds('FRAMEWORK')
    }

    fromPreset(presets.jvm, 'android')
}

sourceSets {
    core.dependencies {
        api 'org.jetbrains.kotlin:kotlin-stdlib-common'
    }

    android.dependencies {
        api 'org.jetbrains.kotlin:kotlin-stdlib'
    }
}

2 个答案:

答案 0 :(得分:0)

您是否添加了构建实际框架的任务?如果没有,请尝试在您的build.gradle文件末尾添加以下代码:

task packForXCode(type: Sync) {
    final File frameworkDir = new File(buildDir, "xcode-frameworks")
    final String mode = project.findProperty("XCODE_CONFIGURATION")?.toUpperCase() ?: 'DEBUG'

    inputs.property "mode", mode
    dependsOn kotlin.targets.iOS.compilations.main.linkTaskName("FRAMEWORK", mode)

    from { kotlin.targets.iOS.compilations.main.getBinary("FRAMEWORK", mode).parentFile }
    into frameworkDir

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

tasks.build.dependsOn packForXCode

iOS框架将在库的build/xcode-frameworks目录中可用。

您还必须配置Xcode项目以使用该框架。有关更多详细信息,请阅读Setting up Framework Dependency in Xcode

答案 1 :(得分:0)

“导出框架”是什么意思?您要从另一个Gradle项目,XCode还是其他方式使用它?

P.S。很抱歉要求您回答:声誉不足,无法发表评论。因此,我认为在GitHub上讨论您遇到的问题会更方便。