Diary

Diary

日々学んだことをアウトプットする場として初めてみました

ついに Compose Multiplatform に iOS がきたぞ!

Compose for iOSKotlinConf23 で発表されました(2023/04/19 現在 α 版)。

KMM において UI コードを共通化する大本命でもあるため注目度は高かったと思いますが、今回ついに公式から説明があったため触ってみました!。

[目次]

触ってみる

基本的にはこちらのテンプレートリポジトリを利用して遊ばせてもらいました。
個人のリポジトリ

前提条件

実際に動かしてみる

m1 mac でビルドするのに少し手間がかかりましたが、テンプレートリポジトリに従うだけで iOS のシミュレータにビルドできました!

Android で使ってた jetpack compose を移植してみる

Androidjetpack compose を使っていた方は気になるところかと思いますが、結論から言うとほとんど既存コードがそのまま共通コードとして使えました

これは compose-multiplatform のページにも ↓ のように書いてあるのでその通りかとは思います。

Compose Multiplatform shares most of its API with Jetpack Compose, the Android UI framework developed by Google. You can use the same APIs to build user interfaces for both Android and iOS.

余談にはなりますが、kotlinlang 用の slack ワークスペースに、compose-web, compose-ios のチャンネルがあるあたり、kotlin 側も力を入れてきてることが伺えます。

今回は、既存の jetpack compose のプロジェクトから適当に移植するだけで以下のような UI を作ることができました。 (左: iPhone14 シミュレータ (iOS), 右: Pixel6 実機 (android))

あとで感想としてまとめますが、『context, resource 周りにちょっと工夫が必要そう』ということで、一旦 dialog の表示などは飛ばしてます。 

なお、何もしなくてもデスクトプアプリのビルドも可能です(↓)。

環境

実行環境です。

- PC
    - macOS version 13.0.1 (mac mini)
    - Apple M1 chip
    - Memory 16 GB
- Android Project
    - android studio: Flamingo | 2022.2.1
    - compose: 1.4.0
    - kotlin: 1.8.20
    - agp: 7.4.2

感想

  • UI 部分については、ほぼ既存の compose のプロジェクからそのまま移植できるので楽!
    • context, resource 周りにちょっと工夫が必要そう
  • context は android context なんだな
  • 分かってないこと
  • kotlinlang > compose-ios の slack チャンネルがあり、650 人ほどいる
    • ここで解決する疑問も多いかも

おわりに

今回は compose-multiplatform に大本命 iOS が加わったということで、実際に動かして遊んでみました。
まだ α 版のステータスではありますが、間違いはないと思うのでこれからもおっていきたいです。

Flutter とかとの差別化も気になるところですが、Jetpack Compose, Kotlin が好きなので脳死でつっこみます。