Skip to content

Compose Multiplatform 1.10.0-beta01 の新機能

このEAP機能リリースでの主なハイライトは以下のとおりです。

このリリースの変更点の全リストはGitHubで確認できます。

依存関係

クロスプラットフォーム

@Previewアノテーションの統合

プレビューに対するアプローチをクロスプラットフォームで統合しました。 これにより、commonMainソースセット内のすべてのターゲットプラットフォームでandroidx.compose.ui.tooling.preview.Previewアノテーションを使用できるようになりました。

org.jetbrains.compose.ui.tooling.preview.Previewやデスクトップ固有のandroidx.compose.desktop.ui.tooling.preview.Previewなど、その他のすべてのアノテーションは非推奨となりました。

Navigation 3は、Composeと連携するように設計された新しいナビゲーションライブラリです。 Navigation 3を使用すると、バックスタックを完全に制御でき、デスティネーションへの移動やデスティネーションからの移動は、リストからのアイテムの追加と削除と同じくらい簡単になります。 新しい指針と決定事項については、Navigation 3ドキュメントや、発表されたブログ投稿で読むことができます。

Compose Multiplatform 1.10.0-beta01は、Android以外のターゲットで新しいナビゲーションAPIを使用するためのアルファサポートを提供します。 リリースされたマルチプラットフォームアーティファクトは次のとおりです。

  • Navigation 3 UIライブラリ、org.jetbrains.androidx.navigation3:navigation3-ui
  • Navigation 3用ViewModel、org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-navigation3
  • Navigation 3用Material 3アダプティブレイアウト、org.jetbrains.compose.material3.adaptive:adaptive-navigation3

マルチプラットフォームNavigation 3実装の例は、オリジナルのAndroidリポジトリからミラーリングされたnav3-recipesサンプルで確認できます。

プラットフォーム固有の実装詳細をいくつか示します。

  • iOSでは、EndEdgePanGestureBehaviorオプション(デフォルトでDisabled)を使用して、端の端からのパンジェスチャによるナビゲーションを管理できるようになりました。 ここで言う「端の端」とは、LTRインターフェースでは画面の右端を指し、RTLインターフェースでは左端を指します。 開始端は端の端とは反対で、常に「戻る」ジェスチャに紐付けられています。
  • Webアプリでは、デスクトップブラウザでEscキーを押すと、デスクトップアプリと同様に、ユーザーを前の画面に戻す(およびダイアログ、ポップアップ、Material 3のSearchBarのような一部のウィジェットを閉じる)ようになりました。
  • ブラウザの履歴ナビゲーションとアドレスバーでのデスティネーションの使用のサポートは、Compose Multiplatform 1.10ではNavigation 3に拡張されません。 これはマルチプラットフォームライブラリの今後のバージョンに延期されました。

Skiaがマイルストーン138に更新されました

Compose MultiplatformでSkikoを介して使用されるSkiaのバージョンが、マイルストーン138に更新されました。

以前使用されていたSkiaのバージョンはマイルストーン132でした。 これらのバージョン間で行われた変更は、リリースノートで確認できます。

iOS

ウィンドウインセット

Compose Multiplatformは、ステータスバー、ナビゲーションバー、オンスクリーンキーボードなどのウィンドウインセットに基づいてUI要素を配置およびサイズ設定する機能を提供するWindowInsetsRulersをサポートするようになりました。

この新しいウィンドウインセット管理アプローチでは、プラットフォーム固有のウィンドウインセットデータを取得するために単一の実装を使用します。 これは、WindowInsetsWindowInsetsRulersの両方が、インセットを一貫して管理するための共通メカニズムを使用することを意味します。 したがって、LocalLayoutMarginsLocalSafeAreaLocalKeyboardOverlapHeightLocalInterfaceOrientationなどのプラットフォーム固有のローカルは、新しい統合APIに置き換えられました。

以前は、WindowInsets.Companion.captionBarには@Composable属性が付与されていませんでした。プラットフォーム間での動作を合わせるため、@Composable属性を追加しました。

IME構成の改善

1.9.0で導入されたiOS固有のIMEカスタマイズに続き、このリリースではPlatformImeOptionsを使用してテキスト入力ビューを構成するための新しいAPIが追加されました。

これらの新しいAPIにより、フィールドがフォーカスを取得してIMEをトリガーしたときの入力インターフェースのカスタマイズが可能になります。

  • UIResponder.inputView は、デフォルトのシステムキーボードを置き換えるカスタム入力ビューを指定します。
  • UIResponder.inputAccessoryView は、IMEアクティベーション時にシステムキーボードまたはカスタムinputViewにアタッチするカスタムアクセサリビューを定義します。

デスクトップ

Compose Hot Reloadの統合

Compose Hot Reloadプラグインが、Compose Multiplatform Gradleプラグインにバンドルされるようになりました。 デスクトップをターゲットとするCompose Multiplatformプロジェクトではデフォルトで有効になっているため、Hot Reloadプラグインを別途設定する必要がなくなりました。

Compose Hot Reloadプラグインを明示的に宣言しているプロジェクトに対する影響は以下のとおりです。

  • Compose Multiplatform Gradleプラグインによって提供されるバージョンを使用するため、宣言を安全に削除できます。
  • 特定のバージョン宣言を保持することを選択した場合、バンドルされたバージョンではなく、そのバージョンが使用されます。

バンドルされているCompose Hot Reload Gradleプラグインは、Compose Multiplatformプロジェクトに必要なKotlinバージョンを2.1.20に引き上げます。

SwingPanelの自動サイズ調整

SwingPanelは、コンテンツの最小サイズ、推奨サイズ、最大サイズに基づいて、自動的にサイズを調整するようになりました。 これにより、正確なサイズを計算したり、事前に固定寸法を指定したりする必要がなくなります。

kotlin
val label = JLabel("Hello Swing!")

singleWindowApplication {
    SwingPanel(factory = { label })

    LaunchedEffect(Unit) {
        delay(500)
        // Grows the text
        repeat(2) { 
            label.text = "#${label.text}#"
            delay(200)
        }
        // Shrinks the text
        repeat(2) { 
            label.text = label.text.substring(1, label.text.length - 1)
            delay(200)
        }
    }
}

Gradle

非推奨の依存関係エイリアス

Compose Multiplatform Gradleプラグインによってサポートされている依存関係エイリアス(compose.uiなど)は、1.10.0-beta01リリースで非推奨となりました。 バージョンカタログに直接ライブラリ参照を追加することを推奨します。 具体的な参照は、対応する非推奨通知で提案されています。

この変更により、Compose Multiplatformライブラリの依存関係管理がもう少し透過的になるはずです。 将来的には、互換性のあるバージョンの設定を簡素化するために、Compose Multiplatform用のBOMを提供したいと考えています。

AGP 9.0.0のサポート

Compose Multiplatformは、Android Gradle Plugin (AGP) バージョン9.0.0のサポートを導入します。 新しいAGPバージョンとの互換性を確保するには、Compose Multiplatform 1.9.3または1.10.0にアップグレードしてください。

長期的に更新プロセスをよりスムーズにするために、AGPの使用を専用のAndroidモジュールに分離するようにプロジェクト構造を変更することをお勧めします。