Files
submanager/CLAUDE.md
JiWoong Sul 83c43fb61f feat: SMS 스캔 전면광고 및 Isolate 버그 수정
## 전면 광고 (AdService)
- AdService 클래스 신규 생성 (lunchpick 패턴 참조)
- Completer 패턴으로 광고 완료 대기 구현
- 로딩 오버레이로 앱 foreground 상태 유지
- 몰입형 모드 (immersiveSticky) 적용
- iOS 테스트 광고 ID 설정

## SMS 스캔 버그 수정
- Isolate 내 Flutter 바인딩 접근 오류 해결
- _isoExtractServiceNameFromSender()에서 하드코딩 사용
- 로딩 위젯 화면 정중앙 배치 수정

## 문서 및 설정
- CLAUDE.md 최적화 (글로벌 규칙 중복 제거)
- Claude Code Skills 5개 추가
  - flutter-build: 빌드/분석
  - hive-model: Hive 모델 관리
  - release-deploy: 릴리즈 배포
  - sms-scanner: SMS 스캔 디버깅
  - admob: 광고 구현

## 버전
- 1.0.1+2 → 1.0.1+3
2025-12-08 18:14:52 +09:00

3.0 KiB

CLAUDE.md

프로젝트별 가이드. 일반 규칙은 ~/.claude/CLAUDE.md 참조.

Project Overview

SubManager - 구독 관리 앱 (Flutter 3.x)

항목 기술
DB Hive (로컬 전용)
상태관리 Provider + ChangeNotifier
디자인 Material 3
광고 google_mobile_ads

버전: 1.0.1+3

Quick Commands

# Hive 모델 생성
dart run build_runner build --delete-conflicting-outputs

# 빌드
flutter build apk --release           # APK
flutter build appbundle --release     # AAB (Play Store)

# 버전업 후 디바이스 설치
flutter install --release

Architecture

lib/
├── controllers/     # 비즈니스 로직 (3개)
│   ├── add_subscription_controller.dart
│   ├── detail_screen_controller.dart
│   └── sms_scan_controller.dart
├── models/          # Hive 모델 (@HiveType)
│   ├── subscription_model.dart    (typeId: 0)
│   ├── category_model.dart        (typeId: 1)
│   └── payment_card_model.dart    (typeId: 2)
├── providers/       # ChangeNotifier 상태관리
├── screens/         # 화면 위젯
├── services/        # 외부 서비스 연동
├── widgets/         # 재사용 컴포넌트
├── utils/           # 유틸리티 헬퍼
├── routes/          # 라우팅 정의
├── theme/           # 테마/색상
└── l10n/            # 다국어 (ko/en/ja/zh)

Key Services

Service 역할
AdService 전면 광고 (Completer 패턴)
SmsScanner SMS 파싱 → 구독 자동 감지 (Isolate 사용)
NotificationService 로컬 알림
ExchangeRateService 환율 조회
url_matcher/ 서비스명 → URL 매칭

Routes

Path Screen
/ MainScreen
/add-subscription AddSubscriptionScreen
/subscription-detail DetailScreen (requires SubscriptionModel)
/sms-scanner SmsScanScreen
/analysis AnalysisScreen
/settings SettingsScreen
/payment-card-management PaymentCardManagementScreen

Project Rules

  1. 로컬 전용: 서버/Firebase/외부 DB 금지
  2. 권한 거부 시: 수동 입력 폴백 (SMS), 기능 비활성화 (알림)
  3. 외부 API: Clearbit Logo API만 허용
  4. Isolate 주의: compute() 내부에서 Flutter 바인딩/Context 접근 불가

Known Patterns

전면 광고 (AdService)

// Completer 패턴으로 광고 완료 대기
final completer = Completer<bool>();
ad.fullScreenContentCallback = FullScreenContentCallback(
  onAdDismissedFullScreenContent: (ad) {
    completer.complete(true);
  },
);
ad.show();
return completer.future;

SMS 스캔 (Isolate)

// Isolate 내부에서는 하드코딩 사용
// Flutter 바인딩, Context, Provider 접근 불가
return 'Unknown service';  // AppLocalizations 사용 불가

Response Format

[모델명]. I have reviewed all the following rules: [규칙]. Proceeding with the task. Master!