好消息,萬眾期待的 iOS 開發(fā)插件終于又重新上架了。在很久很久以前,我就用過這個插件,來玩一些 iOS 應(yīng)用,但是不知是因為不完善或是其他原因,很快這個插件就被下架,直到最近才重新可以下載。
廢話不多說,今天就來看看如何用 Kotlin 來寫一個 iOS APP。
剛才提到了插件,那么插件就是必然要下載的了,我們選擇 JetBrains 全家桶里的 AppCode 作為 IDE,在此基礎(chǔ)上安裝插件:

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

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

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

這個時候我們已經(jīng)可以直接運行這個項目了,AppCode 會直接打開模擬器,并且把程序部署上去。
這里依然需要注意,要有耐心,第一次編譯會很慢(事實上基于 Kotlin/Native 的編譯第一次都很慢,clean 后再編譯也是很慢)。
在 Kotlin 下寫 iOS App,需要注意幾個不同之處,首先是 @ObjC 前綴,在 OC 內(nèi)可以使用的如 IBOutlet,IBAction 之類的代碼,必須被改為 @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 的完美支持,你們呢?