O Kotlin/Native 0.4 torna possível a construção de apps nativas para o iOS e macOS, segundo Nikolay Igotti, líder técnico do Kotlin/Native na JetBrains. Adicionalmente, foi adicionado suporte experimental à plataforma WebAssembly.
A interoperabilidade com o Objective-C é a chave para o Kotlin/Native suportar o desenvolvimento iOS/macOS. A JetBrains chegou a publicar uma app de demonstração muito simples codificada em Kotlin na Apple Store e na Google Play.
O pedaço de código abaixo demonstra como é possível acessar os frameworks do 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())
}
A mágica é fornecida através da nova plataforma. Bibliotecas que permitem acesso a interfaces do sistema operacional subjacente. Isso também possibilita usar a camada POSIX OS em uma plataforma que a fornece por exemplo chamadas para fopen, fread, e assim por diante. Anteriormente, a interoperabilidade com plataformas subjacentes exigiria a explícita geração de stubs de interoperabilidade.
Outra nova funcionalidade, destinada a simplificar o uso de objetos Kotlin com a API C, é a fixação do objeto, que pode ser usada para garantir que um objeto seja bloqueado na memória quando consumido a partir de APIs C.
O Kotlin/Native agora suporta o WebAssembly, o que significa que o Kotlin pode ser usado para apps baseadas em browsers. O suporte é experimental, devido às limitações dos browsers, diz Igotti.
A depuração agora suporta inspeção na maioria das variáveis em tempo de execução. E por último, mas não menos importante, um novo plugin fornece suporte para o Kotlin/Native no CLion.
O Kotlin/Native é um desenvolvimento recente no Kotlin que permite compilar o Kotlin, originalmente baseada na JVM, para binários nativos que são executados sem VM. Isso o torna especialmente adequado para plataformas como o iOS e outros, na qual VMs não são permitidas ou desejáveis. O Kotlin/Native atualmente suporta Windows, Linux, macOS, iOS, Android e WebAssembly.