我正在尝试 kotlin 多平台,并且我在 Android 中构建和测试了公共(public)部分并且工作正常,但现在我正在尝试在 iOS 中实现代码来尝试。我在我的 build.gradle
中看到了 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'
}
}
}
它说不直接运行任务而是根据this guide它说直接运行它。当我直接运行它时,我收到一条错误消息
Execution failed for task ':app:copyFramework'.
block 引用>Could not get unknown property 'configuration.build.dir' for task ':app:copyFramework' of type org.gradle.api.DefaultTask.
我不知道我必须做什么才能为 iOS 构建这个。
有人可以帮我解决这个问题吗?
最佳答案
首先,让我们弄清楚这里发生了什么。由于您必须使用 Xcode 项目来实现最终的 iOS 应用程序,因此应该在构建时以某种方式添加框架。您在这里混合了两种方法:
copyFramework
任务,应作为 Xcode 构建过程的构建阶段运行。它将生成的框架复制到 Frameworks 目录,以便可以从 Objective-C 或 Swift 代码访问它。要了解它在哪里,此任务取决于 Xcode 在执行构建时设置的环境变量。这就是您在这里收到错误的原因。- 指南中的任务与第一个任务略有不同。这里主要是
packForXcode
将framework复制到指定目录../../SharedCode/build/xcode-frameworks
,并且Xcode项目已经设置为从那里获取框架(参见 this line )。因此,该任务不依赖于Xcode构建过程,可以直接执行。
关于ios - 为 iOS 创建/导入 Kotlin 多平台代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60085153/