使用 Kotlin 開發(fā) iOS App

好消息,萬眾期待的 iOS 開發(fā)插件終于又重新上架了。在很久很久以前,我就用過這個插件,來玩一些 iOS 應(yīng)用,但是不知是因為不完善或是其他原因,很快這個插件就被下架,直到最近才重新可以下載。

廢話不多說,今天就來看看如何用 Kotlin 來寫一個 iOS APP。

剛才提到了插件,那么插件就是必然要下載的了,我們選擇 JetBrains 全家桶里的 AppCode 作為 IDE,在此基礎(chǔ)上安裝插件:

Kotlin 插件

然后就可以輕松建立項目了:

新建項目

填入一些基礎(chǔ)信息并選擇保存目錄后,即可完成項目的建立。Kotlin 的項目通常都使用 Gradle 來進行管理,在 iOS 上也不例外,所以第一次建項目往往會很痛苦,要下載大量的文件,比如說 Kotlin iOS 依賴庫等。在這里需要特別提一下,Kotlin iOS 項目對 Gradle 版本有要求,最低 5.1,因此還在使用 4.x 的就需要升級了。

下載依賴庫

看到這個框框時需要有十足的耐心,按網(wǎng)絡(luò)情況的不同,需要耗時至少 15 分鐘,當(dāng)然下載過一次后,第二次再建項目就很快了,無需再次下載。

完成后的項目如圖所示:

項目文件結(jié)構(gòu)

這個時候我們已經(jīng)可以直接運行這個項目了,AppCode 會直接打開模擬器,并且把程序部署上去。

這里依然需要注意,要有耐心,第一次編譯會很慢(事實上基于 Kotlin/Native 的編譯第一次都很慢,clean 后再編譯也是很慢)。

在 Kotlin 下寫 iOS App,需要注意幾個不同之處,首先是 @ObjC 前綴,在 OC 內(nèi)可以使用的如 IBOutletIBAction 之類的代碼,必須被改為 @ObjCOutlet@ObjCAction,另外,如果要使自定義的類被 Storyboard 識別,必須采用 @ExportObjCClass 來導(dǎo)出。

好了,接下去熟悉一下 Kotlin/Native 的語法就可以輕松上手了,對于 Kotlin 來說,它針對不同 Target 的成員,在語法上的細微差異,而且引用的庫也不同,所以不能簡單的把針對 JVM 的代碼拿來用,在某些地方還是需要做出一點修改的。


恩,你以為看到上面就結(jié)束了?其實并沒有,下面才是坑中之坑!

我們通常做 iOS 開發(fā)時,會使用 StoryBoard,然而 AppCode 卻不支持直接編輯 StoryBoard,用 Xcode 打開時會發(fā)現(xiàn),跟本無法進行連線的操作。

是的,就是這么坑,這意味著我們需要手寫 StoryBoard!這里簡單的介紹一下方法,StoryBoard 是一個標(biāo)準的 xml 文件,比如說一個按鈕,在里面的代碼如下:

<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2kw-d4-I4d">
    <rect key="frame" x="16" y="119" width="343" height="30"/>
    <constraints>
        <constraint firstAttribute="height" constant="30" id="w2K-aL-8gZ"/>
    </constraints>
    <state key="normal" title="Send"/>
    <connections/>
</button>

那么要添加一個點擊事件,就需要這樣做:

<connections>
    <action selector="buttonPressed" destination="BYZ-38-t0r" eventType="touchUpInside" id="frh-jo-ppG"/>
</connections>

這里有兩個 ID,destination 指向 button 所在的 ViewController 的 ID,而后面那個 ID 就需要自己生成了。

StoryBoard 內(nèi),ID 的規(guī)則如同一個簡單的 UUID,形式為 xxx-xx-xxx,但是每一段上都可以擁有 0-9, A-Z, a-z 全部的內(nèi)容。

在這里也可以出個題給大家,知道規(guī)則后如何生成這樣的 ID 呢(其實已經(jīng)貢獻給某需要 kotlin 的公司作為面試題)? 答案在我的 Github 有,點擊查看。


好了,用 Kotlin 開發(fā) iOS App 就簡單的講到這,離實用還有不少距離,但也是給了一個不容忽略的選擇,我在等 StoryBoard 的完美支持,你們呢?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容