KotlinNativeのiOSサンプルを実行する(だけ)


はじめに

最近、アプリ開発をしていく中でもっと工数を短く出来なかなと考える機会があり、
もっと効率の良い開発手法はないものかと思っています。
そうした中で、1つのプロダクトでiOSとAndroidの2つのOSに対応させてリリースするにあたり、
クロスプラットフォーム開発を用いて工数削減できたらなという期待を込めて調べています。

クロスプラットフォーム開発ツールは多々ある中で、XamarinやReact Nativeについては、
以前個人で調べてサンプルを作成したりしていました。そんなこんなでちょっと新たなところに手を出したいなという私的な理由と、少し前の話になりますが
Kotlin/Nativeがベータに上がったということもあり
今回はKotlin/Nativeについて、iOSサンプルを起動させるまでをまとめてみました。

環境

  • MacBook Pro (13-inch, 2017)
  • macOS Mojave(varsion: 10.14.1)
  • Core i5, Memory 16GB
  • Xcode(varsion: 10.1)
  • jdk 1.8

kotlin-nativeリポジトリをcloneしましょ

リポジトリからcloneします。https://github.com/JetBrains/kotlin-native
以下のコマンドでclone

$ git clone https://github.com/JetBrains/kotlin-native.git

そして、依存関係のダウンロード。

$ cd kotlin-native
$ ./gradlew dependencies:update

完了には10分ほどかかりました。

次に、コンパイラとライブラリをビルドします。

$ ./gradlew bundle

結構時間かかるなぁ。。。。

The build can take about an hour on a Macbook Pro.

(Readmeより抜粋)
😵
一時間ほどかかるようでですね(私の環境では最終的に3時間弱かかりました。。)

Kotlin/Nativeの準備はOKです。

サンプルを実行

sample/calculator/iosAppにある.xcodeprojを開き実行

こんなのが実行されます。

サンプル実行はここまでです。

なぜクロスプラットフォーム?

  • 前述で述べたとおり、開発の工数削減に役立てられないかと思った。
  • ただ、iOSにはiOSらしさ、AndroidにはAndroidらしさがあるので  全てをKotlin/Nativeで開発しようとは考えていない
  • アプリ開発で、アプリエンジニアはできる限りUI周りに工数をかけて、そのアプリらしさを追求した方が良いのでは?
  • ドメインや通信周りを共通化することで多少なりともUIに割く時間を増やせる?
  • ドメインや通信周りを共通化することでAPIの変更があった場合も低コストで修正できるかも

懸念

まだ、ベータ版ということもありどこまで使えるかが不安
Swiftのサポートがまだ不安定らしい(issuesにも上がっている)
https://github.com/JetBrains/kotlin-native/issues

まとめ

Kotlin/NativeのiOSサンプル実行までをまとめてみました。
ドメインや通信周りを共通化することで多少なりとも
開発コスト削減になるのではと期待していますが、
開発の段階で削減できなくても、保守・運用では減らせるのかなと思っています。

今回はiOSサンプルの実行のみでしたが、
次回はKotlin/Nativeの複数バイナリをまとめる方法なんてのを投稿できたらと思います。

参考

kotlin-native
Kotlin/Nativeがベータに到達、Kotlin 1.3にバンドル。Win/Mac/iOS/Android/WebAssemblyのバイナリ生成。KotlinConf 2018
https://www.publickey1.jp/

iOS,Android両OSのアプリを開発するための手法検討