使用Kotlin Native技术开发iOS应用

2022-11-30 11:14:49 浏览数 (2)

AppCode简介

AppCode是JetBrains公司出品的用于开发Mac OS X以及iOS应用程序的集成开发环境,能够支持Xcode项目的运行和调试功能,并为Swift和Objective-C提供广泛的技术支持。目前,AppCode只能运行在Mac OS X操作系统环境下,作为XCode的高级替代品,AppCode继承了IDEA的诸多优良特性,是Mac OS X和iOS应用程序开发的又一利器。 Kotlin Native是一种能够将Kotlin源代码编译成不需要任何虚拟机支持的二进制技术,编译后的二进制数据可以直接运行在目标平台上。Kotlin Native在0.4版本引入了对Objective-C API的调用支持,并引入了对WebAssembly的实验性支持。要想使用Kotlin来开发iOS应用,需要先下载最新版的AppCode(即AppCode 2018.1.1及以上版本),然后安装【Kotlin Native for AppCode】插件。 安装的步骤为,依次选择【AppCode】→【Preferences】→【Plugins】打开JetBrains的插件页面,然后搜索【Kotlin Native for AppCode】并安装,如图16-6所示。

创建Kotlin Native项目

Kotlin Native使用Gradle作为默认构建工具,想要在Xcode中编译Kotlin Native项目,需要在项目中添加相关的运行脚本,该脚本调用Gradle来构建Kotlin Native工程。当然,也可以借助一些第三方的IDE,如AppCode,使用AppCode之前需要先安装【Kotlin Native for AppCode】插件。 启动AppCode,依次选择【Kotlin/Native】→【Single View APP with a Kotlin/Native Framwork】即可创建iOS应用程序,使用Kotlin/Native方式创建的iOS项目支持使用Kotlin语言来编写iOS应用程序,如图16-7所示。

等待项目构建完成,可以看到,使用Kotlin/Native方式创建的iOS项目的目录结构如图16-8所示。

相比使用Xcode创建的原生iOS项目而言,使用Kotlin/Native方式创建的iOS项目显然多一些配置文件(如Frameworks和KotlinNativeFramework)。文件的具体含义如下:

  • Projects:主要用于存放Mac软件开发的可执行文件等,iOS应用开发很少用到这个文件;
  • Frameworks:主要用于存放项目依赖的一些系统库和第三方库;
  • Project:此目录用于存放与项目相关的源码,也是iOS应用开发的核心组成部分;
  • KotlinNativeFramework:用于存放和KotlinNative相关的库。

此时,只需要点击【Run】按钮即可在iPhone模拟器或者真机中启动应用程序。不过,此时的程序还没有实现任何的功能,为了在项目中使用Kotlin来编写iOS应用程序,可以在Kotlin Native项目的Project文件中创建一个Kotlin的文件目录(如src/main/kotlin),然后添加一个ViewController类,如图16-9所示。

需要注意的是,使用AppCode创建的Kotlin Native项目默认是没有引入iOS的UIKit.framework系统库的,所以在使用iOS的相关库之前需要先导入相应的库。 ViewController类的源码如下:

代码语言:javascript复制
import kotlinx.cinterop.ExportObjCClass
import kotlinx.cinterop.ObjCAction
import kotlinx.cinterop.ObjCOutlet
import platform.Foundation.NSCoder
import platform.UIKit.*
import kotlinx.cinterop.initBy

@ExportObjCClass
class ViewController: UIViewController {

    constructor(aDecode:NSCoder): super(aDecode)
    override fun initWithCoder(aDecode:NSCoder) =initBy(ViewController(aDecode))

    @ObjCOutlet
    lateinit var label: UILabel

    @ObjCOutlet
    lateinit var textField: UITextField

    @ObjCOutlet
    lateinit var button:UIButton

    @ObjCAction
    fun click(){
        label.text="Hello,${textFiled.text}"
    }
}

由于开发者自己定义的文件目录未被标记为源根目录,是不会被编译系统识别的,所以需要将“src/main/kotlin”目录标记为项目源码目录才能够被系统识别。

Kotlin Native测试

众所周知,AppCode本身就是基于IntelliJ IDEA的Kotlin插件,所以很多支持Kotlin的功能对于Kotlin/Native也是同样支持的(如代码检查、重构等操作)。

同时,AppCode插件也支持使用kotlin.test框架来编写测试代码。在项目名上右键,依次选中【Project Settings…】→【项目名】,然后点击左下角的添加按钮,如图16-11所示。

等待项目构建完成,然后选中【edit configurations…】打开项目配置面板并添加“Kotlin/Native test”选项来添加测试用例,如图16-12所示。

当然,除了上面介绍的功能外,Kotlin Native还支持调用Objective-C标准 API,而且也为此提供了非常便捷的阅读API文档的方法,可以说Kotlin Native是Kotlin多平台的真正魅力之所在。

0 人点赞