160 lines
5.2 KiB
Markdown
160 lines
5.2 KiB
Markdown
|
|
# {프로젝트명} — 빌드 및 배포
|
||
|
|
|
||
|
|
> **버전**: v1
|
||
|
|
> **작성일**: {날짜}
|
||
|
|
> **담당**: 개발팀장
|
||
|
|
> **적용 범위**: {프로젝트명} 빌드·배포 전 과정
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 1. 플랫폼별 빌드 설정
|
||
|
|
|
||
|
|
### 1.1 Android
|
||
|
|
|
||
|
|
| 항목 | 값 |
|
||
|
|
|------|-----|
|
||
|
|
| **Scripting Backend** | IL2CPP |
|
||
|
|
| **Target Architecture** | ARM64 (필수), ARMv7 (선택 — 구형 기기 지원 시) |
|
||
|
|
| **Minimum API Level** | Android 7.0 (API 24) 이상 권장 |
|
||
|
|
| **Target API Level** | 최신 API (Play Store 정책 준수) |
|
||
|
|
| **Internet Access** | Require |
|
||
|
|
| **Custom Main Gradle Template** | 서드파티 요구 시 활성화 |
|
||
|
|
| **Split APK / AAB** | 배포: AAB (Play Store), QA: APK |
|
||
|
|
|
||
|
|
**빌드 전 체크**:
|
||
|
|
- [ ] KeyStore 파일 경로·비밀번호 확인 (릴리스 빌드)
|
||
|
|
- [ ] `AndroidManifest.xml` 권한 최소화 검토
|
||
|
|
- [ ] ANR·크래시 없음 (에뮬레이터 + 실기기 모두)
|
||
|
|
|
||
|
|
### 1.2 iOS
|
||
|
|
|
||
|
|
| 항목 | 값 |
|
||
|
|
|------|-----|
|
||
|
|
| **Scripting Backend** | IL2CPP |
|
||
|
|
| **Target SDK** | Device SDK (배포), Simulator SDK (에뮬레이터 테스트) |
|
||
|
|
| **Minimum iOS Version** | 14.0 이상 권장 |
|
||
|
|
| **Signing** | Xcode Automatic Signing (Provisioning Profile) |
|
||
|
|
|
||
|
|
**빌드 전 체크**:
|
||
|
|
- [ ] Apple 개발자 인증서·Provisioning Profile 유효기간 확인
|
||
|
|
- [ ] `Info.plist` 권한 설명(NSPhotoLibraryUsageDescription 등) 입력
|
||
|
|
- [ ] TestFlight 업로드 전 크래시 없음 확인
|
||
|
|
|
||
|
|
### 1.3 Windows (Editor/Standalone)
|
||
|
|
|
||
|
|
| 항목 | 값 |
|
||
|
|
|------|-----|
|
||
|
|
| **용도** | 개발 에디터 + Windows Standalone QA |
|
||
|
|
| **Architecture** | x86_64 |
|
||
|
|
| **Scripting Backend** | Mono (Editor), IL2CPP (Standalone 배포 시) |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 2. 빌드 변형(Build Variant)
|
||
|
|
|
||
|
|
| 변형 | 로그 레벨 | 치트 | 용도 | 컴파일 심볼 |
|
||
|
|
|------|----------|------|------|------------|
|
||
|
|
| **Dev** | 전체 (Info+Warn+Error) | 활성 | 개발 중 디버깅 | `DEVELOPMENT_BUILD`, `ENABLE_CHEATS` |
|
||
|
|
| **QA** | 일부 (Warn+Error) | 활성 | QA 배포, 버그 재현 | `QA_BUILD`, `ENABLE_CHEATS` |
|
||
|
|
| **Release** | 최소 (Error만) | 비활성 | 스토어 제출 | (없음, 기본) |
|
||
|
|
|
||
|
|
**컴파일 심볼 활용 예시**:
|
||
|
|
```csharp
|
||
|
|
#if ENABLE_CHEATS
|
||
|
|
// 치트 메뉴, 수동 데이터 조작 코드
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if DEVELOPMENT_BUILD || UNITY_EDITOR
|
||
|
|
// 개발/에디터 전용 검증 코드
|
||
|
|
DataValidator.ValidateAll();
|
||
|
|
#endif
|
||
|
|
```
|
||
|
|
|
||
|
|
**컴파일 심볼 관리**:
|
||
|
|
- Player Settings > Other Settings > Scripting Define Symbols에서 설정
|
||
|
|
- NerdNavis.Framework의 `NerdNavis.Editor.Symbols` 도구를 활용하여 변형별 심볼 일괄 전환
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 3. 버전 관리
|
||
|
|
|
||
|
|
**버전 체계**: `Major.Minor.Patch` (Semantic Versioning)
|
||
|
|
|
||
|
|
| 구성 | 변경 기준 |
|
||
|
|
|------|----------|
|
||
|
|
| **Major** | 하위 호환 불가한 대규모 변경, 새 게임 모드 추가 등 |
|
||
|
|
| **Minor** | 새 기능 추가, 컨텐츠 업데이트 |
|
||
|
|
| **Patch** | 버그 수정, 밸런스 조정 |
|
||
|
|
|
||
|
|
**빌드 넘버**: 각 빌드마다 자동 증가 (CI/CD 또는 Editor 스크립트로 자동화)
|
||
|
|
|
||
|
|
```csharp
|
||
|
|
// NerdNavis.Editor.Build 도구 연동 또는 직접 구현
|
||
|
|
// PlayerSettings.bundleVersion = "1.2.3"
|
||
|
|
// PlayerSettings.Android.bundleVersionCode = 123 (Major*10000 + Minor*100 + Patch 권장)
|
||
|
|
```
|
||
|
|
|
||
|
|
**스토어 정책**:
|
||
|
|
- Android: `bundleVersionCode` 는 항상 단조 증가 (롤백 불가)
|
||
|
|
- iOS: `Build Number` 항상 단조 증가
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 4. 배포 파이프라인
|
||
|
|
|
||
|
|
```
|
||
|
|
[개발팀] 빌드 생성
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
코드 서명 (KeyStore / Apple Certificate)
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
업로드
|
||
|
|
├── Dev/QA → Firebase App Distribution / TestFlight / 사내 공유
|
||
|
|
└── Release → Google Play Console / App Store Connect
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
배포 완료 → 공유/일일보고 or PD 지시 로그 기록 (C13·P19)
|
||
|
|
```
|
||
|
|
|
||
|
|
**자동화 목표**:
|
||
|
|
- 빌드 트리거: Git 태그 push 또는 수동 트리거
|
||
|
|
- 업로드 자동화: `{선택 예: fastlane / GitHub Actions / Jenkins}`
|
||
|
|
- 배포 알림: 팀 내 채널 공유
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 5. 스토어 제출 체크리스트
|
||
|
|
|
||
|
|
### 5.1 공통 (Android / iOS 공통)
|
||
|
|
|
||
|
|
- [ ] **Release 빌드 변형** 으로 빌드 (ENABLE_CHEATS 없음 확인)
|
||
|
|
- [ ] **빌드 번호** 이전 버전보다 증가했는지 확인
|
||
|
|
- [ ] **콘솔 에러 없음** (P14: Unity 콘솔 에러 잔존 상태 배포 금지)
|
||
|
|
- [ ] **크래시 없음** (실기기 최소 1대 이상 검증)
|
||
|
|
- [ ] **IAP 영수증 서버 검증** 정상 동작 확인 (수상한잡화점 Critical 교훈)
|
||
|
|
- [ ] **AES 키 하드코딩 없음** 확인 (소스 검색: `02_기술스택_결정 섹션 3.2 참조`)
|
||
|
|
- [ ] **개발용 씬(`9x_Tool_*`) Build Settings에서 제외** 확인
|
||
|
|
- [ ] **권한 요청** 최소화 및 사유 명시 (`Info.plist` / `AndroidManifest.xml`)
|
||
|
|
- [ ] **개인정보처리방침 URL** 스토어 등록 완료
|
||
|
|
|
||
|
|
### 5.2 Android 추가
|
||
|
|
|
||
|
|
- [ ] **AAB 포맷** 제출 (APK 아님)
|
||
|
|
- [ ] **Target API Level** Play Store 현행 정책 충족
|
||
|
|
- [ ] **64-bit 지원** (ARM64 포함 빌드)
|
||
|
|
|
||
|
|
### 5.3 iOS 추가
|
||
|
|
|
||
|
|
- [ ] **TestFlight** 에서 베타 검증 완료
|
||
|
|
- [ ] **Provisioning Profile** 유효기간 충분히 남음
|
||
|
|
- [ ] **앱 심사 노트** 작성 (특수 기능 있는 경우)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 변경 이력
|
||
|
|
|
||
|
|
| 버전 | 일자 | 작성자 | 내용 |
|
||
|
|
|------|------|--------|------|
|
||
|
|
| v1 | {날짜} | 개발팀장 | 템플릿 초안. 수상한잡화점 Critical 3건 체크리스트 반영 |
|