LoginSignup
4
6

More than 5 years have passed since last update.

Kotlin/Nativeをさわりだけさわってみた

Last updated at Posted at 2017-12-18

まえがき

この記事は モバイルファクトリー Advent Calendar 2017 19日目の記事です。

この記事は2017年12月執筆の記事です。Beta版に対しての言及であるため、参照時にはご留意願います。

Kotlin/Native

元々はJetBrains社が開発したJVM言語で、Androidの統合開発環境がInteliJベースで有ることから、目下利用用途はAndroid開発に使用されることが多い言語でした。今年のGoogleI/OでAndroidの正式開発言語として採用され、急速に注目度が高まっています。
また、JVM言語であることからJavaの資産の大部分を流用できるため、サーバサイド言語としても注目が集まっています。

そんなJVM言語のKotlinでしたがKotlin/NativeはKotlinのモダンな書き味そのままにiOS、JS(wasm)、Windows、Mac、Linuxに対応できるそうです。

Android/iOS両対応

目下皆さんがKotlin/Nativeに興味を持つのは、Android, iOSの両対応でしょう。

Android対応状況

  • arm32 and arm64

atomは現段階では未対応な模様

iOS対応状況

  • arm64

iPhone5c、iPhone5以下が現段階で未対応なもよう

とはいえ、iPhone5についてAppleのサポートが終わっていますので、今から作り始めるならそこまで気にならないかもしれません。

仕組み

@amay077 さんの https://qiita.com/amay077/items/45b1ad4b9c5d3a03cf9c の記事が参考になりました。

要約

  • Kotlinコードのレベルで共通化ができる
  • 周辺ライブラリは実行環境によるのでjavaの資産が流用できないわけではないが、java.*系を使うにはメソッド単位で大量のbridgeを書く必要がある。
    • なのでkotlin系のライブラリでも、中身でjava.*に依存してるとそのライブラリ自体をbridgeする必要がある。

とりあえずiOSアプリをビルドしてみる

Kotlinコンパイラをビルド

JetBrains/kotlin-nativeリポジトリのREADMEを実施すればできます。

事前準備して

  • JDK
  • Xcode 9.2(Macなら)
    • iOS向けじゃなければCLangあたりがあれば大丈夫かと。多分。

dependenciesを更新して

./gradlew dependencies:update

コンパイラとコンパイルライブラリをbuild

./gradlew bundle

1時間かかるって書いてるけど、手元のMacBookPro13inだと2時半。。。

BUILD SUCCESSFUL in 2h 25m 13s

build後はプロジェクト全体で1.4G
必要最低限のdist以下で800M程度です。

dist/binにPATHを通す

export PATH=$PATH:$HOME/local/kotlin-native/dist/bin

iOSプロジェクトを作る

JetBrains/kotlinconf-spinnerのサンプルプロジェクトを参考に作ると良いでしょう。
OpenGL系で少しモリモリ感ありますが。

が、今回はちょっとkotlincのbuildに時間とられてしまったので、sampleプロジェクトをそのまま使ってみる。すいません。。

ディレクトリ構成

kotlin-native
├── external
└── samples
    └── fullstack
        ├── KotlinCMakeModule
        ├── clients
        │   ├── android
        │   ├── cli
        │   ├── ios
        │   │   └── konf-demo.xcodeproj
        │   ├── shared
        │   └── webassembly
        ├── common
        │   └── src
        ├── content
        ├── getopt
        ├── gradle
        ├── httpserver
        ├── json
        ├── kurl
        ├── sql
        └── utils
            ├── android
            ├── ios
            └── src

xcodeprojありました。これをXcodeで開いてみます。

TARGETS > konf-demo > Build Phasesを見てみる

この辺にキモになりそうな設定がありそうです。

Remove Original Binary

rm -f "$TARGET_BUILD_DIR/$EXECUTABLE_PATH"

Compile Kotlin Sources

$SRCROOT/../../gradlew -p $SRCROOT compileKonanApp -Pdisable.android=true

Replace Original Binary

cp "$SRCROOT/build/konan/bin/iphone/app.kexe" "$TARGET_BUILD_DIR/$EXECUTABLE_PATH"

あとは普通にbuild

あああ。AppleDeveloperCenterの登録が。。。

というわけで、ここで断念。片手落ちな結果ですが、続きは後々追記致します。。

まとめ(途中経過)

  • 運用を想定するなら、まだ時期尚早そう。
  • Rx系とかbindingsが整うの待ち
    • でも整えば、View以外を共通化してMVVMとかもできそう

次は @lycoris102 さんの「[Unity] 今年個人的に買ったアセット紹介2017」です。がっかりランキングも知りたい。

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6