- どこでもKotlin #7 〜Kotlin MPP特集〜に参加してきました。
タイトル | 発表者 |
---|---|
Kotlin/MPPでX-PF事始めのつまづきポイント | yashims85 (モバイルファクトリー) |
How to publish a Kotlin Multiplatform Library | 荒谷 光 (サイバーエージェント) |
DroidKaigi 公式アプリのKotlin Multiplatform | takahirom (AbemaTV) |
Kotlin/NativeのiOSにおけるオーバーヘッド | 星川 貴樹 (エムスリー) |
Kotlin/MPPでX-PF事始めのつまづきポイント
- yashims85さん(モバイルファクトリー)
なぜKotlin/MPP?
- いい感じにクライアントサイドをリプレイスしたいから
Kotlin/MPP構成
- Android/iOSのクライアントアプリ
- クライアントのプレゼンテーションルータ
- KoRouter
- VueRouterみたいなもの
- KoRouter
- クライアントアプリ
- commonMain
- androidMain
- jvmMainのサブセット
- iOSMain
- main
- AndroidManifestが入ってるだけ
- 成果物.aar
まとめ
- 目的によって構成を変えよう
- なにが同じライブラリかどこかにまとめておくとよい
- kotlinx難しい
How to publish a Kotlin Multiplatform Library
- 荒谷 光さん(サイバーエージェント)
MPPライブラリのパッケージ構成
MPPライブラリのGradleの設定
- IntelliJだとKotlinの雛形選べる
まとめ
- Kotlin1.3からはbuild.gradleは一つで
- metadataの成果物はcommonのこと
- androidの配布はreleaseを明示的に
DroidKaigi 公式アプリのKotlin Multiplatform
- takahiromさん(AbemaTV)
Kotlin Multiplatformを導入しやすい構成に
- Ktor-Client + kotlinx.serializationを使う
- Andorid定番のRxJavaなどはMultiplatform非対応
- Modelで使うクラスはKotlin Multiplatformで使えるものだけにする
- Klockというライブラリで日時など扱える
Kotlin MultiplatformとDagger
- Dagger
- DIライブラリ
Dynamic feature module
- 必要ないものはあとかダウンロードしてくる
APIの環境切り替え
ハマったこと
- 古いiPhoneだと動かないとか
Ktolin Multiplatform使ってどうだったか
- Kotlinで書いたクラスやメソッドがXCodeの補完がきく
- キャストもうまく動いてる
Kotlin/NativeのiOSにおけるオーバーヘッド
- 星川 貴樹さん(エムスリー)
マイクロベンチマークの結果
ラムダ式の比較
- inline化するとあまり変わらなかった
- inline化しないとKotlin遅い
in(contains)の比較
- kotlinはだいたい遅い
- contains使うなら定数化するとよい
forEachの比較
- forEachとfor inとfor in step
- Kotlinのほうが圧倒的に速い
- 特にfor inとfor in stepが遅い
- kotlinでもforEachは遅い
ツールの紹介
AppCode
- SwiftとObjective-Cを快適に書けるIDE
- Kotlin/Nativeプラグインも提供中
Hopper Disassembler
- バイナリの逆アセンブルツール
相互運用のオーバーヘッド
- SwiftからKotlinを呼ぶコード遅い
- Kotlinのクラス生成が遅い
相互運用におけるオーバーヘッド
- Kotlin/Native内で完結する処理は割と高速
- Hopper便利