【Compose Multiplatform】プロジェクト移行の検討と開発ガイド
Compose Multiplatform(CMP)は開発者にクロスプラットフォーム開発の強力なツールを提供します
しかし、ComposeプロジェクトからCMPへの移行にはいくつかの課題もあります
本記事では移行プロセスにおける重要なポイントと注意点を詳しく説明します
目錄
- 【Compose Multiplatform】專案轉移探討與開發指南
- 【Compose Multiplatform】手機使用依賴注入Koin
- 【Compose Multiplatform 】跨平台App但Android需要context作法並搭配Koin
- 【Compose Multiplatform】手機本地持久化儲存DataStore實作
- 【Compose Multiplatform】手機資料庫SqlDelight實作
- 【Compose Multiplatform】CMP中使用ROOM開發資料庫 - [KSP2] Annotation value is missing in nested annotations
- 【Compose Multiplatform】CMP專案中導入CocoaPods及無CocoaPods情況下使用IOS Swift/Obj-C
最初に、CMPがどのようにクロスプラットフォームを実現しているかを理解する必要があります
そのため、プロジェクト構造を
理解するのに少し時間がかかります
以下で簡単に確認していきましょう
CMP開発では、複数のフォルダ構造に慣れる必要があります:
共通コードはcommonMainに配置します:
各環境で必要なライブラリをインポートします:
デフォルトではlib.version.tomlを使用して設定するため
.tomlについて理解する必要がありますが
実際には非常に簡単です
公式のデフォルト設定で十分機能します
特別な設定が必要でない限り
以前書いたメモがこちらにあります
参考まで
- 元々Androidプロジェクトでよく使われるライブラリや公式推奨のライブラリを使用していた場合(表の左側)
CMPで開発を試みた後、使用するライブラリの移行コストにいくつかのメリットを見つけることができます(表の右側)
これは、Compose開発でほとんど使用したことのあるものだからです
Feature | Compose Project | CMP Project |
---|---|---|
API | okhttp + retrofit2 | Ktor + Ktorfit |
navigation | navigation-compose | navigation-compose |
design | material 3 | material 3 |
DI | hilt | koin |
UI | jetpack compose | jetpack compose |
JSON | kotlinx.serialization | kotlinx.serialization |
Database | room | SqlDelight |
Image | coil | coil |
Push | FCM, UM, HW | 可能需自行實作各平台 |
Splash | splashscreen | 可能需自行實作或用 Compose 實現 |
- クロスプラットフォームの要件の違い:
例えば、AndroidはContextが必要ですが、iOSは必要ありません:
完全なメモ:【Compose Multiplatform】KoinでAndroidのContextを扱うクロスプラットフォームアプリの実装 -
プラットフォーム固有の実装:
例えば、モバイルではローカルの永続ストレージがよく使われます
Androidでは、この問題を処理するためにDataStoreを使用します
では、複数のプラットフォームでどのように使用すればよいでしょうか?
expectとactualキーワードの使用:
個別に実装する必要があるにもかかわらず
いくつかの一般的なライブラリは
CMPがKotlin実装でサポートしています
そのため、プラットフォーム別の実装でも、純粋な.ktで書くことができます
上記のiosMainで実装されたDataStoreのように - CMPライブラリの互換性問題やバグが継続的に修正されている:
例えば、SQLDelight 2.0.0バージョンではiOSでビルドエラーが発生します:
- 解決策1:stately-commonをインポートする
- 解決策2:バージョン2.0.1以上にアップグレードする
理由はこちらのディスカッションスレッドで確認できます:こちらをクリック
SQLDelightの完全なメモ:【Compose Multiplatform】SqlDelightデータベースの実装
- 解決策1:stately-commonをインポートする
Googleは2024年5月14日のブログでKMPへのサポートについて言及しています:
これは将来的により多くのライブラリがサポートされる可能性があることを意味するかもしれません。
- CMPは強力なクロスプラットフォーム開発機能を提供しますが、新しいプロジェクト構造への適応が必要です
- ほとんどの一般的なライブラリには対応するCMPバージョンがあります
例えば、Compose Appの開発でよく使用されるものは直接使用できます
DataStore、Roomなど - プラットフォームの違いを処理する際、expectとactualキーワードが非常に役立ちます
-
ライブラリのバージョン互換性の問題に注意してください
現在の開発では
いくつかの設定互換性の問題に遭遇しています
例:Kotlin 2.0.0でのRoom互換性の問題
CMPでCocoaPodsを設定する際のembedAndSignエラーなど - Googleの最新アップデートに注目して、さらなるサポートとリソースを得ましょう
GPTに直接尋ねてみましたが
それほど正確ではないかもしれません
多くの互換性問題は自分で調査する必要があります
あるいは将来的にデータがより豊富になれば、より正確な回答が得られるかもしれません