Skip to main content

Apple App Store 등록 및 심사 가이드

작성일: 2026-04-06 Last Updated: 2026-04-06 대상: Flutter Mobile App (iOS) 공통 참조: ../common/security.md (코드 서명), ../common/ci-cd.md (배포 파이프라인)


목차

  1. App Store 등록 절차
  2. App Store Connect 설정
  3. 스크린샷 규격
  4. App Store Review Guidelines 핵심
  5. 프라이버시 라벨 (App Privacy)
  6. 앱 추적 투명성 (ATT)
  7. In-App Purchase 설정
  8. TestFlight 베타 배포
  9. 심사 거부 대응 가이드
  10. 체크리스트

1. App Store 등록 절차

사전 요구사항

항목상세비용
Apple Developer Program개인 또는 조직 등록$99/년
D-U-N-S 번호조직 등록 시 필수 (무료 발급)무료
Apple ID2FA 필수 활성화-
Xcode최신 안정 버전무료
macOSXcode 호환 macOS-

등록 단계

단계작업소요 시간
1Apple Developer Program 가입 (https://developer.apple.com)개인: 즉시, 조직: 1-3일
2App Store Connect 접속 (https://appstoreconnect.apple.com)-
3인증서 생성 (Signing & Capabilities)30분
4App ID + Provisioning Profile 생성30분
5App Store Connect에서 앱 생성15분
6빌드 업로드 (Xcode 또는 CI)15-30분
7메타데이터 입력 + 스크린샷 업로드1-2시간
8심사 제출-
9심사 대기평균 24-48시간

인증서 관리 (CI/CD 환경)

# fastlane match 사용 권장 (팀 인증서 공유)
fastlane match init

# Matchfile 설정
git_url("https://github.com/myorg/certificates")
storage_mode("git")
type("appstore")
app_identifier("com.myapp.app")
team_id("TEAM_ID")

# 인증서 동기화
fastlane match appstore # App Store 배포용
fastlane match development # 개발용

2. App Store Connect 설정

앱 정보 입력 항목

필드설명예시
App Name스토어 표시 이름 (30자 이내)MyApp
Subtitle보조 설명 (30자 이내)스마트한 업무 관리 도구
Bundle ID고유 식별자com.mycompany.myapp
SKU내부 관리 코드MYAPP_IOS_2026
Primary Language기본 언어Korean
Category앱 카테고리 (최대 2개)Productivity, Business
Content Rights제3자 콘텐츠 포함 여부-
Age Rating연령 등급 질문 응답-

가격 및 사용 가능 여부

App Store Connect > App > Pricing and Availability
- 가격 유형 선택 (무료 / 유료 / Freemium)
- 국가별 출시 지역 선택
- 사전 주문 설정 (선택)

앱 심사 정보

필드설명
연락처 정보심사팀이 연락할 이메일/전화번호
데모 계정로그인 필요 앱은 테스트 계정 필수 제공
심사 노트특수 기능 설명, 테스트 방법 안내

주의: 데모 계정 미제공은 심사 거부 사유 1위. 반드시 유효한 테스트 계정 입력.


3. 스크린샷 규격

필수 디바이스 스크린샷

디바이스크기 (pixels)필수 여부대상
iPhone 6.7"1290 x 2796필수iPhone 15 Pro Max, 14 Pro Max
iPhone 6.5"1284 x 2778 또는 1242 x 2688필수iPhone 14 Plus, 11 Pro Max
iPhone 5.5"1242 x 2208선택iPhone 8 Plus (구형 지원 시)
iPad Pro 12.9" (6세대)2048 x 2732iPad 지원 시 필수iPad Pro
iPad Pro 12.9" (2세대)2048 x 2732iPad 지원 시 필수iPad Pro (구형)

스크린샷 요구사항

항목요구사항
수량디바이스당 최소 1개, 최대 10개
형식PNG 또는 JPEG (투명 배경 불가)
방향세로 또는 가로 (혼합 불가)
콘텐츠앱 실제 화면 기반 (과도한 목업 금지)
텍스트현지화 권장

자동 스크린샷 생성 (fastlane snapshot)

# Snapfile
devices([
"iPhone 15 Pro Max",
"iPhone 14 Plus",
"iPad Pro (12.9-inch) (6th generation)",
])

languages(["ko", "en-US", "ja"])

scheme("Runner")
output_directory("./fastlane/screenshots")
clear_previous_screenshots(true)
fastlane snapshot
fastlane deliver # 스크린샷 + 메타데이터 일괄 업로드

App Preview (동영상)

항목규격
길이15-30초
형식MP4, MOV
해상도스크린샷과 동일 해상도
오디오선택적 (음소거 가능)

4. App Store Review Guidelines 핵심

심사 거부 사유 Top 10

순위가이드라인거부 사유대응 방안
12.1 앱 완성도크래시, 미완성 기능, 플레이스홀더QA 완료 후 제출, 모든 링크 유효 확인
22.3.3 스크린샷실제 앱과 불일치실제 동작 화면 캡처 사용
34.0 디자인최소 기능 미달, 웹뷰 래핑네이티브 기능 활용, 고유 가치 제공
45.1.1 데이터 수집개인정보 수집 미고지프라이버시 라벨 정확 작성, 개인정보 처리방침
53.1.1 IAP 요구디지털 콘텐츠를 외부 결제로 처리디지털 콘텐츠는 반드시 IAP 사용
62.3.7 정확한 설명앱 설명과 실제 기능 불일치설명 정확히 기재
75.1.2 데이터 활용불필요한 권한 요청최소 권한 원칙, 용도 설명
84.2 최소 기능단순 웹사이트 래핑 앱네이티브 기능 (푸시, 오프라인 등) 추가
91.2 사용자 콘텐츠UGC 관리 기능 미비신고, 차단, 콘텐츠 필터링 구현
102.5.1 공개 API만 사용비공개 API 호출공식 SDK/API만 사용

주요 가이드라인 요약

3.1 결제

규칙설명
디지털 콘텐츠/구독반드시 IAP 사용 (Apple 수수료 15-30%)
물리적 상품/서비스외부 결제 가능 (Stripe 등)
Reader 앱외부 구매 콘텐츠 소비 가능 (앱 내 구매 유도 불가)
크로스 플랫폼 구독서버 검증으로 동기화 가능

4.0 디자인

규칙설명
Human Interface GuidelinesApple HIG 준수
네이티브 기능 활용웹뷰만의 앱은 거부 대상
최소 기능의미 있는 고유 기능 필수

5.1 프라이버시

규칙설명
개인정보 처리방침URL 필수 제공
프라이버시 라벨모든 데이터 수집 항목 정확 기재
목적 문자열카메라, 위치 등 권한 사용 이유 명시 (Info.plist)

5. 프라이버시 라벨 (App Privacy)

데이터 수집 카테고리

카테고리하위 항목 예시일반적 SaaS 앱 해당 여부
Contact Info이름, 이메일, 전화번호O
Identifiers사용자 ID, 디바이스 IDO
Usage Data앱 인터랙션, 기능 사용 통계O
Diagnostics크래시 데이터, 성능 데이터O
Location대략적 위치, 정확한 위치기능에 따라
Financial Info결제 정보직접 처리 시
Health & Fitness건강 데이터해당 시
Purchases구매 이력O

데이터 사용 목적

목적설명
App Functionality앱 핵심 기능 동작을 위해
Analytics사용 패턴 분석
Developer's Advertising자체 광고
Third-Party Advertising제3자 광고
Product Personalization개인화

프라이버시 라벨 작성 시 체크포인트

#확인 항목
1제3자 SDK (Firebase, Sentry 등)가 수집하는 데이터도 포함했는가?
2서버에서 수집하는 데이터도 포함했는가?
3데이터와 사용자 신원을 연결(Linked)하는지 정확히 구분했는가?
4추적(Tracking)에 해당하는 데이터 수집이 있는가?
5개인정보 처리방침 URL이 유효하고 최신인가?

6. 앱 추적 투명성 (ATT)

ATT 요구사항

iOS 14.5+부터 사용자 추적 시 반드시 ATT 권한 요청 필요.

추적에 해당하는 경우추적이 아닌 경우
IDFA를 광고 네트워크에 전송자사 분석만 수행 (Firebase Analytics 기본 설정)
사용자 데이터를 데이터 브로커에 공유사기 탐지, 보안 목적
광고 타겟팅용 이메일 해시 공유앱 내부 분석 (Linked to User이지만 Tracking 아님)

Flutter ATT 구현

// pubspec.yaml
// dependencies:
// app_tracking_transparency: ^2.0.0

import 'package:app_tracking_transparency/app_tracking_transparency.dart';

class TrackingPermission {
/// ATT 권한 요청 (앱 최초 실행 시)
static Future<TrackingStatus> requestPermission() async {
// iOS 14.5+ 에서만 동작, 그 외는 자동 authorized
final status = await AppTrackingTransparency.trackingAuthorizationStatus;

if (status == TrackingStatus.notDetermined) {
// 권한 요청 전 사용자에게 설명 다이얼로그 표시 (권장)
// -> "맞춤 광고를 위해 활동 추적 허용이 필요합니다"
// -> 시스템 다이얼로그 표시
return await AppTrackingTransparency.requestTrackingAuthorization();
}

return status;
}

/// IDFA 조회 (authorized 상태에서만 유효한 값 반환)
static Future<String?> getIdfa() async {
final status = await AppTrackingTransparency.trackingAuthorizationStatus;
if (status == TrackingStatus.authorized) {
return await AppTrackingTransparency.getAdvertisingIdentifier();
}
return null;
}
}

Info.plist 필수 설정:

<key>NSUserTrackingUsageDescription</key>
<string>맞춤형 콘텐츠와 광고를 제공하기 위해 활동 추적 권한이 필요합니다.</string>

ATT 권한 요청 UX 가이드

단계설명
1온보딩 완료 후 (앱 첫 실행 직후 X)
2사전 설명 다이얼로그 표시 (왜 필요한지)
3시스템 ATT 다이얼로그 표시
4거부 시 기능 제한 없이 정상 동작

7. In-App Purchase 설정

App Store Connect IAP 상품 등록

App Store Connect > App > In-App Purchases
상품 유형용도예시
Auto-Renewable Subscription정기 구독Pro 월간/연간
Non-Renewing Subscription비자동갱신 구독시즌 패스
Consumable소모품크레딧, 코인
Non-Consumable비소모품프리미엄 잠금 해제

StoreKit 2 (Flutter에서 사용)

// in_app_purchase 공식 패키지 사용
// pubspec.yaml
// dependencies:
// in_app_purchase: ^3.1.0

// 또는 RevenueCat 사용 권장 (크로스 플랫폼 통합 관리)
// -> in-app-purchase.md 상세 참조

구독 그룹 설정

App Store Connect > In-App Purchases > Subscription Groups

그룹: "Premium"
├── Pro Monthly ($9.99/월)
├── Pro Yearly ($79.99/년) <- 16% 할인 강조
└── Enterprise ($29.99/월)

같은 그룹 내 상품은 자동 업그레이드/다운그레이드 적용.

Introductory Offers 설정

Offer 유형설명제한
Free Trial무료 체험 (3일~1년)구독 그룹당 1회
Pay as You Go할인가 반복 (최대 3주기)구독 그룹당 1회
Pay Up Front할인가 일시불구독 그룹당 1회

8. TestFlight 베타 배포

TestFlight 개요

항목상세
내부 테스터최대 100명 (App Store Connect 사용자)
외부 테스터최대 10,000명 (이메일 초대 또는 공개 링크)
빌드 유효기간업로드 후 90일
외부 테스트 심사첫 빌드 + 주요 변경 시 (보통 24시간 이내)

업로드 방법

# 1. 빌드
flutter build ipa --flavor prod -t lib/main_prod.dart --release

# 2. Xcode에서 업로드
# Xcode > Product > Archive > Distribute App > App Store Connect

# 3. 또는 fastlane으로 자동화
fastlane pilot upload \
--ipa "./build/ios/ipa/MyApp.ipa" \
--skip_waiting_for_build_processing true

CI/CD 자동 TestFlight 배포

# .github/workflows/ios-testflight.yml (발췌)
- name: Upload to TestFlight
run: |
xcrun altool --upload-app \
--type ios \
--file build/ios/ipa/MyApp.ipa \
--apiKey ${{ secrets.APP_STORE_API_KEY_ID }} \
--apiIssuer ${{ secrets.APP_STORE_API_ISSUER_ID }}

테스트 그룹 관리

그룹대상용도
Internal QA개발팀, QA팀매 빌드 테스트
Beta Testers선별된 외부 사용자사용성 피드백
Public Beta공개 링크대규모 베타

9. 심사 거부 대응 가이드

거부 통보 시 대응 프로세스

단계작업기한
1Resolution Center에서 거부 사유 확인즉시
2해당 가이드라인 원문 정독1일
3수정 또는 이의 제기 결정1일
4a수정: 코드/메타데이터 수정 후 재제출가능한 빠르게
4b이의 제기: Resolution Center에서 상세 설명필요 시
5재심사 대기24-48시간

이의 제기 시 효과적인 작성법

[Resolution Center 답변 예시]

Dear Review Team,

Thank you for your review. We would like to address the concern
regarding Guideline X.X.

1. [구체적 사유 인용]
2. [해당 기능이 왜 가이드라인에 부합하는지 설명]
3. [스크린샷/동영상 첨부 (필요 시)]
4. [수정한 부분이 있다면 명시]

We have made the following changes:
- [변경사항 1]
- [변경사항 2]

Please let us know if further clarification is needed.

Best regards,
[이름]

거부 사유별 빈출 해결책

거부 가이드라인일반적 해결책
2.1 (미완성)모든 화면 동작 확인, 데드 링크 제거, 크래시 수정
2.3.3 (스크린샷)실제 앱 화면으로 교체, 과장 표현 제거
3.1.1 (IAP)디지털 콘텐츠 결제를 IAP로 전환
4.2 (최소 기능)네이티브 기능 추가 (푸시, 위젯, 오프라인)
5.1.1 (프라이버시)개인정보 처리방침 업데이트, 프라이버시 라벨 정확 기재

App Review Board (최종 수단)

3회 이상 거부 시 또는 판단에 동의할 수 없는 경우. https://developer.apple.com/contact/app-store/ 에서 Appeal 가능.


10. 체크리스트

App Store 제출 전 체크리스트

#카테고리항목필수
1기본Apple Developer Program 활성 상태O
2기본Bundle ID 등록 완료O
3기본인증서 + Provisioning Profile 유효O
4빌드릴리즈 빌드 크래시 없음O
5빌드최소 지원 iOS 버전에서 테스트 완료O
6빌드디버그 코드/로그 제거O
7메타데이터앱 이름, 부제목, 키워드 입력O
8메타데이터앱 설명 (한국어 + 영어)O
9메타데이터스크린샷 (6.7", 6.5" 필수)O
10메타데이터앱 아이콘 (1024x1024)O
11심사 정보데모 계정 (로그인 필요 앱)O
12심사 정보심사 노트 (특수 기능 설명)권장
13프라이버시개인정보 처리방침 URLO
14프라이버시프라이버시 라벨 (App Privacy) 작성O
15프라이버시Info.plist 권한 목적 문자열O
16프라이버시ATT 프레임워크 (추적 시)해당 시
17결제IAP 상품 등록 + "Ready to Submit" 상태해당 시
18결제Sandbox 테스트 완료해당 시
19법률EULA (라이선스 계약)권장
20법률연령 등급 질문 응답O

반복 제출 시 추가 확인

#항목
1이전 거부 사유 모두 해결했는가?
2Resolution Center에 변경 사항 설명 남겼는가?
3빌드 번호 증가했는가? (같은 번호 재제출 불가)
4스크린샷이 최신 빌드와 일치하는가?

Related: 인앱 결제 상세 | 공통 보안 | 공통 CI/CD