【開発日記】渓流釣り向けアプリ #14 フォロー機能の整備とSwiftUIバグとの格闘

アプリ開発
今週はフォロー機能の見た目の整備、秘密の釣行まわりの機能追加、マップの改善、そして手ごわいSwiftUIバグとの格闘が続きました。

フォロー数の表示と一覧画面を追加した

先週実装したフォロー機能、数字は保存されているのに画面には出ていませんでした。マイページにフォロー中/フォロワー数を横並びで表示し、タップするとセグメントで切り替えられる一覧画面に遷移するようにしました。フォロワー数をDBに持っていなかった部分は followingCount フィールドを追加して対応しています。
フォロー数の表示と一覧画面を追加した

秘密の釣行で場所をシェアできるようにした

「秘密の釣行」フラグをオンにすると川名や詳細マップが他のユーザーから見えなくなりますが、承認した参加者にだけ詳細な場所を教える手段がありませんでした。オーナーが任意のタイミングで「場所をシェア」できるボタンを追加し、シェアされた参加者には通知とバッジが届くようにしました。シェア状態は参加申請ドキュメントに持たせたので、参加者ごとに管理できます。

マップのクラスタ色をステータスに連動させた

ピンがまとまってクラスタになると、中身のステータスに関わらず固定色で表示されていました。クラスタ内のメンバーを集計して「申請中あり→オレンジ、相談中あり→青、承認済みあり→緑、未応募のみ→グレー」と優先度順に色を決めるようにしました。「アクションが必要なものが目立つ順」に並べると自然と今の優先度になりました。
マップのクラスタ色をステータスに連動させた

マップまわりの細かいバグをまとめて直した

クラスタが混色になる問題(描画順のバグ)を修正し、マップカードの切り替えアニメーションがズレる問題も直しました。また通知をタップしてマップに戻ったとき、カードが正しい状態で表示されるよう遷移コンテキストも整備しています。

入力欄とナビゲーションの細かい修正

募集作成画面のタイトル入力欄が一定の長さで伸びなくなるバグ、バリデーションのタイミングの修正、お知らせから募集を開く際にスピナーが出ない問題などを修正しました。地味ですが使い勝手が改善されています。

タブ切り替えが初回だけ失敗するバグを突き止めた

チャット詳細画面の「メッセージ/募集詳細」タブが、iPhone 17 Pro Max(iOS 26)でだけ初回タップが無視される問題がありました。デバッグログを仕込んで調査した結果、別の箇所で走っていた withAnimation が同タイミングでタップを奪っていることが判明。アニメーションのガード処理を追加して解消しました。

SwiftUIのフラッシュアニメーションが動かなかった問題を解消した

通知タップ後にカードを黄色くフラッシュさせる機能で、「詳細画面から戻った直後だけ動かない」という問題がありました。原因は onChange の中で直接スクロールやアニメーションを呼んでいたこと。Task { @MainActor in } でラップしてワンティック遅延させるだけで解決しました。また LazyVStackphaseAnimator の相性問題(オフスクリーンのビューでトリガーが発火しない)にも遭遇し、暫定的に VStack で対処しています。

コメント

タイトルとURLをコピーしました