使用Kotlin Native技术开发iOS应用
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类的源码如下:
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))@ObjCOutletlateinit var label: UILabel@ObjCOutletlateinit var textField: UITextField@ObjCOutletlateinit var button:UIButton@ObjCActionfun 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多平台的真正魅力之所在。
使用Kotlin Native技术开发iOS应用相关推荐
- Kotlin 一统天下?Kotlin/Native 开始支持 iOS 和 Web 开发
KotlinConf 大会宣布了 Kotlin 1.2 RC 版,并宣布 Kotlin/Native 已支持用于开发 iOS 应用和 Web 应用开发. 近日,首届官方举办的 Kotlin 专题会议 ...
- python kivy ios_Kivy跨平台技术开发iOS
#kivy Kivy是一套专门用于跨平台快速应用开发的开源框架,使用Python和Cython编写,对于多点触控有着非常良好的支持,是一套专门用于跨平台快速应用开发的开源框架,使用Python和Cyt ...
- KMM(Kotlin Multiplatform Mobile)Welcome to Kotlin/Native World
1. 什么是Kotlin/Native Kotlin/Native是一种将Kotlin源码编译成不需要任何VM支持的目标平台二进制数据的技术,编译后的产物可以直接运行在目标平台上,设计Kotlin/N ...
- Web技术是开发iOS和Android App
如果说以前的微信公众号还是一个媒体化的平台,那么2016年的公众号会有一种新的形态,叫应用号.应用号预示着比公众号更强大的功能.更优质的体验以及更丰富的服务.应用号的出现是微信产品的一次重大升级,无论 ...
- 【苹果家庭推iiMessage】React Native举行开发仍是iOS,用原生的代码实现类似webview的页面
推荐内容IMESSGAE相关 作者推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息 作者推荐内容 1.家庭推内容 *** 点击即可查看作者要求内容信息 作者推荐内容 2.相册 ...
- 视频教程-ReactiveCocoa开发技术教程-iOS
ReactiveCocoa开发技术教程 毕业于解放军特种作战学院,曾就职广州军区司令部.复原后从事IT行业,涉及逆向,安全,密码学等技术领域.2014年在广州某线下教育机构担任iOS讲师,2015年加 ...
- IOS AR技术开发
这几天了解了下AR的技术开发,关于AR网上也有一些指导博客,我这里由于也是刚开始接触AR,所以不加以多说,只是总一个个人总结. 关于AR我第一次感觉有意思是QQ在2017年城市内抢红包感受到的.当时觉 ...
- Java vs Kotlin,Android开发人员应该选择哪种语言?
自 Google 于 2017 年宣布 Kotlin 成为 Google IO 的 Android 开发官方语言以来,想要成为Android开发人员的程序员正陷入两难境地. 在讨论这个问题前,我首先要 ...
- Kotlin Native新增Objective-C互操作能力以及对WebAssembly的支持
根据JetBrains技术主管Nikolay Igotti的介绍,Kotlin/Native 0.4已经可用于为iOS和macOS开发原生应用.此外该版本还为WebAssembly平台提供了实验性支持 ...
最新文章
- 在Windows平台下使用安装GCC
- java写微信小程序答辩问题_微信小程序毕业设计选题和毕业论文怎么写,答辩流程是怎样的?...
- hive 的udf 函数使用
- 计算机硬件系统设计mooc,计算机硬件系统设计MOOC答案
- 解答网友提问 | 使用VS2022快速生成React/Angular/Vue.js + Web API前后端集成项目
- javascript学习系列(25):数组中的substr
- Mysql 获取年级每个班前十学生的信息
- PostgreSQL AS不忽略大小写
- 女神被打码了?一笔一划脑补回来,效果超越Adobe | 已开源
- Android Studio for Experts(Android Dev Summit2015)
- windows上传文件到linux乱码解决
- 转载:浅谈程序员的数学修养
- jquery $.post 超时_详解如何实现前端jquery中的ajax方法,看这一篇就够了
- 使用python来刷csdn下载积分(一)
- Java Swing MySQL图书管理系统
- # ubuntu 16.04 vivado2017.4版本用JTAG烧写usrpx310的固件
- 海洋地震设备与采集的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 使用python完成知乎模拟登陆
- 【历史上的今天】6 月 26 日:EDSAC 计算机之父诞生;B 站成立;Skype 创始人出生
- Qt WA_TranslucentBackground 导致视频渲染不了的问题