Skip to content

[Setting] #264 - main 브랜치 push 시 App Store 심사 자동 제출 CI 구축 - #265

Merged
Guryss merged 6 commits into
developfrom
Setting/#264
Sep 15, 2026
Merged

Guryss merged 6 commits into
developfrom
Setting/#264

Conversation

@Guryss

@Guryss Guryss commented Sep 13, 2026 •

Copy link
Copy Markdown
Member

💡 Issue

💭 Summary

main에 push되면 App Store 심사 제출까지 자동으로 이어지는 CI를 만들었어요.

그 파이프라인을 실제로 쓰기 위한 develop→main 릴리스 PR 자동화 스킬(make-release-PR)도 같이 추가했어요.

CI 배선에 이어서, 그 CI가 실제로 열리는 조건인 컷오버 체크리스트(docs/TODO.md 4번)도 이 PR에서 같이 진행했어요 — 코드로 할 수 있는 항목(aps-environment 분리)은 구현했고, 나머지는 콘솔·실기기로 직접 확인해 진행 상황을 문서에 기록했어요.


🔑 Key Changes

CI 배선

  • release.yml 신설 — main push 트리거, CUTOVER_READY + app-store-release Environment 승인 게이트를 거쳐 fastlane release lane(빌드 + App Store 심사 제출) 실행
  • fastlane/Fastfile — release lane에 CUTOVER_READY 가드 추가(로컬 실행도 방어), deliver force: true
  • fastlane/metadata/ko/release_notes.txt 신설 — 심사 제출 릴리즈노트를 git으로 버전관리
  • test.yml — PR 대상에 main 추가(develop→main 릴리스 PR도 테스트/아키텍처 검사)

릴리스 PR 자동화

  • make-release-PR 스킬 + 스크립트 신설 — 버전·릴리즈노트를 물어보고, new-issue 재사용해 브랜치 생성 후 base=main PR 생성까지 자동화

컷오버 체크리스트 진행 (docs/TODO.md 4번)

  • aps-environment를 Debug/Release로 분리(7번 완료) — Project.swift의 CODE_SIGN_ENTITLEMENTS 빌드 설정으로 Debug는 기존 Support/WSS-iOS.entitlements(development), Release는 새로 추가한 Support/WSS-iOS-Release.entitlements(production)를 가리키게 했어요. 배포판만 production이어야 푸시가 배달돼요.
  • 3·4·5번 실측 확인 — Apple Sign-in capability(콘솔), Kakao 콘솔 iOS 플랫폼의 Bundle ID 등록, App Store Connect 앱 레코드(번들 ID·메타데이터·스크린샷)를 직접 확인했어요. 4번은 원래 문서에 있던 "키해시 등록 필요" 서술이 Android 전용 개념이라 iOS엔 해당 없다는 것도 같이 정정했어요.
  • 6번(실기기 리허설) 진행 방법 정리 — AppStore 배포 프로파일 서명 빌드는 USB로 실기기에 직접 설치할 수 없어 TestFlight 경유(release_beta lane)가 유일한 경로라는 걸 확인했고, main 머지/릴리즈 작업 시점에 이어서 진행하기로 했어요.

문서

  • docs/WORKFLOW.md, docs/TODO.md — 새 배포 파이프라인 + 컷오버 체크리스트 진행 상황 반영
  • Projects/App/CLAUDE.md — aps-environment 분리 구조·주의사항 갱신

GitHub 저장소 설정(코드 아님, 이미 반영됨)

  • main 브랜치 보호를 develop 수준으로 강화(required status check, force-push·삭제 금지)
  • app-store-release Environment 생성(승인자 Guryss·Naknakk, 배포 브랜치 main 제한)
  • CUTOVER_READY repo variable false로 등록

📱 Simulation

해당 없음 — UI 변경 없이 CI/tooling·설정 파일만 추가했어요(entitlements 분리는 Debug 시뮬레이터 빌드로 검증).


🧑‍🧒‍🧒 To Reviewer

  • CUTOVER_READY가 false인 동안은 main에 뭐가 push돼도 job 자체가 승인 요청 없이 skip돼요 — 컷오버 체크리스트(docs/TODO.md 4번) 끝나기 전엔 안전해요.
  • GitHub Actions secrets(ASC_KEY_ID 등)는 아직 하나도 등록 안 했어요 — 이것도 CUTOVER_READY 켜기 전에 채워야 해요.
  • 컷오버 체크리스트는 3·4·5·7번까지 확인·완료했고, 6번(실기기 리허설)·8번(secrets 등록·CUTOVER_READY 전환)은 main 머지/릴리즈 작업 시점에 이어가기로 보류했어요.
  • wss-pr-reviewer 2라운드 거쳐 Blocker·Warning 0으로 수렴했어요(1라운드에서 APP_IDENTIFIER_DEBUG 누락 등 발견해 수정).

※ Reference

🤖 Generated with Claude Code

@Guryss Guryss self-assigned this Sep 13, 2026
@github-actions

github-actions Bot commented Sep 13, 2026 •

Copy link
Copy Markdown

테스트 커버리지 리포트

Module Coverage
AuthData 55.3%
AuthDomain 98.2%
BaseDomain 70.3%
CollectionDomain 98.3%
CollectionFeature 0.0%
CommentData 0.0%
CommentDomain 94.9%
FeedData 62.8%
FeedDomain 98.7%
HomeFeature 0.0%
Keychain 0.0%
LibraryFeature 0.0%
Networking 78.0%
NotificationData 33.9%
NotificationDomain 100.0%
NotificationFeature 0.0%
NovelData 15.4%
NovelDetailFeature 0.0%
NovelDomain 92.9%
NovelReviewData 77.4%
NovelReviewDomain 96.8%
NovelReviewFeature 5.3%
ProfileData 46.1%
ProfileDomain 97.1%
RecommendationData 54.7%
RecommendationDomain 91.7%
SearchData 5.1%
SearchDomain 100.0%
SettingData 31.1%
SettingDomain 99.0%
SocialData 53.4%
SocialDomain 87.5%
SplashData 77.1%
SplashDomain 95.5%
SplashFeature 32.9%

Generated by CI on 2026-09-15 15:13 KST

Guryss and others added 3 commits September 15, 2026 00:59
- .github/workflows/release.yml 신설: main push 트리거, CUTOVER_READY + app-store-release
  Environment 승인 게이트를 거쳐 fastlane release lane 실행
- fastlane/Fastfile: release lane에 CUTOVER_READY 가드 추가(로컬 실행도 방어), deliver force: true
- fastlane/metadata/ko/release_notes.txt 신설: 심사 제출 릴리즈 노트 출처(git 버전관리)
- .github/workflows/test.yml: PR 대상에 main 추가(develop→main 릴리스 PR도 테스트/아키텍처 검사)
- docs/WORKFLOW.md, docs/TODO.md: 새 배포 파이프라인 반영

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xw3U9yFqRTVT96h2CQMHXQ
- .claude/scripts/make-release-pr.sh 신설: preflight(develop↔main 비교, 버전 참고값,
  대량 커밋일 때 PR 병합 단위 압축 롤업) + pr-create(base=main PR 생성)
- .claude/skills/make-release-PR/SKILL.md 신설: 버전·릴리즈노트 질문 → new-issue 재사용해
  브랜치 생성 → Project.swift/release_notes.txt 반영 커밋 → base=main PR 생성까지 절차화
- 이슈·브랜치 생성은 재발명하지 않고 기존 new-issue 스킬을 그대로 재사용

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xw3U9yFqRTVT96h2CQMHXQ
…불일치 수정

- release.yml: fastlane/Appfile이 로드 시점에 APP_IDENTIFIER_DEBUG도 ENV.fetch로 요구해
  release lane 실행 전 KeyError로 죽던 문제 수정(secret 전달 추가)
- release.yml: CONFIG_BASE_URL/CONFIG_BUCKET_URL 시크릿을 평범한 https:// 형태로 등록해도
  되도록 xcconfig // 주석 파싱 회피 이스케이프를 워크플로우가 자동 적용
- release.yml: permissions: contents: read 명시(최소권한, test.yml과 일관)
- docs/TODO.md: main 브랜치 보호·Environment는 이미 완료된 상태로 정정(WORKFLOW.md와 불일치
  해소), 시크릿 목록에 APP_IDENTIFIER_DEBUG 추가, deliver 메타데이터 확인 필요성 명시
- make-release-PR/SKILL.md: Project.swift 변경 후 Scripts/patch-spm-deployment-target.sh
  실행 단계 추가(루트 CLAUDE.md 비협상 누락)

wss-pr-reviewer 리뷰 반영 (Blocker 1, Warning 3)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xw3U9yFqRTVT96h2CQMHXQ
@Guryss
Guryss merged commit 754d4f2 into develop Sep 15, 2026
78 of 80 checks passed
@Guryss
Guryss deleted the Setting/#264 branch September 15, 2026 06:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Setting] main 브랜치 push 시 App Store 심사 자동 제출 CI 구축

1 participant