1. 程式人生 > >使用Kotlin Native技術開發iOS應用

使用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))

    @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多平臺的真正魅力之所在。

相關推薦

使用Kotlin Native技術開發iOS應用

AppCode簡介 AppCode是JetBrains公司出品的用於開發Mac OS X以及iOS應用程式的整合開發環境,能夠支援Xcode專案的執行和除錯功能,併為Swift和Objective-C提供廣泛的技術支援。目前,AppCode只能執行在Mac O

Kotlin 一統天下?Kotlin/Native 開始支援 iOS 和 Web 開發

KotlinConf 大會宣佈了 Kotlin 1.2 RC 版,並宣佈 Kotlin/Native 已支援用於開發 iOS 應用和 Web 應用開發。 首屆官方舉辦的 Kotlin 專題會議 K

Swift 語言開發 iOS 應用程式的利弊

目前全球共有超過 7 億臺 iPhone 處於活躍狀態,這造就了 iOS 作為全球第二大移動裝置平臺的狀態。雖然安卓系統的全球市場佔有率超過 iOS 系統,但在諸如美國、法國和英國的區域性市場中 iOS 系統仍然佔據主導地位。因此許多公司專注於 iOS 平臺進行軟體開發,因為

使用Kotlin優雅的開發Android應用,附demo

 lateinit var et_account: EditText    lateinit var et_password: EditText    inner class LoginUi : AnkoComponent<LoginActivity> {        override

使用Go語言開發iOS應用(Swift版)

http://www.ituring.com.cn/article/215762 本文加上讀者對Go語言和Swift語言都有一定了解, 但是對二者混合使用不瞭解的同學. 本教程是基於一個真實上架的iOS應用做的簡單的總結。 我們先看看執行效果: 掃碼安裝:

開發技巧】珠三角技術沙龍分享PPT《iOS應用開發Tips》

到珠三角技術沙龍做了一次分享題為《iOS應用開發Tips》。 PPT分享在 https://github.com/zqxiaojin/Share-Jin-PPT 直接下載地址為 https://raw.githubusercontent.com/zqxiaojin/Sha

IOS開發退出應用程序的代碼

exit rda har form res 方法 style rms art IOS 開發中。我知道的兩個退出程序的方法: 1. exit(0); 2. if([[UIApplication sharedApplication] respondsToSelector:

iOS]關於 App 混合(Hybrid)開發的優化,包括H5、Weex等(本篇博客主要針對 iOS 應用講解,但該思想同樣適用於Android)

color 數據 後臺 lib 新版 生成 下載地址 代碼 版本   我們知道混合開發,可以節省很多成本(時間成本,經濟成本等等),所以有很多公司比較鐘愛這種開發形式,今天所講的優化方式,也是我在我們公司的應用中實際用了的,而且我寫的這個優化的 SDK 已經開源到 gith

Xamarin.Forms 開發IOS、Android、UWP應用

windows 開發項目 alt ive 快速 需要 預覽 開發 aml C#語言特點,簡單、快速、高效。本次我們通過C#以及Xaml來做移動開發。 1.開發工具visual studio 2015或visual studio 2017。當然visual studio 20

iOS開發應用間相互跳轉

gpo 用戶隱私 spa container 下載 containe canopen itunes cep 1. 應用間相互跳轉簡介 在iOS開發的過程中,我們經常會遇到需要從一個應用程序A跳轉到另一個應用程序B的場景。這就需要我們掌握iOS應用程序之間的相互跳轉知識。

移動web:原生開發打包,嵌入h5頁面 webApp:全部都是H5開發應用 混合APP:使用第三方開發平臺從apicloud,appcan,hbuilder等開發,cordova技術打包 原生APP:就是eclipse開發或者studio等工具開發

應用 手機 .com net ack 自動連接 pan 經驗 使用 論壇43213 移動端webApp兼容問題解決 談談App混合開發 Hybrid APP混合開發的一些經驗和總結 PhoneGap是一個采用HTML,CSS和JavaScript的技術,創建

雙平臺真實開發GitHub App React Native技術全面掌握

熱更新 菜單 第2章 chm 實現 應用 隱藏 進入 safe 第1章 項目需求分析、效果演示、功能分解,技術分解、開發計劃制定,首頁導航架構設計本章首先會對項目需求進行分析,然後對項目效果進行演示,讓大家知道我們將要開發一款怎樣的APP,接著,會制定一個項目開發計劃,讓大

區塊鏈技術開發 聊區塊鏈技術開發應用場景概況

階段 依賴 更多 單純 初創 images 智能合約 term 51cto 發展至今,區塊鏈技術開發已經從單純的技術探討走向了應用落地的初步階段。隨著國內外已經出現大量企業或個體初創者切入其中。有些企業希望結合自身業務摸索出具有特色的應用場景,但更多的企業還處於不斷探索和驗

區塊鏈技術開發 聊區塊鏈+共享經濟開發應用

更多 不用 理解 用戶 分享 布局 align vpd 高達 區塊鏈技術開發在2018年進度加快,包括央行在內的諸多單位都深入其中,現今市場不再被視為一個點存在,而是可以主動參與區塊鏈技術共享經濟的資源實體,有更多點與點之間的資源交互,實現公識需求直接對應,避免“中心化”之

區塊鏈技術開發導向 聊應用及正確發展方向

區塊鏈技術 process watermark 區塊鏈技術開發 p s mar 一次 image 自身 技術探索總能帶來一些新的商業發展思路,伴隨區塊鏈技術開發的逐年深入,不少企業都紛紛將目光聚焦到區塊鏈領域。雖然多數人試圖通過新技術實現企業轉型來謀求未來市場,也有部分投機

區塊鏈技術開發脫虛向實 怎樣才能有應用價值?

安全性 proc 依賴 http oss 社會 快速 p s 區塊鏈技術開發 信息化時代格局下,商業總是跟隨科技進步迸發出巨大價值潛力。對於區塊鏈技術開發熱潮,各界紛紛湧入其中,也有人仍在糾結觀望,另外一些則抗拒改變。從長遠眼觀來看,積極主動且具備戰略眼光的企業機構必將取得

區塊鏈技術可追溯性應用:溯源與鑒真 區塊鏈技術開發公司

和數 管理系 區塊鏈 得出 其中 直接 完成 價格 供應鏈 【本文由區塊鏈技術開發公司深圳源中瑞科技有限公司周顧問整理,Q號(311//2325//834),未經允許,不得抄襲】 一、食品藥品監管部門:產品防偽溯源 區塊鏈技術可以用於產品防偽。數據不可篡改與交易可追溯兩大特

區塊鏈項目開發區塊鏈技術的三大應用

完全 區塊鏈 思維 產業鏈 需求 訓練 功能 頭上 數據資源 確權、交易授權、維權,微版權時代的全鏈路通關利器 不難發現,微版權時代已到來。過去,版權是一本書、一部電影、一首歌;現在,版權可以是短視頻,或者公眾號的一篇文章。但微版權時代,創造者維權不容易,創造者還沒來得及

快速開發跨平臺應用之Xamarin技術

  Xamarin 介紹   Xamarin 是一個允許開發人員有效建立可跨 iOS、Android、Windows 應用程式的開發工具集。Xamarin是免費且開源的,遵循 MIT (麻省理工學院許可證)協議,在github上的地址為:https://github.com/x

預編譯框架,開發高效能應用 - 課程 - 微軟技術暨生態大會 2018

微軟技術暨生態大會(Tech Summit),2018 年在上海世博中心召開。這是最後一次的 Tech Summit 了;明年開始,中國大陸地區就要和其他國家和地區一樣,進行全球 Ignite Tour 了。 我也有幸成為分會場講師團隊的一員,課程是《預編譯框架 - 開發高效能應用》