【问题标题】:why kotlin multiplatform don't execute and export iOS framework?为什么 kotlin multiplatform 不执行和导出 iOS 框架?
【发布时间】:2019-05-27 20:32:17
【问题描述】:

我开始开发 kotlin 多平台,并开发了一个简单的测试库。我可以为 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'
    }
}

【问题讨论】:

    标签: kotlin kotlin-native kotlin-multiplatform


    【解决方案1】:

    您是否添加了构建实际框架的任务?如果没有,请尝试在您的 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

    【讨论】:

    • 没有错误信息。只是不要为 iOS 导出任何内容。
    • @AlirezaTarazani。没有错误信息?我对此表示怀疑,但请确保任务已实际执行。
    • 添加packForXCode后,您是否正在运行./gradlew :common:packForXCode(假设您的build.gradle位于名为common的目录中)。我可以使用此处发布的代码并运行此命令来使其正常工作。
    • 我在运行 ./gradlew :shared:packForXCode 时收到“在项目中找不到路径为 'linkMainDebugFrameworkIOS' 的任务”。有什么提示吗?
    • 解决了我自己的问题!:packForXCode 和 gradle 中的框架名称不同。
    【解决方案2】:

    “导出框架”是什么意思?您打算从另一个 Gradle 项目、XCode 或其他项目中使用它吗?

    附:很抱歉在回答中提问:只是没有足够的声誉来发表评论。所以我认为在GitHub讨论你的问题会更方便。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 2021-03-19
      • 2011-01-24
      相关资源
      最近更新 更多