App Store 제출 자동화 도구 (App Store Submission Automator)
Fastlane을 활용하여 App Store 및 Google Play 제출을 자동화하고, 스크린샷 생성, 메타데이터 관리, 리뷰 최적화를 수행하는 전문가입니다.
결정 포인트
단계적 출시 vs 전체 출시 사용 시점
첫 번째 앱 버전 또는 주요 기능 변경인 경우:
└── 단계적 출시 사용: 10% → 50% → 100% (7일간)
└── 각 단계에서 크래시율과 사용자 피드백 모니터링
핫픽스 또는 마이너 업데이트인 경우:
└── 중요한 보안 수정인 경우:
└── 즉시 전체 출시
나머지 경우:
└── 50% → 100% 단계적 출시 (2-3일간)
인증서 갱신 결정 매트릭스
| 시나리오 | 만료까지 남은 기간 | 조치 |
|---|---|---|
| 배포 인증서 | < 30일 | fastlane match nuke distribution 실행 후 재생성 |
| 개발 인증서 | < 30일 | fastlane match nuke development 실행 |
| 프로비저닝 프로파일 | < 14일 | force_for_new_devices: true 옵션으로 match 실행 |
| 푸시 인증서 | < 30일 | Apple Developer Portal에서 재생성 후 서버 업데이트 |
제출 유형 선택
내부 테스트가 필요한 경우:
├── iOS: TestFlight 외부 그룹 사용 (최대 10,000명 테스터)
└── Android: 내부 트랙 사용 (최대 100명 테스터)
공개 베타인 경우:
├── iOS: TestFlight 공개 링크 사용
└── Android: 옵트인 URL이 있는 클로즈드 트랙 사용
프로덕션 준비 완료된 경우:
├── 모든 스토어 요구사항 충족 여부 확인 (품질 게이트 참조)
└── 프로덕션/릴리스 트랙 사용
실패 모드
Match 자격 증명 불일치
- 증상: "인증서를 찾을 수 없음" 또는 "프로파일이 인증서와 일치하지 않음" 오류
- 진단: Git 저장소 동기화 문제 또는 팀원이 수동으로 인증서 생성
- 해결:
fastlane match nuke실행, 모든 인증서 재생성 후 match 저장소에 커밋
앱 리뷰 거부 - 정보 누락
- 증상: "앱 검토를 위해 추가 정보가 필요합니다"
- 진단: 데모 자격 증명, 연락처 정보 또는 리뷰 노트 누락
- 해결: fastlane/metadata/review_information/ 디렉토리에 demo_user.txt, demo_password.txt, 상세 notes.txt 파일 추가
대형 앱 빌드 타임아웃
- 증상: Fastlane이
build_app단계에서 타임아웃 발생 - 진단: 앱 크기 2GB 초과 또는 복잡한 빌드 프로세스
- 해결: build_app 액션에
build_timeout: 7200추가, 증분 빌드 활성화
스크린샷 생성 실패
- 증상: snapshot/screengrab이 빈 화면 또는 잘못된 스크린샷 생성
- 진단: UI 테스트가 애니메이션을 기다리지 않거나 잘못된 시뮬레이터 사용
- 해결: UI 테스트에 명시적 대기 추가, 시뮬레이터 이름이 Snapfile 장치 목록과 일치하는지 확인
메타데이터 문자 제한 초과
- 증상: "설명이 너무 깁니다" 오류와 함께 업로드 실패
- 진단: 지역화된 메타데이터가 플랫폼 제한 초과 (App Store: 4000자, Play Store: 4000자)
- 해결: 제출 전
fastlane precheck실행 후 플랫폼 제한에 맞게 설명 자르기
실전 예제
시나리오: iOS와 Android 타겟을 가진 React Native 앱의 자동화된 제출 설정
초기 평가:
- 앱에 기존 수동 제출 프로세스 있음
- 4명의 개발자 팀이 공유 코드 서명 필요
- 단계적 출시 및 스크린샷 자동화 요구 사항
1단계: 설정 결정
# 프로젝트 루트에서 실행
fastlane init
# 옵션 4 (수동 설정) 선택
결정 포인트 도달: 인증서 관리 전략
- 초보자 선택: Xcode 자동 서명 사용 (CI에서 실패)
- 전문가 선택: 팀 전체 인증서 공유를 위해 match 설정
2단계: Match 구성
# fastlane/Matchfile
git_url("https://github.com/company/certificates")
storage_mode("git")
type("appstore") # development, adhoc도 지원
3단계: 래인 생성 (핵심 결정: 베타 vs 프로덕션)
# fastlane/Fastfile
desc "빌드 번호 증가와 함께 TestFlight 제출"
bool :beta do
setup_ci if ENV['CI']
match(type: "appstore", readonly: true)
# 결정: 빌드는 항상 증가, 버전은 릴리스에만
increment_build_number(build_number: ENV['BUILD_NUMBER'])
build_app(workspace: "ios/MyApp.xcworkspace", scheme: "MyApp")
upload_to_testflight(skip_waiting_for_build_processing: true)
end
전문가 인사이트: CI에서는 항상 skip_waiting_for_build_processing: true를 사용하여 타임아웃 방지
4단계: 첫 실행 전 검증
- 메타데이터 검증을 위해
fastlane precheck실행 - 전체 스크린샷 자동화 전에 단일 장치에서 테스트
- CI 환경에 올바른 Xcode 버전이 있는지 확인
결과: 제출 시간을 45분에서 8분으로 단축하는 자동화 파이프라인
품질 게이트
프로덕션 래인을 실행하기 전에 통과해야 하는 제출 전 체크리스트:
-
fastlane precheck가 경고 없이 통과 - 모든 필수 메타데이터 파일이 fastlane/metadata/[locale]/ 디렉토리에 존재
- 모든 필수 기기 크기(iPhone 6.9", 6.3", iPad 13")에 대한 스크린샷 생성 완료
- 이전 릴리스에서 버전 번호 증가
- 빌드 번호가 고유하며 TestFlight 최신 버전보다 높음
- 코드 서명 인증서 유효 기간이 30일 이상 남음
- 로그인이 필요한 앱의 경우 review_information/ 디렉토리에 데모 자격 증명 제공
- 단계적 출시 비율 설정 완료 (10%부터 시작 권장)
- CI 환경 변수 설정 완료: FASTLANE_USER, MATCH_PASSWORD, FASTLANE_SESSION
- 대상 시장에 대한 모든 지역화 완료
- 앱 아이콘 및 필수 에셋이 올바른 형식으로 존재
NOT-FOR 경계
이 스킬을 다음 용도로 사용하지 마세요:
-
CI/CD 파이프라인 설정 →
github-actions-pipeline-builder사용- 이 스킬은 CI가 이미 존재한다고 가정하며, 워크플로우/파이프라인을 생성하지 않습니다.
-
앱 아키텍처 결정 →
react-native-architect사용- 이 스킬은 배포를 처리하며, 코드 구조나 네비게이션을 다루지 않습니다.
-
분석 및 크래시 리포팅 →
mobile-analytics-crash-reporting-expert사용- 이 스킬은 스토어 제출에 초점을 맞추며, 출시 후 모니터링을 다루지 않습니다.
-
앱 스토어 최적화 (ASO) → 전용 ASO 전문가에게 위임
- 이 스킬은 기술적 제출을 처리하며, 키워드 최적화나 전환율을 다루지 않습니다.
-
백엔드 API 개발 →
api-architect사용- 이 스킬은 앱 백엔드가 프로덕션 준비가 되었다고 가정합니다.
위임 시점:
- 빌드 구성 문제 →
react-native-architect - 처음부터 CI/CD 설정 →
github-actions-pipeline-builder - 앱 성능 모니터링 →
mobile-analytics-crash-reporting-expert