name: fancake description: "FANUZU — 팬덤 플랫폼 앱 (골격). 발주사 (주)팬케이크 / 수행사 스위치 주식회사" publish_to: 'none' version: 0.1.1+13 environment: sdk: ^3.11.5 # ⚠️ 아래 의존성을 추가·변경·업그레이드하면 최소 지원 OS 하한을 재계산할 것. # 절차: 2주차 플러그인 선검증 리포트 §3.5 · 배경은 README §2 # 최소 지원 OS 는 별첨1 v1.0 에 계약값으로 들어간다 — 값이 틀리면 계약이 틀린다. dependencies: flutter: sdk: flutter # 5탭 셸(StatefulShellRoute) + 온보딩 라우트. flutter.dev 팀이 관리하는 공식 라우터다. go_router: ^17.4.0 # Firebase — 설정 파일(google-services.json / GoogleService-Info.plist)이 아직 없다. # 없으면 FirebaseBoot 이 목(mock) 모드로 뜬다. 파일 투입 절차는 README 「미투입 항목」 참고. firebase_core: ^4.13.0 firebase_auth: ^6.5.7 # 서버 연동 — 읽기는 Firestore 직결, 재화가 오가는 쓰기는 전부 Cloud Functions 를 지난다. # 이 구분이 별첨1 ② 「클라이언트 단독 지급 0건」을 앱 쪽에서 지키는 방법이다. cloud_firestore: ^6.3.0 cloud_functions: ^6.1.0 # Apple Sign-In nonce를 SHA-256으로 해시해 replay 공격을 막는다. crypto: ^3.0.7 # 소셜 로그인 — Google·Apple 은 각 SDK, LINE 은 Firebase OIDC(SDK 없음), 카카오는 아래 SDK. google_sign_in: ^7.2.0 sign_in_with_apple: ^8.1.0 # 카카오 로그인 — Kakao 공식 SDK. 카카오톡이 있으면 앱으로, 없으면 카카오계정 웹으로 로그인해 # 액세스 토큰을 받고 서버(fnAuthKakao)가 Firebase 커스텀 토큰으로 바꿔 준다. Android 에서 # Firebase OIDC 웹 흐름이 카카오톡 앱 전환 뒤 「missing initial state」로 깨져서 SDK 를 쓴다. # 최소 OS 하한 영향 없음: Android minSdk 24(앱 29) · iOS 13.0(앱 15.0). kakao_flutter_sdk_user: ^2.0.1 # LINE 로그인 — LINE 공식 SDK. LINE 앱이 있으면 앱으로, 없으면 SDK 웹 화면으로 로그인해 ID · 액세스 토큰을 # 받고 서버(fnAuthLine)가 Firebase 커스텀 토큰으로 바꿔 준다. iOS 에서 Firebase OIDC 웹 흐름이 첫 시도에 # 「missing initial state」로 깨져서 SDK 를 쓴다. 3.x 는 AGP 9 · Dart 3.12 전제라 2.x 를 쓴다. # 최소 OS 하한 영향 없음: Android minSdk 24(앱 29) · iOS 13.0(앱 15.0). flutter_line_sdk: ^2.7.2 dev_dependencies: flutter_test: sdk: flutter # 기기 위에서 앱을 띄워 에뮬레이터와 실제 왕복을 돈다. 위젯 테스트는 네트워크를 # 타지 않으므로 「로그인 → 계정 문서 생성」은 여기서만 확인할 수 있다. integration_test: sdk: flutter flutter_lints: ^6.0.0 # Firestore 연동 코드를 에뮬레이터 없이 검증한다. 쿼리·정렬·커서까지 흉내 내므로 # 「무엇을 읽어 무엇으로 옮기는가」를 실제로 돌려 볼 수 있다. fake_cloud_firestore: ^4.0.0 firebase_auth_mocks: ^0.15.0 # 런처 아이콘 생성기. 개발 의존성이라 앱에 포함되지 않는다. # 재생성: dart run flutter_launcher_icons flutter_launcher_icons: ^0.14.4 # 카카오 SDK(encrypt → pointycastle 3)와 firebase_auth_mocks 0.15(dart_jsonwebtoken 3 → # pointycastle 4)가 갈린다. 테스트 전용인 쪽을 내린다 — 앱에 실리는 암호 라이브러리는 그대로 둔다. # 둘 중 하나가 pointycastle 범위를 맞추면 지운다. dependency_overrides: dart_jsonwebtoken: ^2.17.0 # 앱 아이콘 — 2026-08-13 수령한 공식 `fanuzu logo only.png`의 중앙 1:1 영역을 # 픽셀 변경 없이 사용한다. `assets/brand/` 두 원본은 같은 공식 마크다. flutter_launcher_icons: android: true ios: true image_path: "assets/brand/app-icon.png" # Android 8+ 적응형 아이콘 — 마스크가 바깥을 잘라내므로 마크만 담은 전경을 따로 쓴다. adaptive_icon_background: "#120E25" # 투명 공식 마크 바깥의 브랜드 다크 배경 adaptive_icon_foreground: "assets/brand/app-icon-foreground.png" # iOS 는 알파 채널을 허용하지 않는다(App Store 심사 거부 사유). remove_alpha_ios: true flutter: uses-material-design: true # 발주사 Figma 실측 폰트 (2026-09-02). 42dot Sans 가 본문·라벨 전량, ABeeZee 가 숫자·영문 표시. # 둘 다 Google Fonts OFL 이라 동봉한다. design/design-tokens.md 의 font-* 와 짝이다. fonts: - family: 42dot Sans fonts: - asset: assets/fonts/42dotSans[wght].ttf - family: ABeeZee fonts: - asset: assets/fonts/ABeeZee-Regular.ttf assets: # Figma Iconset 아이콘(lib/core/ui/app_icons.dart). - assets/icons/