почему мультиплатформа kotlin не выполняет и не экспортирует фреймворк iOS - PullRequest
0 голосов
/ 31 декабря 2018

Я начал разрабатывать мультиплатформу kotlin и разработал простой lib для тестирования.Я могу экспортировать .jar файл для Android, но я не могу экспортировать .framework файл для iOS.Я рассмотрел другой проект, но не нашел своей проблемы.

мой 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 голосов
/ 03 января 2019

Что вы подразумеваете под "экспортом фреймворка"?Собираетесь ли вы использовать его из другого проекта Gradle или из XCode или из чего-то еще?

PS Извините, что спрашиваю в ответах: просто не хватает репутации, чтобы оставить комментарий.Поэтому я думаю, что было бы удобнее обсудить вашу проблему в вопросах на GitHub .

0 голосов
/ 02 января 2019

Вы добавили задачу для создания реальной структуры?Если нет, попробуйте добавить этот код в конец файла 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 вашей библиотеки.

You 'Вам придется также настроить ваш проект XCode для использования фреймворка.Для получения дополнительной информации вы можете прочитать Настройка зависимости платформы в Xcode .

...