パスキーでのログインを実装した流れで、次は新機能を追加した際にユーザーへ自然に使い方を伝える方法を探しており、TipKitを使ってみました。
1. 表示条件を細かく設定しなくても勝手に賢く出ると思っていた
最初、TipKitを組み込むだけで、ユーザーの操作状況に応じて自動的に適切なタイミングでヒントが出るものだと思い込んでいました。
struct FilterTip: Tip {
var title: Text { Text("絞り込みができます") }
}
実際にはどの操作の何回目で表示するか、どんな条件がそろったら表示するかを、RuleやEventを使って自分で定義する必要がありました。何もしなければ画面を開いた瞬間に毎回同じヒントが出るだけで、思っていたより手動での設計が必要な仕組みでした。
2. 一度非表示にしたヒントが二度と出ないことに戸惑った
動作確認のため一度ヒントを閉じたところ、アプリを再起動しても二度と同じヒントが表示されなくなりました。
TipKitのデフォルト挙動:
一度invalidateまたは閉じられたTipは再表示されない
最初はバグかと思ったのですが、これは「一度見た情報はもう見せない」というTipKitの意図した仕様でした。開発中に何度も表示確認をしたい場合は、専用のデータストアをリセットする設定を使う必要があると分かりました。
3. 複数のヒントが同時に表示されて画面が煩雑になった
新機能を追加するたびにTipを増やしていったところ、ある画面で複数のヒントが同時に表示され、かえって分かりにくい見た目になってしまいました。
発生した問題:
1つの画面に3つのTipが同時にポップアップ
TipKitには表示の優先順位を制御する仕組みがあり、TipGroupを使って「同時に出すのは1つまで」というグループ設定に変更しました。機能を追加するたびに闇雲にTipを増やすのではなく、画面ごとに本当に必要なヒントを絞り込む視点が必要だと感じました。
4. 本番環境で意図せずヒントが出ないことがあった
TestFlightでの確認時、開発中には問題なく表示されていたヒントが、一部の環境で表示されないことがありました。
調べてみると、条件の判定に使っていたイベントの発火タイミングが実機の起動直後では間に合っておらず、条件がそろう前に判定処理が終わってしまっていたことが原因でした。表示条件に使うイベントの発火位置を、画面表示が完全に終わったあとに移すことで解決しました。
まとめ
- TipKitは自動で賢く表示してくれるわけではなく、表示条件は自分で
RuleやEventを使って設計する - 一度閉じたTipは再表示されない仕様。開発中の確認にはデータストアのリセットが必要
- 複数のTipが同時に出ないよう、
TipGroupで画面ごとに表示数を制御する - イベントの発火タイミングによっては、本番環境で条件判定がすり抜けることがあるので発火位置に注意する
ちょっとした親切機能のつもりが、表示条件の設計次第でユーザー体験が大きく変わると実感した実装でした。
次は、Core Spotlightでアプリ内の検索をSpotlightに公開してみて分かったことをまとめます。
本記事は生成AI(Claude)を活用して執筆・編集しています。内容は実体験に基づき、執筆者本人が確認・監修しています。


コメント