Shr*_* Ye 0 gradle kotlin kotlin-native kotlin-multiplatform swiftui
如何在 Kotlin/Native 或 Kotlin Multiplatform 项目中使用 Gradle 将 Apple 依赖项添加到 Kotlin/Native 模块?
我不熟悉 Apple 和 Xcode 开发——我写了一点 Swift,但没有为 Xcode 项目配置额外的依赖项,所以如果我在这里有新手误解,请见谅。
Kotlin/Native 可与 Objective-C 和 Swift 互操作。在我在线浏览的许多示例项目中,Kotlin 被设置为用作 Apple (iOS) 模块的共享库。但是 Apple 依赖项中的定义可以从 Kotlin 代码中调用也应该是有意义的,就像 Java Maven 依赖项可以添加到 Gradle 构建脚本然后由 Kotlin 代码调用一样。
在名称翻译部分,它说:
platform.*预配置系统框架的包
在使用 IntelliJ IDEA 中的 Kotlin 多平台移动应用程序选项创建的项目中,此类定义包含在模块中模块文件夹中的platform包下。iosMainkotlinshared
但是,SwiftUI 不存在。更具体地说,就我而言,我尝试使用 SwiftUI 在 Kotlin 中直接构建 UI。目前是否有可能,然后如何使 SwiftUI“系统框架”也包括在内?
这是我build.gradle.kts在shared模块中的参考:
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
plugins {
kotlin("multiplatform") version "1.4.30"
}
group = "my.group.name"
version = "1.0-SNAPSHOT"
kotlin {
ios {
binaries {
framework {
baseName = "shared"
}
}
}
sourceSets {
val commonMain by getting
val commonTest by getting {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
}
}
val iosMain by getting
val iosTest by getting
}
}
val packForXcode by tasks.creating(Sync::class) {
group = "build"
val mode = System.getenv("CONFIGURATION") ?: "DEBUG"
val sdkName = System.getenv("SDK_NAME") ?: "iphonesimulator"
val targetName = "ios" + if (sdkName.startsWith("iphoneos")) "Arm64" else "X64"
val framework = kotlin.targets.getByName<KotlinNativeTarget>(targetName).binaries.getFramework(mode)
inputs.property("mode", mode)
dependsOn(framework.linkTask)
val targetDir = File(buildDir, "xcode-frameworks")
from({ framework.outputDirectory })
into(targetDir)
}
tasks.getByName("build").dependsOn(packForXcode)
Run Code Online (Sandbox Code Playgroud)
Kotlin/Native 不与纯 Swift 互操作。从您链接的文档中:
“Kotlin/Native 提供与 Objective-C 的双向互操作性”……“如果 Swift 库的 API 使用 @objc 导出到 Objective-C,则可以在 Kotlin 代码中使用它。尚不支持纯 Swift 模块。”
Swift 可以编写为与 Objc 互操作,使用@objcSwift 注释,这将对 Swift 代码应用一些约束。SwiftUI 绝对是纯 Swift,无法导入 Kotlin。
我还建议,即使可能,从 Kotlin 编码 SwiftUI 也可能是一种糟糕得多的开发体验,因为 Xcode 在启用 SwiftUI 预览等方面投入了大量工作。 ,我猜这将是对 Compose 的一次尝试。JetBrains 可能会在 AppCode 中为 SwiftUI 付出一些努力,但我猜想 SwiftUI + Kotlin 实现这一目标还需要很长时间。Kotlin/Native 首先需要直接的 Swift 互操作,这已经讨论过,但 AFAIK 尚未启动。
总结,我会用 Swift 在 Xcode 中编写 SwiftUI 代码,然后与另一个共享的 Kotlin 对话以获取 UI“下方”的逻辑。
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |