基本方針
print() は禁止。Logger(os.log)を使用する(CLAUDE.md準拠)。
共通設定
import OSLog
private static let logger = Logger(
subsystem: Bundle.main.bundleIdentifier ?? "com.happyboy1002.DailyTips",
category: "[クラス名]"
)
カテゴリ一覧
| カテゴリ | 用途 | 使用箇所 |
CoinService | コイン残高・ボーナス管理 | CoinService |
ThemeService | テーマ購入・選択 | ThemeService |
PremiumService | サブスク管理 | PremiumService |
NotificationService | ローカル通知 | NotificationService |
QuizService | 豆知識クイズ | QuizService |
GenreQuizService | ジャンルクイズ | GenreQuizService |
GenreProgressService | 進捗管理 | GenreProgressService |
FavoriteService | お気に入り | FavoriteService |
HistoryService | ログイン履歴 | HistoryService |
ReviewService | レビュー誘導 | ReviewService |
ShareService | SNS共有 | ShareService |
RewardedAdManager | Rewarded広告 | RewardedAdManager |
InterstitialAdManager | Interstitial広告 | InterstitialAdManager |
AppOpenAdManager | AppOpen広告 | AppOpenAdManager |
TipLoaderService | 豆知識読込 | TipLoaderService |
AppViewModel | アプリ全体状態 | AppViewModel |
Widget | Widget拡張 | SmallTipWidget, MediumCalendarWidget |
使用例
private static let logger = Logger(
subsystem: Bundle.main.bundleIdentifier ?? "",
category: "CoinService"
)
// 通常イベント
logger.info("ログインボーナス付与: streak=\(streak)")
// 警告
logger.warning("動画ボーナス上限到達")
// エラー
logger.error("daily_tips.json decode失敗: \(error.localizedDescription)")
ログレベルの使い分け
| レベル | 用途 | 例 |
.debug | 開発時のみ確認したい情報 | Widget タイムライン更新 |
.info | 通常のイベント | ログイン、コイン消費、テーマ購入 |
.notice | 注目すべきイベント | 初回起動、サブスク購入、ジャンル全アンロック |
.warning | 異常だが継続可能 | 広告ロード失敗、AppGroup nil検出 |
.error | 機能継続不可 | JSON decode失敗、StoreKit verification失敗 |
プライバシー対応
StoreKit のトランザクションID、Apple ID、デバイス識別子等は ログ出力しない。
識別子(豆知識ID、ジャンルID)は privacy: .public を明示。
Widget 拡張のロギング
Widget 拡張からのログも同じ subsystem に集約される。Console.app で subsystem == com.happyboy1002.DailyTips でフィルタすると、本体・Widget双方のログが見える。
変更履歴
| バージョン | 日付 | 変更内容 |
| 1.0 | 2026-05-09 | 初版作成(ソースコードからリバース) |