ios - 为 iOS 创建/导入 Kotlin 多平台代码

标签 ios kotlin kotlin-multiplatform

我正在尝试 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'.

Could not get unknown property 'configuration.build.dir' for task ':app:copyFramework' of type org.gradle.api.DefaultTask.

我不知道我必须做什么才能为 iOS 构建这个。

有人可以帮我解决这个问题吗?

最佳答案

首先,让我们弄清楚这里发生了什么。由于您必须使用 Xcode 项目来实现最终的 iOS 应用程序,因此应该在构建时以某种方式添加框架。您在这里混合了两种方法:

  1. copyFramework 任务,应作为 Xcode 构建过程的构建阶段运行。它将生成的框架复制到 Frameworks 目录,以便可以从 Objective-C 或 Swift 代码访问它。要了解它在哪里,此任务取决于 Xcode 在执行构建时设置的环境变量。这就是您在这里收到错误的原因。
  2. 指南中的任务与第一个任务略有不同。这里主要是packForXcode将framework复制到指定目录../../SharedCode/build/xcode-frameworks,并且Xcode项目已经设置为从那里获取框架(参见 this line )。因此,该任务不依赖于Xcode构建过程,可以直接执行。

关于ios - 为 iOS 创建/导入 Kotlin 多平台代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60085153/

相关文章:

javascript - 在android studio Assets 中调用.js文件中的javascript方法

gradle - 如何使用由 kotlin 多平台创建的 Javascript 工件

ios - 是否有与 Mockito 类似的框架用于在 Kotlin MPP 中测试共享代码或 iOS 代码?

android - 如何更改 MaterialDesign EditText 中的提示?

android - 向应用程序发送通知。 (空气)

iphone - 监控 iPhone 应用程序上的 Google Analytics 请求

ios - 如何在 Swift 中使用带有 #define 宏的 Objective-C 代码

java - 如何在 Kotlin 中声明原始类型?

android - 无法在 MacBook M1 芯片上构建 Kotlin Multiplatform 移动项目

ios - 如何在 Swift 中将 NSMutableArray 作为对 NSMutableDictionary 部分的引用传递?