[Flutter] 18. 빌드와 배포 - APK, App Store
Flutter 앱을 빌드하고 스토어에 배포하는 과정을 배웁니다.
빌드 전 준비
앱 아이콘 설정
# pubspec.yaml
dependencies:
flutter_launcher_icons: ^0.13.0
flutter_launcher_icons:
android: true
ios: true
image_path: "assets/icon/app_icon.png" # 1024x1024 권장
flutter pub run flutter_launcher_icons
스플래시 화면
# pubspec.yaml
dependencies:
flutter_native_splash: ^2.3.0
flutter_native_splash:
color: "#ffffff"
image: assets/splash.png
android: true
ios: true
flutter pub run flutter_native_splash:create
Android 빌드
1. 서명 키 생성
# 키스토어 생성 (최초 1회)
keytool -genkey -v -keystore ~/upload-keystore.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias upload
2. 키 설정
# android/key.properties (새로 생성, .gitignore에 추가!)
storePassword=비밀번호
keyPassword=비밀번호
keyAlias=upload
storeFile=경로/upload-keystore.jks
3. build.gradle 설정
// android/app/build.gradle
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
defaultConfig {
applicationId "com.example.myapp" // 고유 패키지명
minSdkVersion 21
targetSdkVersion 34
versionCode 1
versionName "1.0.0"
}
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
4. APK / AAB 빌드
# APK 빌드 (직접 설치용)
flutter build apk --release
# AAB 빌드 (Google Play 업로드용, 권장)
flutter build appbundle --release
빌드 결과:
- APK:
build/app/outputs/flutter-apk/app-release.apk - AAB:
build/app/outputs/bundle/release/app-release.aab
5. Google Play 배포
- Google Play Console 접속
- 개발자 계정 등록 ($25 일회성)
- 앱 만들기 → 정보 입력
- AAB 파일 업로드
- 스토어 등록 정보 작성 (스크린샷, 설명 등)
- 심사 제출
iOS 빌드
1. 사전 요구사항
- Mac 필수
- Xcode 설치
- Apple Developer 계정 ($99/년)
2. Xcode 설정
# iOS 폴더에서 Pod 설치
cd ios
pod install
cd ..
Xcode에서 ios/Runner.xcworkspace 열기:
- Bundle Identifier 설정 (예:
com.example.myapp) - Team 선택 (Apple Developer 계정)
- Signing & Capabilities 설정
3. 빌드
# iOS 빌드
flutter build ios --release
# IPA 파일 생성 (배포용)
flutter build ipa
4. App Store 배포
- Xcode → Product → Archive
- Distribute App → App Store Connect
- App Store Connect 에서 앱 정보 입력
- 심사 제출 (보통 1~3일 소요)
Web 빌드
# 웹 빌드
flutter build web
# 결과: build/web/ 폴더
# 이 폴더를 웹 서버에 배포
배포 옵션:
- Firebase Hosting
- GitHub Pages
- Netlify
- Vercel
# Firebase Hosting 예시
firebase init hosting
firebase deploy
빌드 최적화 팁
| 항목 | 방법 |
|---|---|
| 앱 크기 줄이기 | flutter build apk --split-per-abi |
| 난독화 | --obfuscate --split-debug-info=./debug-info |
| 미사용 코드 제거 | Tree shaking (자동) |
| 이미지 최적화 | WebP 형식 사용 |
| 패키지 정리 | 미사용 패키지 제거 |
# 최적화된 빌드 명령어
flutter build apk --release --split-per-abi --obfuscate --split-debug-info=./debug-info
버전 관리
# pubspec.yaml
version: 1.2.3+4
# │ │ │ └── 빌드 번호 (versionCode, 매 업로드마다 증가)
# │ │ └──── 패치 (버그 수정)
# │ └────── 마이너 (기능 추가)
# └──────── 메이저 (큰 변경)
- [Flutter] 18. 빌드와 배포 - APK, App Store
- [Flutter] 17. 실전 프로젝트 - Todo 앱 만들기
- [Flutter] 16. 패키지 활용 - 유용한 패키지 소개
- [Flutter] 15. 디자인 - 테마, 스타일, 반응형
- [Flutter] 14. 로컬 저장소 - SharedPreferences, SQLite
- [Flutter] 13. HTTP 통신 - REST API 연동
- [Flutter] 12. 상태관리 - setState, Provider
- [Flutter] 11. 사용자 입력 - Form, TextField, 버튼
- [Flutter] 10. 화면 이동 - Navigation, Route
- [Flutter] 09. 리스트와 스크롤 - ListView, GridView
- [Flutter] 08. 레이아웃 - Row, Column, Stack
- [Flutter] 07. 위젯 기초 - StatelessWidget, StatefulWidget
- [Flutter] 06. Flutter 소개 및 개발환경 설치
- [Flutter] 05. Dart 비동기 - Future, async/await, Stream
- [Flutter] 04. Dart 클래스 - OOP 기초
- [Flutter] 03. Dart 함수 - 선언, 매개변수, 람다
- [Flutter] 02. Dart 제어문 - 조건문, 반복문
- [Flutter] 01. Dart 언어 기초 - 변수, 타입, 연산자