# 스토어 출시 자동화

## Google Play

`releaseWorker.js`가 다음 순서로 처리합니다.

1. 암호화된 서비스 계정 JSON 복호화
2. Android Publisher Edit 생성
3. AAB 업로드
4. 선택한 `internal`, `alpha`, `beta`, `production` 트랙 갱신
5. `draft` 또는 `completed` 상태 적용
6. Edit 커밋
7. 외부 Edit ID와 결과 저장

프로덕션 트랙은 먼저 `draft`로 등록하고 Play Console에서 검수한 후 반영하는 운영 방식을 권장합니다.

## Apple App Store

macOS 워커에서 다음 순서로 처리합니다.

1. Issuer ID, Key ID, `.p8` 개인 키 복호화
2. 작업 전용 임시 HOME과 private key 디렉터리 생성
3. `xcrun altool`과 API Key 인증으로 IPA 업로드
4. 응답과 외부 식별정보 저장
5. 임시 키 디렉터리 삭제

현재 단계는 App Store Connect에 바이너리를 올리는 기능입니다. Apple 측 빌드 처리 완료 조회, TestFlight 그룹 연결, 앱 버전 생성 및 최종 심사 제출은 후속 어댑터로 추가합니다.

## 자격증명 형식

Google Play:

```json
{
  "serviceAccount": {
    "type": "service_account",
    "project_id": "...",
    "client_email": "...",
    "private_key": "-----BEGIN PRIVATE KEY-----..."
  }
}
```

Apple:

```json
{
  "issuerId": "00000000-0000-0000-0000-000000000000",
  "keyId": "ABCDEFGHIJ",
  "privateKey": "-----BEGIN PRIVATE KEY-----..."
}
```

웹 화면에 입력된 값은 PHP `SecretBox`에서 AES-256-GCM으로 암호화하고 Node `secretBox.js`가 동일 형식으로 복호화합니다. 업로드 워커가 비정상 종료된 작업은 중복 전송 위험 때문에 자동 재시도하지 않고 실패 처리합니다. 스토어 수락 여부를 먼저 확인하십시오.
