Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
node_modules/
.expo/
dist/
coverage/
*.jks
*.p8
*.p12
Expand Down
18 changes: 17 additions & 1 deletion README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ cd my-app && npm install && npx expo start
├── docs/
│ ├── EXPO_SETUP.md # Expo 계정 + EAS 설정
│ ├── APP_STORE_SETUP.md # Apple Developer + App Store Connect
│ └── PLAY_STORE_SETUP.md # Google Play Console 설정
│ ├── PLAY_STORE_SETUP.md # Google Play Console 설정
│ └── PRIVACY_MANIFEST.md # iOS PrivacyInfo.xcprivacy + Android 포토 피커 권한
├── scripts/
│ └── bump-version.js # app.json + package.json 버전 업
├── eas-hooks/
Expand Down Expand Up @@ -108,6 +109,7 @@ cd my-app && npm install && npx expo start
| CodeQL (`codeql.yml`) | 보안 취약점 정적 분석 (push/PR + 주간) |
| Maintenance (`maintenance.yml`) | 주간 CI 헬스 체크 — 실패 시 이슈 자동 생성 |
| Stale (`stale.yml`) | 비활성 이슈/PR 30일 후 라벨링, 7일 후 자동 종료 |
| CHANGELOG (`update-changelog.yml`) | 머지된 PR 항목을 `CHANGELOG.md`에 자동으로 추가 |

### CD Android (Actions 탭에서 수동 실행)

Expand Down Expand Up @@ -231,6 +233,20 @@ Google 로그인이 `expo-auth-session` + `expo-secure-store` 조합으로 **이

Expo는 TypeScript를 기본 지원합니다 -- 추가 설정 불필요.

## 설계 의도 (Design Intent)

- **클라우드 빌드 우선.** EAS가 기기 외부에서 네이티브 바이너리를 컴파일하므로, 로컬 Xcode/Android Studio 없이도 CI/CD가 동작합니다.
- **라우트 그룹 기반 인증.** `app/(app)/`이 보호 영역입니다 — 화면마다 "인증 확인" 코드를 흩뿌리지 않습니다.
- **OS 키체인에 시크릿 저장.** 토큰은 `expo-secure-store`를 통해 iOS Keychain / Android Keystore로 들어가며, `AsyncStorage`에는 절대 저장되지 않습니다.
- **모든 push에서 lint·test·audit.** 공급망 하드닝(`--ignore-scripts`, pinned gitleaks, CodeQL)이 기본 활성화 — 사후 작업이 아닙니다.

## 비목표 (Non-Goals)

- **TypeScript 기본.** 템플릿을 가볍게 유지하기 위해 JS로 시작합니다. 위 안내에 따라 선택적으로 전환할 수 있습니다.
- **커스텀 네이티브 모듈.** `expo prebuild` + 네이티브 코드가 필요한 경우는 범위 밖입니다. bare workflow를 사용하세요.
- **백엔드.** 클라이언트만 포함됩니다. 별도 API 레포와 조합하세요.
- **상태 관리 라이브러리.** Redux/Zustand 등을 포함하지 않습니다 — 인증 컨텍스트가 유일한 전역 상태입니다.

## 기여

PR 환영합니다. [PR 템플릿](.github/PULL_REQUEST_TEMPLATE.md)을 사용해 주세요.
Expand Down
18 changes: 17 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ Then scan the QR code with Expo Go (or press `a` for Android / `i` for iOS).
├── docs/
│ ├── EXPO_SETUP.md # Expo account + EAS setup
│ ├── APP_STORE_SETUP.md # Apple Developer + App Store Connect
│ └── PLAY_STORE_SETUP.md # Google Play Console setup
│ ├── PLAY_STORE_SETUP.md # Google Play Console setup
│ └── PRIVACY_MANIFEST.md # iOS PrivacyInfo.xcprivacy + Android photo picker permission
├── scripts/
│ └── bump-version.js # Bumps version in app.json + package.json
├── eas-hooks/
Expand Down Expand Up @@ -108,6 +109,7 @@ Then scan the QR code with Expo Go (or press `a` for Android / `i` for iOS).
| CodeQL (`codeql.yml`) | Static analysis for security vulnerabilities (push/PR + weekly) |
| Maintenance (`maintenance.yml`) | Weekly CI health check — auto-creates issue on failure |
| Stale (`stale.yml`) | Labels inactive issues/PRs after 30 days, auto-closes after 7 more |
| CHANGELOG (`update-changelog.yml`) | Appends merged-PR entries to `CHANGELOG.md` automatically |

### CD Android (manual trigger via Actions tab)

Expand Down Expand Up @@ -231,6 +233,20 @@ This template uses JavaScript to stay lightweight. To add TypeScript:

Expo supports TypeScript out of the box -- no extra configuration needed.

## Design Intent

- **Cloud-native builds.** EAS compiles native binaries off-device so CI/CD runs without local Xcode or Android Studio.
- **Auth gating via route groups.** `app/(app)/` is the protected zone — there is no "auth check" scattered across screens.
- **Secrets in the OS keychain.** Tokens go to iOS Keychain / Android Keystore through `expo-secure-store`, never `AsyncStorage`.
- **Lint, test, audit on every push.** Supply-chain hardening (`--ignore-scripts`, pinned gitleaks, CodeQL) is on by default — not an afterthought.

## Non-Goals

- **TypeScript by default.** Stays JS to keep the template small; opt-in steps are documented above.
- **Custom native modules.** Anything requiring `expo prebuild` + native code is out of scope. Use a bare workflow if you need it.
- **Backend.** This is the client only. Pair with a separate API repo.
- **State management library.** No Redux/Zustand/etc. — the auth context is the only global state shipped.

## Contributing

PRs welcome. Please use the [PR template](.github/PULL_REQUEST_TEMPLATE.md).
Expand Down
112 changes: 0 additions & 112 deletions coverage/clover.xml

This file was deleted.

6 changes: 0 additions & 6 deletions coverage/coverage-final.json

This file was deleted.

196 changes: 0 additions & 196 deletions coverage/lcov-report/app/(app)/about.js.html

This file was deleted.

Loading