Kotlin Native 新增 Objective-C 互操作能力以及对 WebAssembly 的支持

  • Sergio De Simone
  • 大愚若智

2017 年 11 月 30 日

话题:移动iOS语言 & 开发

根据 JetBrains 技术主管 Nikolay Igotti 的介绍,Kotlin/Native 0.4已经可用于为 iOS 和 macOS 开发原生应用。此外该版本还为 WebAssembly 平台提供了实验性支持。

Kotlin/Native 对 iOS/macOS 开发的支持,关键在于实现了与 Objective-C 的互操作性。JetBrains 目前已经发布了一个非常简单的演示应用,该应用使用 Kotlin 编写,已发布至Apple StoreGoogle Play

下列代码片段展示了访问 iOS 框架的方式:

import kotlinx.cinterop.*
import platform.Foundation.*
import platform.objc.*
import platform.osx.*
fun readResource(resourceName: String): ByteArray {
    val filePath = NSBundle.mainBundle.pathForResource(resourceName, ofType = null)
  val fileData = NSData.dataWithContentsOfFile(filePath!!)
  ?: throw Error("failed reading resource $resourceName")
  return fileData.bytes!!.readBytes(fileData.length.toInt())
}

这一切都是通过新的platform实现的,并通过库实现了对底层操作系统接口的访问。借此便可以使用提供了 POSIX OS 层的平台执行各类操作,如调用fopenfread等。以前与底层平台的互操作则需要专门生成的 Interop Stub。

新版的另一个新功能对象固定(Object pinning),主要是为了简化通过 C API 使用 Kotlin 对象的方式,借此可以确保通过 C API 消费的对象能够锁定到内存中。

Kotlin/Native 现已开始支持WebAssembly,因此可以通过 Kotlin 开发基于浏览器的应用。但根据 Igotti 的介绍,由于浏览器支持方面的局限,这种支持目前依然是实验性质的。

在工具方面,调试功能现已支持在运行时检查大部分变量。此外同样重要的是,还通过一个新的插件让 CLion 可以支持 Kotlin/Native

Kotlin/Native 是 Kotlin 的最新成果,可用于将最初仅仅基于 JVM 的语言 Kotlin 编译为无需虚拟机即可运行的原生库。因此该技术非常适合诸如 iOS 等平台以及嵌入式设备等不能或者无法运行虚拟机的环境。Kotlin/Native 目前已经可以支持 Windows、Linux、macOS、iOS、Android 和 WebAssembly。

阅读英文原文Kotlin Native Adds Objective-C Interop, WebAssembly Support

移动iOS语言 & 开发