Создание / импорт Kotlin мультиплатформенного кода для iOS - PullRequest
0 голосов
/ 06 февраля 2020

Я пробую kotlin мультиплатформу, и у меня есть общая часть сборки и протестирована в Android и работает нормально, но сейчас я пытаюсь реализовать код в iOS, чтобы попробовать. Я вижу задачу gradle в моей build.gradle для iOS.

// This task attaches native framework built from ios module to Xcode project
// (see iosApp directory). Don't run this task directly,
// Xcode runs this task itself during its build process.
// Before opening the project from iosApp directory in Xcode,
// make sure all Gradle infrastructure exists (gradle.wrapper, gradlew).
task copyFramework {
    def buildType = project.findProperty('kotlin.build.type') ?: 'DEBUG'
    def target = project.findProperty('kotlin.target') ?: 'ios'
    dependsOn kotlin.targets."$target".binaries.getFramework(buildType).linkTask

    doLast {
        def srcFile = kotlin.targets."$target".binaries.getFramework(buildType).outputFile
        def targetDir = getProperty('configuration.build.dir')
        copy {
            from srcFile.parent
            into targetDir
            include 'app.framework/**'
            include 'app.framework.dSYM'
        }
    }
}

. В ней говорится, что задача не запускается напрямую, но согласно этому руководству говорится, что она запускается напрямую. Когда я запускаю его напрямую, я получаю сообщение об ошибке:

Не удалось выполнить задачу ': app: copyFramework'.

Не удалось получить неизвестное свойство 'configuration.build.dir 'for task': app: copyFramework 'типа org.gradle.api.DefaultTask.

Я не знаю, что мне нужно сделать, чтобы построить это для iOS.

Может ли кто-нибудь помочь мне здесь, что делать?

1 Ответ

1 голос
/ 06 февраля 2020

Прежде всего, давайте выясним, что здесь происходит. Поскольку вы должны использовать проект Xcode для реализации окончательного приложения для iOS, фреймворк должен быть каким-то образом добавлен туда во время сборки. Здесь вы смешиваете два подхода:

  1. Задача copyFramework, которая должна быть запущена как этап сборки процесса сборки Xcode. Он копирует созданные рамки в каталог Frameworks, чтобы сделать его доступным из кода Objective- C или Swift. Чтобы узнать, где она находится, эта задача зависит от переменных среды, которые Xcode устанавливает при выполнении сборки. Вот почему вы получаете ошибку здесь.
  2. Задача из руководства немного отличается от первой. Главное здесь заключается в том, что packForXcode копирует фреймворк в назначенный каталог ../../SharedCode/build/xcode-frameworks, и проект Xcode уже настроен на получение фреймворков оттуда (см. эта строка ). Следовательно, задача не зависит от процесса сборки Xcode и может быть выполнена напрямую.
...