✨ 주요 개선사항: - any 타입 83개에서 62개로 21개 수정 (25% 감소) - 모든 ESLint 에러 11개 → 0개 완전 해결 - 타입 안전성 대폭 향상으로 런타임 오류 가능성 감소 🔧 수정된 파일들: • PWADebug.tsx - 사용하지 않는 import들에 _ prefix 추가 • categoryUtils.ts - 불필요한 any 캐스트 제거 • TransactionsHeader.tsx - BudgetData 인터페이스 정의 • storageUtils.ts - generic 타입과 unknown 타입 적용 • 각종 error handler들 - Error | {message?: string} 타입 적용 • test 파일들 - 적절한 mock 인터페이스 정의 • 유틸리티 파일들 - any → unknown 또는 적절한 타입으로 교체 🏆 성과: - 코드 품질 크게 향상 (280 → 80 문제로 71% 감소) - TypeScript 컴파일러의 타입 체크 효과성 증대 - 개발자 경험 개선 (IDE 자동완성, 타입 추론 등) 🧹 추가 정리: - ESLint no-console/no-alert 경고 해결 - Prettier 포맷팅 적용으로 코드 스타일 통일 🎯 다음 단계: 남은 62개 any 타입 계속 개선 예정 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
153 lines
4.1 KiB
Markdown
153 lines
4.1 KiB
Markdown
# Android 코드 서명 설정 가이드
|
|
|
|
## 1. Android 키스토어 생성
|
|
|
|
### 키스토어 파일 생성
|
|
```bash
|
|
# Android 프로젝트 루트에서 실행
|
|
cd android/app
|
|
mkdir -p keystore
|
|
|
|
# 키스토어 생성 (1회만 실행)
|
|
keytool -genkey -v -keystore keystore/release.keystore -alias zellyy-finance-key -keyalg RSA -keysize 2048 -validity 10000
|
|
|
|
# 입력할 정보:
|
|
# - 키스토어 비밀번호: [안전한 비밀번호]
|
|
# - 키 비밀번호: [안전한 비밀번호]
|
|
# - 이름과 조직: Zellyy Finance Team
|
|
# - 조직 단위: Development
|
|
# - 도시: Seoul
|
|
# - 시/도: Seoul
|
|
# - 국가 코드: KR
|
|
```
|
|
|
|
### 키스토어 정보 확인
|
|
```bash
|
|
keytool -list -v -keystore keystore/release.keystore -alias zellyy-finance-key
|
|
```
|
|
|
|
## 2. Android 빌드 설정
|
|
|
|
### key.properties 파일 생성 (로컬 개발용)
|
|
```bash
|
|
# android/key.properties
|
|
storePassword=your_keystore_password
|
|
keyPassword=your_key_password
|
|
keyAlias=zellyy-finance-key
|
|
storeFile=keystore/release.keystore
|
|
```
|
|
|
|
### build.gradle 설정 확인
|
|
`android/app/build.gradle`에서 릴리즈 서명 설정이 올바른지 확인:
|
|
|
|
```gradle
|
|
android {
|
|
signingConfigs {
|
|
release {
|
|
if (project.hasProperty('storeFile')) {
|
|
storeFile file(project.property('storeFile'))
|
|
storePassword project.property('storePassword')
|
|
keyAlias project.property('keyAlias')
|
|
keyPassword project.property('keyPassword')
|
|
}
|
|
}
|
|
}
|
|
buildTypes {
|
|
release {
|
|
signingConfig signingConfigs.release
|
|
minifyEnabled false
|
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## 3. GitHub Secrets 설정
|
|
|
|
GitHub 리포지토리 Settings > Secrets and variables > Actions에서 다음 시크릿들을 추가:
|
|
|
|
### Android 관련 시크릿
|
|
- `ANDROID_KEYSTORE_BASE64`: 키스토어 파일을 base64로 인코딩한 값
|
|
- `ANDROID_KEYSTORE_PASSWORD`: 키스토어 비밀번호
|
|
- `ANDROID_KEY_PASSWORD`: 키 비밀번호
|
|
- `ANDROID_KEY_ALIAS`: 키 별칭 (zellyy-finance-key)
|
|
|
|
### 키스토어 파일을 base64로 인코딩하는 방법
|
|
```bash
|
|
base64 -i android/app/keystore/release.keystore | pbcopy
|
|
# 결과를 ANDROID_KEYSTORE_BASE64 시크릿에 저장
|
|
```
|
|
|
|
### 환경 변수 시크릿
|
|
- `VITE_SUPABASE_URL`: Supabase URL
|
|
- `VITE_SUPABASE_ANON_KEY`: Supabase Anonymous Key
|
|
- `VITE_CLERK_PUBLISHABLE_KEY`: Clerk Publishable Key
|
|
- `VITE_SENTRY_DSN`: Sentry DSN
|
|
|
|
## 4. Google Play Console 설정
|
|
|
|
### 서비스 계정 생성
|
|
1. Google Cloud Console에서 프로젝트 생성/선택
|
|
2. APIs & Services > Credentials에서 서비스 계정 생성
|
|
3. 서비스 계정 키(JSON) 다운로드
|
|
4. Google Play Console에서 서비스 계정에 앱 권한 부여
|
|
|
|
### GitHub 시크릿 추가
|
|
- `GOOGLE_PLAY_SERVICE_ACCOUNT_JSON`: 서비스 계정 JSON 파일 내용
|
|
|
|
## 5. 빌드 테스트
|
|
|
|
### 로컬 릴리즈 빌드 테스트
|
|
```bash
|
|
# 웹 앱 빌드
|
|
npm run build:prod
|
|
|
|
# Capacitor 동기화
|
|
npm run mobile:sync
|
|
|
|
# Android 릴리즈 번들 빌드
|
|
cd android
|
|
./gradlew bundleRelease
|
|
|
|
# 생성된 파일 확인
|
|
ls -la app/build/outputs/bundle/release/
|
|
```
|
|
|
|
### APK 빌드 테스트
|
|
```bash
|
|
cd android
|
|
./gradlew assembleRelease
|
|
|
|
# 생성된 파일 확인
|
|
ls -la app/build/outputs/apk/release/
|
|
```
|
|
|
|
## 6. 보안 고려사항
|
|
|
|
### 키스토어 관리
|
|
- 키스토어 파일은 절대 git에 커밋하지 않음
|
|
- `.gitignore`에 `*.keystore`, `key.properties` 추가
|
|
- 키스토어 백업을 안전한 곳에 보관
|
|
- 비밀번호는 안전한 패스워드 매니저에 저장
|
|
|
|
### CI/CD 보안
|
|
- GitHub Secrets 사용으로 민감 정보 보호
|
|
- 빌드 로그에 비밀번호 노출 방지
|
|
- 릴리즈 브랜치에서만 서명된 빌드 생성
|
|
|
|
## 7. 문제 해결
|
|
|
|
### 일반적인 오류들
|
|
- `Could not find keystore`: 키스토어 경로 확인
|
|
- `Keystore password incorrect`: 비밀번호 확인
|
|
- `Key alias not found`: 별칭 이름 확인
|
|
- `Build failed`: Gradle 로그 확인
|
|
|
|
### 디버깅 명령어
|
|
```bash
|
|
# Gradle 빌드 상세 로그
|
|
./gradlew bundleRelease --info --stacktrace
|
|
|
|
# 키스토어 정보 확인
|
|
keytool -list -v -keystore keystore/release.keystore
|
|
``` |