はじめに launchMode を singleTask や singleTop に設定し、アプリ起動中に通知やディープリンクから Activity を再利用する設計はよく使われます。このとき、新しく届いたパラメータは onNewIntent(intent) の引数から受...
活動
はじめに ソフトウェア開発において、関数やプロパティの再利用性が重要視されることは多いです。しかし、過度に汎用性が高いコンポーネントは、想定外の文脈で再利用されてしまうという誤用のリスクを伴います。 本記事では、Kotlin 2.4.0で安定化された言語機能であるcont...
はじめに Kotlinのcoroutineを使って非同期処理を実装する際、coroutineを起動するために launch や async を使います。 非同期処理を開始するという点では同じです。Job を扱いたい場合は launch、Deferred により結果を受け取...
はじめに 個人でAndroidアプリを開発していたとき、Google Playストア用のアイコンやスクリーンショットなどの画像アセットを用意するのが面倒だと感じました。 アプリのUIやデザインを変更するたびに、Figmaなどの外部ツール側も更新して、画像をエクスポートし...
はじめに Androidアプリを開発していると、ロゴ等のアニメーションを実現する方法の1つに AnimatedVectorDrawable があります。AnimatedVectorDrawable は公式にサポートされたアニメーションで、Android 12以降のスプラッ...
はじめに 最近SwiftUIを学んでいたら、View が再評価されるたびに、状態を保持しているにもかかわらずインスタンスが無駄に生成されるという現象に違和感を覚えました。調べたところ、この問題は他のエンジニアも感じている既知の問題だったようです。 iOS 17で導入された...
はじめに Kotlin 2.4.0のSwift Exportにより、Kotlinの Flow がSwift側から扱えるようになりました。Flow.asAsyncSequence() により、Swiftの AsyncSequence として処理できます。 この記事では、Sw...
はじめに Roborazziを使ってComposeのスクリーンショットテスト(画像回帰テスト)を行う際、デフォルトではシステムバーが含まれません。 この記事では、テスト時に擬似的なシステムバーを描画し、スクリーンショットの対象に含める方法を紹介します。 なぜシステムバー...
はじめに スマホは画面の四隅が丸くなっています。一方で、Composable はデフォルトでは四角いです。画面遷移アニメーションを作っている時にその形状の差を埋めたいと考えました。これを実現するには、各画面の Composable も端末に合わせて形状を変更する必要があり...
はじめに Navigation 3(Nav3)の NavDisplay では、通常の戻るアニメーション(popTransitionSpec)と、予測型「戻る」(Predictive back)アニメーション(predictivePopTransitionSpec)を別々に...