目的・役割
アプリ起動直後のメイン画面。TabView で2ページ構成(今日・カレンダー)。
各種ショップ・設定はここから sheet で起動。
UI 構成
| 要素 | 種類 | 説明 |
| トップバー | HStack | 左: 設定 / 右: テーマ・ジャンル・プレミアム |
| TabView(PageStyle) | SwiftUI Tab | 2ページ: 今日 / カレンダー |
| 豆知識カード | TipCardView | 当日 or 選択日のtip表示 |
| 動画ボーナスボタン | VideoBonusButton | +3pt獲得(1日5回まで) |
| バナー広告 | BannerAdView | 下部固定(無料ユーザーのみ) |
状態
| 状態 | 表示内容 |
| 無料ユーザー | バナー広告表示 |
| プレミアムユーザー | バナー非表示、テーマ自由選択 |
| レビュー誘導タイミング | 2秒遅延後、native in-app review |
遷移
| 操作 | 遷移先 |
| TabView スワイプ | 今日 ⇄ カレンダー |
| クイズボタン(カード内) | QuizView (.sheet) |
| ♥ ボタン | FavoriteService.toggleFavorite |
| 共有ボタン | ShareCardView 経由でShareSheet |
| 動画ボーナス | RewardedAdManager.show() |
| 設定ボタン | SettingsView (.sheet) |
| テーマ・ジャンル・プレミアム | 各 .sheet |
使用するデータモデル
AppViewModel {
var todayTip: DailyTip?
var selectedDate: Date
var shouldRequestReview: Bool
var isPremium: Bool
var coinBalance: Int
}
実装メモ
- TabView は
PageTabViewStyle
- scenePhase == .active 監視で AppOpenAd 再表示
- ReviewService で 5回目・20回目起動を判定
- ATT リクエストはアプリ起動時に DailyTipsApp で実施
関連
変更履歴
| バージョン | 日付 | 変更内容 |
| 1.0 | 2026-05-09 | 初版作成 |