Android / iOS 배포 절차
Flutter 앱을 개발한 후 사용자들에게 제공하기 위해 앱 스토어에 배포하는 절차를 알아봅니다. Android와 iOS 플랫폼은 각각 다른 배포 프로세스를 가지고 있습니다.
배포 준비 체크리스트
Section titled “배포 준비 체크리스트”앱 스토어에 제출하기 전에 다음 항목을 먼저 확인하세요:
- 모든 주요 기능 테스트 완료
- 앱 아이콘 및 스플래시 스크린 구현
- 다양한 화면 크기/해상도 테스트
- 접근성 지원 확인
- 개인정보 처리방침 준비
- 앱 스크린샷 및 설명 준비
Android 앱 배포 절차
Section titled “Android 앱 배포 절차”1. 배포용 키스토어 생성
Section titled “1. 배포용 키스토어 생성”Android 앱을 서명하기 위한 키스토어(keystore) 파일을 생성해야 합니다. 이 키는 앱 업데이트 시 동일한 키로 서명해야 하므로 안전하게 보관해야 합니다.
keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
2. 키스토어 설정
Section titled “2. 키스토어 설정”android/app/build.gradle
파일에 키스토어 정보를 추가합니다. 보안을 위해 다음과 같이 별도의 파일로 관리합니다.
android/key.properties
파일 생성:
storePassword=<키스토어 비밀번호>keyPassword=<키 비밀번호>keyAlias=uploadstoreFile=<키스토어 파일 경로, 예: /Users/username/upload-keystore.jks>
android/app/build.gradle
파일 수정:
// 파일 상단에 다음 코드 추가def keystoreProperties = new Properties()def keystorePropertiesFile = rootProject.file('key.properties')if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile))}
android { // 기존 코드 ...
signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null storePassword keystoreProperties['storePassword'] } } buildTypes { release { signingConfig signingConfigs.release // 기타 릴리즈 설정 ... } }}
3. 앱 버전 설정
Section titled “3. 앱 버전 설정”pubspec.yaml
파일에서 앱 버전을 설정합니다.
version: 1.0.0+1 # <버전 이름>+<빌드 번호>
4. 앱 매니페스트 설정
Section titled “4. 앱 매니페스트 설정”android/app/src/main/AndroidManifest.xml
파일에서 필요한 권한과 설정을 확인합니다.
<manifest ...> <!-- 필요한 권한 설정 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 기타 필요한 권한들 -->
<application android:label="앱 이름" android:icon="@mipmap/ic_launcher" ...> <!-- 앱 설정 --> </application></manifest>
5. 앱 번들/APK 생성
Section titled “5. 앱 번들/APK 생성”Google Play는 Android App Bundle(AAB) 형식을 권장합니다.
# App Bundle 생성 (권장)flutter build appbundle
# 또는 APK 생성flutter build apk --release
빌드된 파일은 다음 위치에서 찾을 수 있습니다:
- App Bundle:
build/app/outputs/bundle/release/app-release.aab
- APK:
build/app/outputs/flutter-apk/app-release.apk
6. Google Play Console에 앱 등록
Section titled “6. Google Play Console에 앱 등록”- Google Play Console에 로그인합니다.
- “새 앱 만들기”를 선택합니다.
- 앱 정보(이름, 언어, 앱/게임 여부, 유료/무료 여부)를 입력합니다.
- 개인정보 처리방침 URL을 제공합니다.
- 다음 정보를 등록합니다:
- 앱 카테고리 및 태그
- 연락처 정보
- 스크린샷, 프로모션 이미지, 앱 아이콘
- 앱 설명(짧은 설명 및 전체 설명)
7. 앱 번들 업로드
Section titled “7. 앱 번들 업로드”- “앱 릴리즈” > “프로덕션” 트랙 선택
- “새 릴리즈 만들기” 클릭
- 생성한 App Bundle(.aab) 파일 업로드
- 릴리즈 노트 작성
- 검토 후 출시
8. 출시 및 검토
Section titled “8. 출시 및 검토”Google Play 검토 프로세스는 보통 몇 시간에서 며칠까지 소요될 수 있습니다. 검토 완료 후 앱이 출시됩니다.
iOS 앱 배포 절차
Section titled “iOS 앱 배포 절차”1. Apple Developer Program 가입
Section titled “1. Apple Developer Program 가입”iOS 앱을 App Store에 배포하려면 연간 $99의 비용으로 Apple Developer Program에 가입해야 합니다.
2. Xcode에서 인증서 및 프로비저닝 프로필 설정
Section titled “2. Xcode에서 인증서 및 프로비저닝 프로필 설정”- Xcode 열기:
open ios/Runner.xcworkspace
- “Signing & Capabilities” 탭에서 팀 선택 및 자동 서명 활성화
- 번들 ID 설정 (고유한 식별자, 예: com.yourcompany.appname)
3. 앱 버전 및 빌드 번호 설정
Section titled “3. 앱 버전 및 빌드 번호 설정”pubspec.yaml
파일에서 버전을 설정합니다:
version: 1.0.0+1 # <버전 이름>+<빌드 번호>
iOS 특정 버전은 Xcode의 Runner 프로젝트 설정이나 ios/Runner/Info.plist
파일에서도 확인/수정할 수 있습니다.
4. iOS 앱 설정
Section titled “4. iOS 앱 설정”ios/Runner/Info.plist
파일에서 필요한 설정을 확인합니다:
<key>CFBundleDisplayName</key><string>앱 이름</string>
<!-- 필요한 권한 설명 추가 --><key>NSCameraUsageDescription</key><string>카메라 사용 이유 설명</string>
5. 앱 아이콘 설정
Section titled “5. 앱 아이콘 설정”ios/Runner/Assets.xcassets/AppIcon.appiconset
에 다양한 크기의 앱 아이콘을 추가합니다.
6. 릴리즈 빌드 생성
Section titled “6. 릴리즈 빌드 생성”flutter build ios --release
7. Xcode에서 Archive 생성
Section titled “7. Xcode에서 Archive 생성”- Xcode에서 “Product” > “Destination” > “Any iOS Device” 선택
- “Product” > “Archive” 선택
- Archive가 완료되면 Xcode Organizer가 자동으로 열립니다
8. TestFlight를 통한 테스트 (선택 사항)
Section titled “8. TestFlight를 통한 테스트 (선택 사항)”TestFlight를 통해 앱을 테스터에게 배포하여 최종 테스트를 진행할 수 있습니다.
- Xcode Organizer에서 Archive 선택
- “Distribute App” > “App Store Connect” > “Upload” 선택
- 앱 배포 옵션 설정 (자동 서명 권장)
- 업로드 완료 후 App Store Connect에서 TestFlight 구성
- 내부 및 외부 테스터 추가
9. App Store Connect에서 앱 정보 설정
Section titled “9. App Store Connect에서 앱 정보 설정”- App Store Connect에 로그인
- “내 앱” > ”+” > “새로운 앱” 선택
- 다음 정보 입력:
- 앱 이름, 기본 언어, 번들 ID
- SKU (내부 추적용 고유 ID)
- 사용자 액세스 설정
10. 앱 정보 등록
Section titled “10. 앱 정보 등록”- App Store 정보 탭에서 다음 항목 작성:
- 프로모션 텍스트 (최대 170자)
- 설명 (최대 4,000자)
- 키워드 (최대 100자)
- 지원 URL 및 마케팅 URL
- 스크린샷 (다양한 기기 크기별)
- 앱 미리보기 영상 (선택 사항)
- 앱 아이콘 (1024x1024 픽셀)
- 연령 등급
- 개인정보 처리방침 URL
- 가격 및 가용성
11. 앱 심사 제출
Section titled “11. 앱 심사 제출”- “앱 버전” 섹션에서 제출할 빌드 선택
- 필요한 수출 규정 준수 정보 제공
- “심사를 위해 제출” 클릭
12. 앱 심사 및 출시
Section titled “12. 앱 심사 및 출시”Apple의 앱 심사는 보통 1-3일 소요됩니다. 거부될 경우 이유가 제공되며, 수정 후 재제출할 수 있습니다. 승인되면 “출시 준비됨” 상태가 되고, 수동 또는 자동으로 출시할 수 있습니다.
CI/CD를 활용한 자동화 배포
Section titled “CI/CD를 활용한 자동화 배포”배포 과정을 자동화하기 위해 CI/CD 도구를 활용할 수 있습니다. 대표적인 도구로는 Codemagic, Fastlane, GitHub Actions 등이 있습니다.
Codemagic 활용 예시
Section titled “Codemagic 활용 예시”codemagic.yaml
파일 구성:
workflows: android-workflow: name: Android Release environment: vars: KEYSTORE_PATH: /tmp/keystore.jks FCI_KEYSTORE_FILE: Encrypted(...) # 키스토어 파일 암호화 flutter: stable scripts: - name: Set up keystore script: echo $FCI_KEYSTORE_FILE | base64 --decode > $KEYSTORE_PATH - name: Build AAB script: flutter build appbundle --release artifacts: - build/app/outputs/bundle/release/app-release.aab publishing: google_play: credentials: Encrypted(...) # Google Play API 키 track: internal # 또는 alpha, beta, production
ios-workflow: name: iOS Release environment: flutter: stable xcode: latest cocoapods: default scripts: - name: Build iOS script: flutter build ios --release --no-codesign - name: Set up code signing script: | keychain initialize app-store-connect fetch-signing-files $(BUNDLE_ID) --type IOS_APP_STORE keychain add-certificates xcode-project use-profiles - name: Build IPA script: xcode-project build-ipa --workspace ios/Runner.xcworkspace --scheme Runner artifacts: - build/ios/ipa/*.ipa publishing: app_store_connect: api_key: Encrypted(...) # App Store Connect API 키 submit_to_testflight: true
배포 관련 팁
Section titled “배포 관련 팁”앱 크기 최적화
Section titled “앱 크기 최적화”- 사용하지 않는 리소스 제거
- 이미지 최적화 및 압축
- ProGuard/R8 활성화 (Android)
버전 관리 전략
Section titled “버전 관리 전략”Semantic Versioning(SemVer) 규칙을 따르는 것이 좋습니다:
MAJOR.MINOR.PATCH+BUILD_NUMBER
- MAJOR: 호환되지 않는 API 변경
- MINOR: 호환되는 기능 추가
- PATCH: 버그 수정
- BUILD_NUMBER: 앱 스토어용 빌드 번호 (매 배포마다 증가)
단계적 출시
Section titled “단계적 출시”대규모 업데이트는 단계적으로 출시하는 것이 좋습니다:
- 내부 테스트 → 2. 알파/베타 테스트 → 3. 제한된 사용자 그룹 → 4. 전체 출시
Flutter 배포 관련 자주 묻는 질문
Section titled “Flutter 배포 관련 자주 묻는 질문”Q: 앱이 너무 큰데 어떻게 크기를 줄일 수 있나요?
Section titled “Q: 앱이 너무 큰데 어떻게 크기를 줄일 수 있나요?”A: flutter build apk --split-per-abi
로 ABI별 분할, 미사용 리소스 제거, 이미지 최적화, 코드 축소(R8/ProGuard) 활성화 등을 시도해보세요.
Q: 앱이 심사에서 거부됐어요. 어떻게 해야 하나요?
Section titled “Q: 앱이 심사에서 거부됐어요. 어떻게 해야 하나요?”A: 거부 사유를 주의 깊게 읽고, 해당 문제를 수정한 후 재제출하세요. 명확하지 않은 경우 Apple/Google의 개발자 지원에 문의하세요.
Q: iOS와 Android 배포 중 어떤 것을 먼저 해야 하나요?
Section titled “Q: iOS와 Android 배포 중 어떤 것을 먼저 해야 하나요?”A: 일반적으로 iOS 심사가 더 오래 걸리므로 iOS를 먼저 제출하고, 이후 Android를 제출하는 것이 효율적입니다.
앱 배포는 Flutter 개발 과정의 중요한 마무리 단계입니다. 이 가이드를 통해 Android와 iOS 플랫폼에 앱을 성공적으로 배포하는 전체 과정을 이해할 수 있습니다. 각 플랫폼의 요구사항과 프로세스를 잘 파악하고, CI/CD 도구를 활용하면 효율적이고 안정적인 배포가 가능합니다.