README에 로그인 구성·폰트·제출 빌드 대응과 재빌드 방법 정리

This commit is contained in:
Sn-Kinos
2026-10-18 17:24:00 +09:00
parent 4236d75fd1
commit 3f59c5070e
+45 -8
View File
@@ -37,7 +37,17 @@ JDK 17 을 Flutter 에 지정합니다.
fvm flutter config --jdk-dir <JDK 17 경로> fvm flutter config --jdk-dir <JDK 17 경로>
``` ```
## 2. 저장소에 포함하지 않은 파일 ## 2. 이 브랜치 · 태그와 제출 빌드
| 브랜치 · 태그 | 커밋 | 대응 제출 빌드 | 산출물 SHA-256 |
|---|---|---|---|
| `project-1` · 태그 `v0.1.1+14` | `0d2394c` | 1차 보완 빌드 0.1.1(14) — Android APK · iOS TestFlight 같은 소스 | APK `7d2ebadc624666c7992ac92ac3aa5d2c5e7b4bd0c602efeabc194ec73c99eb52` · IPA `d00870facdb27d38b458cdadc5723190b9fb18bfba06c64f578e0705a28627c8` |
| 태그 `v0.2.0+10` | `be99511` | 2차 제출 빌드 0.2.0(10) | APK `856e15781d002aff066a02da0d53f9d8eeada9e1fc6b6fc139c0705c77342c2c`(릴리스 「2차 제출 빌드 v0.2.0+10」 첨부) |
| `project-2` | `4236d75` | 제출 빌드 없음 — 태그 `v0.2.0+10` 에 1차 보완(0.1.1+14) 내용을 합친 최신 코드 | — |
**재빌드 확인.** 태그를 체크아웃한 뒤 아래 3절 명령으로 빌드하면 같은 버전 · 빌드 번호의 APK 가 나옵니다. 서명 키가 달라 서명 블록은 다르므로, 비교는 `unzip -l` 로 본 파일 목록과 `classes*.dex` · `lib/*/libapp.so` 의 SHA-256 으로 합니다. 제출본과 같은 서명으로 다시 만들어야 하면 서명 키를 별도 보안 경로로 요청해 주십시오.
## 3. 저장소에 포함하지 않은 파일
아래 파일은 보안상 저장소에 넣지 않았습니다. 빌드 전에 준비해 주십시오. 아래 파일은 보안상 저장소에 넣지 않았습니다. 빌드 전에 준비해 주십시오.
@@ -45,16 +55,18 @@ fvm flutter config --jdk-dir <JDK 17 경로>
|---|---| |---|---|
| `android/app/google-services.json` | Firebase 콘솔 → 프로젝트 `fanuzu-dev-b020d` → 프로젝트 설정 → Android 앱(`kr.co.fanuzu.app`) | | `android/app/google-services.json` | Firebase 콘솔 → 프로젝트 `fanuzu-dev-b020d` → 프로젝트 설정 → Android 앱(`kr.co.fanuzu.app`) |
| `ios/Runner/GoogleService-Info.plist` | 같은 화면의 iOS 앱 | | `ios/Runner/GoogleService-Info.plist` | 같은 화면의 iOS 앱 |
| `config/kakao.env` | `config/kakao.env.example` 을 복사해 `FANUZU_KAKAO_NATIVE_APP_KEY`(카카오 네이티브 앱 키) · `FANUZU_LINE_CHANNEL_ID`(LINE Login 채널 ID)를 적습니다. 없으면 카카오 · LINE 로그인만 「설정 전」으로 막힙니다 |
| `firebase/functions/.env.<프로젝트>` | 서버 `fnAuthKakao` 의 `KAKAO_APP_ID`(카카오 앱 ID) · `fnAuthLine` 의 `LINE_CHANNEL_ID` 를 적습니다 |
| `android/key.properties` · 업로드 서명 키 | **릴리스(서명) 빌드에만** 필요합니다. 요청하시면 별도 보안 경로로 전달합니다. 디버그 빌드에는 필요 없습니다 | | `android/key.properties` · 업로드 서명 키 | **릴리스(서명) 빌드에만** 필요합니다. 요청하시면 별도 보안 경로로 전달합니다. 디버그 빌드에는 필요 없습니다 |
설정 파일이 없으면 앱은 표본 데이터로 동작하는 목(mock) 모드로 뜹니다(디버그 빌드에서만 진입 가능). 설정 파일이 없으면 앱은 표본 데이터로 동작하는 목(mock) 모드로 뜹니다(디버그 빌드에서만 진입 가능).
## 3. 앱 빌드 · 실행 ## 4. 앱 빌드 · 실행
```bash ```bash
cd app cd app
fvm flutter pub get fvm flutter pub get
fvm flutter run # 연결된 실기기 · 에뮬레이터에서 실행 fvm flutter run --dart-define-from-file=config/kakao.env # 연결된 실기기 · 에뮬레이터에서 실행
fvm flutter build apk --debug # 디버그 APK → build/app/outputs/flutter-apk/app-debug.apk fvm flutter build apk --debug # 디버그 APK → build/app/outputs/flutter-apk/app-debug.apk
fvm flutter build apk --release # 서명 릴리스 APK (key.properties 필요) fvm flutter build apk --release # 서명 릴리스 APK (key.properties 필요)
fvm flutter build ios --no-codesign # iOS 빌드 확인 fvm flutter build ios --no-codesign # iOS 빌드 확인
@@ -67,7 +79,7 @@ fvm flutter build ios --no-codesign # iOS 빌드 확인
| `FANUZU_SHARE_BASE_URL` | 공유 링크 주소(웹 브릿지) | 공유 시 링크 없이 카드 · 문구만 보냅니다 | | `FANUZU_SHARE_BASE_URL` | 공유 링크 주소(웹 브릿지) | 공유 시 링크 없이 카드 · 문구만 보냅니다 |
| `FANUZU_EMULATOR_HOST` | 로컬 Firebase 에뮬레이터 연결(개발용) | 실서버에 연결합니다 | | `FANUZU_EMULATOR_HOST` | 로컬 Firebase 에뮬레이터 연결(개발용) | 실서버에 연결합니다 |
## 4. 테스트 ## 5. 테스트
```bash ```bash
cd app cd app
@@ -86,7 +98,7 @@ npm run test:emulator # 서버 테스트 (Firestore 에뮬레
의존성을 바꾼 경우 `analyze` · `test` 만으로는 Android 네이티브 컴파일 오류를 잡지 못하므로 `fvm flutter build apk --debug` 까지 확인해 주십시오. `pubspec.lock` 의 `firebase_core` 는 4.13.0 이어야 합니다(4.14.0 에서 Android 컴파일이 실패합니다). 의존성을 바꾼 경우 `analyze` · `test` 만으로는 Android 네이티브 컴파일 오류를 잡지 못하므로 `fvm flutter build apk --debug` 까지 확인해 주십시오. `pubspec.lock` 의 `firebase_core` 는 4.13.0 이어야 합니다(4.14.0 에서 Android 컴파일이 실패합니다).
## 5. 서버 배포 ## 6. 서버 배포
```bash ```bash
cd app/firebase cd app/firebase
@@ -97,12 +109,37 @@ firebase deploy --only firestore,storage,functions --project fanuzu-dev-b020d
Storage 규칙 배포는 Firebase 콘솔에서 Storage 를 먼저 활성화해야 합니다. Storage 규칙 배포는 Firebase 콘솔에서 Storage 를 먼저 활성화해야 합니다.
## 6. 테스트 계정 · 권한 ## 7. 로그인 구성
- 릴리스 빌드의 로그인은 **Google 계정**으로 합니다. 각자의 Google 계정으로 가입하시면 됩니다. Apple 은 iOS(TestFlight) 준비 후, Kakao · LINE 은 제공자 앱 키 수령 후 연결합니다. 1차 로그인은 Google · Apple · Kakao · LINE 4종입니다(별첨 B). 이메일 · 비밀번호 가입과 X 로그인은 없습니다.
| 제공자 | 앱 쪽 | 서버 쪽 | Firebase 사용자 식별 |
|---|---|---|---|
| Google | Google 로그인 SDK | Firebase Authentication | `google.com` |
| Apple | iOS 는 Apple 로그인 SDK, Android 는 Firebase 웹 흐름 | Firebase Authentication | `apple.com` |
| Kakao | 카카오 SDK 로그인 | `fnAuthKakao` 가 카카오 토큰을 확인하고 Firebase 커스텀 토큰 발급 | `oidc.kakao` 제공자 ID 로 기록 |
| LINE | LINE SDK 로그인(앱 설치 시 LINE 앱, 없으면 웹 로그인) | `fnAuthLine` 이 LINE 토큰을 확인하고 Firebase 커스텀 토큰 발급 | `oidc.line` 제공자 ID 로 기록 |
- Kakao · LINE 은 Firebase OIDC 웹 흐름이 아니라 각 SDK 와 서버 커스텀 토큰으로 로그인합니다. 제공자 ID `oidc.kakao` · `oidc.line` 은 이전 가입자의 UID 를 유지하려고 그대로 씁니다.
- Kakao · LINE 이메일은 선택 동의 항목입니다. 이메일이 없어도 제공자 고유 식별값으로 가입 · 로그인합니다.
- **SNS 연결(MY › 설정)** 은 서버가 현재 로그인과 새 제공자의 인증 자격을 확인해 붙입니다. 이메일이 같은지는 보지 않으며, 다른 FANUZU 계정에 이미 붙은 제공자는 거부합니다. 마지막 남은 제공자는 뗄 수 없습니다.
## 8. 폰트
`pubspec.yaml` 에 등록되어 앱에 들어가 있습니다.
| 패밀리 | 파일 | 쓰임 |
|---|---|---|
| 42dot Sans | `assets/fonts/42dotSans[wght].ttf` | 본문(디자인 토큰 `font-body`) |
| ABeeZee | `assets/fonts/ABeeZee-Regular.ttf` | 제목 · 수치(디자인 토큰 `font-display` · `font-mono`) |
| Pretendard(Black, 라틴 부분집합) | `assets/fonts/Pretendard-Black-Latin.otf` | 홈 헤더 워드마크 · 이클립스 숫자 |
## 9. 테스트 계정 · 권한
- 로그인은 위 4종 가운데 각자의 계정으로 가입하시면 됩니다.
- 운영 기능(퀘스트 · 캠페인 검수, 타임어택 발동, 결과보고 등록 등)은 운영자 권한이 있는 계정만 호출할 수 있습니다. 권한을 드릴 Google 계정을 알려 주시면 운영자 권한을 부여합니다. - 운영 기능(퀘스트 · 캠페인 검수, 타임어택 발동, 결과보고 등록 등)은 운영자 권한이 있는 계정만 호출할 수 있습니다. 권한을 드릴 Google 계정을 알려 주시면 운영자 권한을 부여합니다.
## 7. 실기기에서만 확인 가능한 기능 ## 10. 실기기에서만 확인 가능한 기능
| 기능 | 이유 | | 기능 | 이유 |
|---|---| |---|---|