- Published on
- ·17 min read
Flutter 문서 번역 - iOS 앱 빌드 및 출시
- 이 글은 Flutter 문서 Build and release an iOS app를 번역한 글입니다.
- 번역 기준일: 2024년 3월 30일
이 가이드는 Flutter 앱을 App Store 및 TestFlight에 출시하는 단계별 안내를 제공합니다.
사전 준비 (Preliminaries)
앱을 빌드하고 출시(release)하려면 Xcode가 필요합니다. 이 가이드를 따르려면 macOS를 실행하는 장치를 사용해야 합니다.
앱을 출시하기 전에 Apple의 앱 심사 지침를 준수하는지 확인하세요.
앱을 App Store에 게시하려면 먼저 Apple 개발자 프로그램에 등록해야 합니다. Apple의 멤버십 선택 가이드 가이드에서 다양한 멤버십 옵션에 대해 자세히 알아볼 수 있습니다.
비디오 개요 (Video overview)
텍스트보다 비디오를 선호하는 사람들을 위해, 다음 비디오에서 이 가이드와 동일한 내용을 다룹니다.
App Store Connect에 앱 등록
App Store Connect(이전의 iTunes Connect)에서 앱의 수명 주기(life cycle)를 관리하세요. 앱 이름과 설명을 정의하고, 스크린샷을 추가하고, 가격을 설정하고, App Store 및 TestFlight에 release를 관리하세요.
앱을 등록하는 데는 두 단계가 필요합니다: 고유한 Bundle ID를 등록하고, App Store Connect에서 앱 레코드를 생성합니다.
App Store Connect에 대한 자세한 개요는 App Store Connect 가이드를 참조하세요.
번들 ID 등록
모든 iOS 애플리케이션은 Apple에 등록된 고유 식별자인 번들 ID와 연결되어 있습니다. 앱의 번들 ID를 등록하려면 다음 단계를 따르세요:
- 개발자 계정의 App IDs 페이지를 엽니다.
- + 를 클릭하여 새 번들 ID를 생성합니다.
- 앱 이름을 입력하고, Explicit App ID를 선택하고, ID를 입력합니다.
- 앱이 사용하는 서비스를 선택한 다음, Continue를 클릭합니다.
- 다음 페이지에서 세부 정보를 확인하고, Register를 클릭하여 번들 ID를 등록합니다.
App Store Connect에서 앱 레코드 생성
App Store Connect에 앱을 등록하세요:
- 브라우저에서 App Store Connect를 엽니다.
- App Store Connect 랜딩 페이지에서 My Apps를 클릭합니다.
- My Apps 페이지 왼쪽 상단에 있는 + 를 클릭한 다음, New App을 선택합니다.
- 표시되는 양식에 앱 세부 정보를 입력합니다. Platforms 섹션에서, iOS가 선택되어 있는지 확인하세요. Flutter는 현재 tvOS를 지원하지 않으므로, 해당 체크박스는 체크하지 말고 두세요. Create를 클릭합니다.
- 앱의 애플리케이션 세부정보로 이동하고, 사이드바에서 App Information을 선택합니다.
- General Information 섹션에서, 앞서 등록한 Bundle ID를 선택하세요.
자세한 내용은 계정에 앱 추가하기를 참조하세요.
Xcode 프로젝트 설정 검토
이 단계에서는 Xcode workspace에서 가장 중요한 설정 검토를 다룹니다. 자세한 절차와 설명은 앱 배포 준비를 참조하세요.
Xcode에서 target 설정으로 이동하세요:
- Flutter 프로젝트 디렉터리의 터미널에서
open ios/Runner.xcworkspace
를 실행하여 프로젝트의 기본 Xcode workspace를 엽니다. - 앱의 설정을 보려면, Xcode 탐색기에서 Runner target을 선택하세요.
가장 중요한 설정을 확인합니다.
General 탭의 Identity 섹션에서:
Display Name
앱의 표시 이름.
Bundle Identifier
App Store Connect에 등록한 App ID.
Signing & Capabilities 탭에서:
Automatically manage signing
Xcode가 앱 서명 및 프로비저닝을 자동으로 관리해야 하는지 여부입니다. 이는 기본적으로 true로 설정되어 있으며, 대부분의 경우 충분합니다. 더 복잡한 시나리오에 대해서는 Code Signing Guide를 참조하세요.
Team
등록된 Apple 개발자 계정과 연결된 팀을 선택하세요. 필요한 경우, **Add Account…**를 선택한 다음, 이 설정을 업데이트하세요.
Build Settings 탭의 Deployment 섹션에서:
iOS Deployment Target
앱이 지원하는 최소 iOS 버전입니다. Flutter는 iOS 12 이상을 지원합니다. 앱이나 플러그인에 iOS 12보다 최신 API를 사용하는 Objective-C 또는 Swift 코드가 포함되어 있는 경우, 이 설정을 필요한 가장 높은 버전으로 업데이트하세요.
프로젝트 설정의 General 탭은 다음과 같아야 합니다:
앱 서명에 대한 자세한 개요는 서명 인증서 생성, 내보내기 및 삭제를 참조하세요.
앱 배포 버전 업데이트
Xcode 프로젝트에서 Deployment Target
을 변경한 경우, Flutter 앱의 ios/Flutter/AppframeworkInfo.plist
를 열고 MinimumOSVersion
값을 일치하도록 업데이트하세요.
앱 아이콘 추가
새 Flutter 앱이 생성되면, placeholder 아이콘 세트가 생성됩니다. 이 단계에서는 이러한 placeholder 아이콘을 앱 아이콘으로 교체하는 방법을 다룹니다:
- iOS App Icon 가이드를 검토하세요.
- Xcode 프로젝트 탐색기에서
Runner
폴더의Assets.xcassets
를 선택합니다. placeholder 아이콘을 자신의 앱 아이콘으로 업데이트합니다. flutter run
으로 앱을 실행해 아이콘이 교체되었는지 확인하세요.
launch image 추가
앱 아이콘과 마찬가지로, placeholder launch image도 교체할 수 있습니다:
- Xcode 프로젝트 탐색기에서
Runner
폴더의Assets.xcassets
를 선택합니다. placeholder launch image를 자신의 launch image로 업데이트합니다. - 앱을 hot restart하여 새 launch image를 확인합니다. (hot reload를 사용하지 마세요.)
build archive 생성 및 App Store Connect에 업로드
개발하는 동안, debug build로 빌드, 디버깅 및 테스트를 진행했습니다. 앱을 App Store 또는 TestFlight의 사용자에게 출시할 준비가 되면 release build를 준비해야 합니다.
앱의 빌드 및 버전 번호 업데이트
앱의 기본 version number는 1.0.0
입니다. 이를 업데이트하려면, pubspec.yaml
파일로 이동하여 다음 줄을 업데이트하세요:
version: 1.0.0+1
version number는 위의 예에서 1.0.0
과 같이 점으로 구분된 3개의 숫자이며, 위의 예에서 1
과 같이 +
로 구분된 선택적(optional) build number가 뒤에 옵니다.
--build-name
및 --build-number
를 각각 지정하여 flutter build ipa에서 version 및 build number를 모두 재정의할 수 있습니다.
iOS에서 build-name
은 CFBundleShortVersionString
을 사용하고, build-number
는 CFBundleVersion
을 사용합니다. iOS 버전에 대한 자세한 내용은 Apple 개발자 사이트의 Core Foundation Keys를 참조하세요.
Xcode에서 pubspec.yaml
build name 및 number를 재정의할 수도 있습니다:
- 앱의
ios
폴더에서Runner.xcworkspace
를 엽니다. - Xcode 프로젝트 탐색기에서 Runner를 선택한 다음, settings view sidebar에서 Runner target을 선택합니다.
- Identity 섹션에서, 게시하려는 사용자용 version number로 Version을 업데이트합니다.
- Identity 섹션에서, App Store Connect에서 이 빌드를 추적하는 데 사용되는 고유 build number로 Build 식별자를 업데이트합니다. 각 업로드에는 고유한 build number가 필요합니다.
앱 번들 만들기
flutter build ipa
를 실행하여 프로젝트의 build/ios/archive/
디렉터리에 Xcode build archive(.xcarchive
파일)를 생성하고 build/ios/ipa
에 App Store 앱 번들(.ipa
파일)을 생성합니다.
--obfuscate
및 --split-debug-info
플래그를 추가하여 Dart 코드를 난독화하여 리버스 엔지니어링을 더 어렵게 만드는 것을 고려해 보세요.
App Store에 배포하지 않는 경우, --export-method ad-hoc
, --export-method development
또는 --export-method enterprise
옵션을 추가하여 다른 export 방법을 선택할 수 있습니다.
참고: flutter build ipa --export-method
를 사용할 수 없는 Flutter 버전에서는 build/ios/archive/MyApp.xcarchive
를 열고 아래 지침에 따라 Xcode에서 앱을 검증하고 배포하세요.
App Store Connect에 App Bundle 업로드
App Bundle이 생성되면, 다음 중 하나를 통해 App Store Connect에 업로드하세요:
Apple Transport macOS 앱을 설치하고 엽니다.
build/ios/ipa/*.ipa
앱 번들을 앱으로 드래그 앤 드롭합니다.또는 다음을 실행하여 command line에서 App Bundle을 업로드합니다:
xcrun altool --upload-app --type ios -f build/ios/ipa/*.ipa --apiKey your_api_key --apiIssuer your_issuer_id
App Store Connect API key로 인증하는 방법에 대한 자세한 내용을 보려면
man altool
을 실행하세요.또는 Xcode에서
build/ios/archive/MyApp.xcarchive
를 엽니다.Validate App 버튼을 클릭합니다. 문제가 보고되면 문제를 해결하고 다른 빌드를 생성하세요. 아카이브를 업로드할 때까지 동일한 빌드 ID를 재사용할 수 있습니다.
아카이브가 성공적으로 검증되면 Distribute App을 클릭합니다.
참고: Distribute App의 마지막에 앱을 내보낼(export) 때, Xcode는 앱의 IPA와
ExportOptions.plist
파일이 포함된 디렉터리를 생성합니다.flutter build ipa --export-options-plist=path/to/ExportOptions.plist
실행으로 Xcode 실행없이 동일한 옵션으로 새 IPA를 생성할 수 있습니다. 이 속성 목록의 키에 대한 자세한 내용은xcodebuild -h
를 참조하세요.
App Store Connect의 앱 세부정보 페이지에 있는 Activities 탭에서 빌드 상태를 확인할 수 있습니다. 30분 이내에 빌드가 검증되었고 TestFlight에서 테스터에게 출시할 수 있음을 알리는 이메일을 받아야 합니다. 이 시점에서 TestFlight에 출시할지, 아니면 App Store에 앱을 출시할지 선택할 수 있습니다.
더 자세한 내용은 App Store Connect에 앱 업로드를 참조하세요.
Codemagic CLI tool을 사용해 build archive 생성
이 단계에서는 Flutter 프로젝트 디렉터리의 terminal에서 실행되는 Flutter 빌드 명령어와 Codemagic CLI tool을 사용해 build archive를 생성하고 App Store Connect에 빌드를 업로드하는 방법을 다룹니다. 이를 통해 로그인 키체인과는 분리된 임시 키체인에 배포 인증서를 완전히 제어할 수 있는 build archive를 생성할 수 있습니다.
Codemagic CLI tool을 설치합니다:
pip3 install codemagic-cli-tools
App Store Connect로 작업을 자동화하려면 App Manager 액세스 권한으로 App Store Connect API Key를 생성해야 합니다. 이후 명령어를 더 간결하게 만들려면, 새 key에서 다음 환경 변수를 설정하세요: issuer id, key id, API key file.
export APP_STORE_CONNECT_ISSUER_ID=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee export APP_STORE_CONNECT_KEY_IDENTIFIER=ABC1234567 export APP_STORE_CONNECT_PRIVATE_KEY=`cat /path/to/api/key/AuthKey_XXXYYYZZZ.p8`
build archive를 코드 서명하고 패키징하려면 iOS 배포 인증서(iOS Distribution certificate)를 내보내거나 생성해야 합니다.
기존 인증서(certificates)가 있는 경우, 각 인증서에 대해 다음 명령어를 실행하여 private key를 내보낼 수 있습니다:
openssl pkcs12 -in <certificate_name>.p12 -nodes -nocerts | openssl rsa -out cert_key
또는 다음 명령어를 실행하여 새 private key를 생성할 수 있습니다:
ssh-keygen -t rsa -b 2048 -m PEM -f cert_key -q -N ""
나중에, CLI tool이 private key에서 새 iOS Distribution을 자동으로 생성하도록 할 수 있습니다.
코드 서명에 사용할 새 임시 keychain을 설정합니다:
keychain initialize
Login Keychain을 복원하세요!
keychain initialize
실행 후 다음을 실행해야 합니다:keychain use-login
이렇게 하면 login keychain이 기본값으로 설정되어 당신 기기에 있는 앱들과의 잠재적인 인증 문제를 피할 수 있습니다.
App Store Connect에서 코드 서명 파일을 가져옵니다:
app-store-connect fetch-signing-files $(xcode-project detect-bundle-id) \ --platform IOS \ --type IOS_APP_STORE \ --certificate-key=@file:/path/to/cert_key \ --create
여기서
cert_key
는 내보낸 iOS Distribution certificate private key이거나 새 인증서(certificate)를 자동으로 생성하는 새 private key입니다. App Store Connect에 인증서가 없는 경우, private key에서 인증서가 생성됩니다.이제 가져온 인증서를 keychain에 추가하세요:
keychain add-certificates
가져온 코드 서명 프로필을 사용하도록 Xcode 프로젝트 설정을 업데이트하세요:
xcode-project use-profiles
Flutter 종속성을 설치합니다:
flutter packages pub get
CocoaPods 종속성을 설치합니다:
find . -name "Podfile" -execdir pod install \;
Flutter iOS 프로젝트를 빌드합니다:
flutter build ipa --release \ --export-options-plist=$HOME/export_options.plist
여기서
export_options.plist
는xcode-project use-profiles
명령어의 출력입니다.App Store Connect에 앱을 게시합니다:
app-store-connect publish \ --path $(find $(pwd) -name "*.ipa")
앞에서 언급했듯이, 당신 기기의 앱들과 관련된 인증 문제를 피하려면 login keychain을 기본값으로 설정하는 것을 잊지 마세요:
keychain use-login
30분 이내에 빌드가 검증되었고 TestFlight에서 테스터에게 출시할 수 있음을 알리는 이메일을 받아야 합니다. 이 시점에서 TestFlight에 출시할지, 아니면 App Store에 앱을 출시할지 선택할 수 있습니다.
TestFlight에 앱 출시
TestFlight를 사용하면 개발자가 앱을 내부,외부 테스터에게 푸시할 수 있습니다. 이 선택적 단계에서는 TestFlight에 빌드를 출시하는 방법을 다룹니다.
- App Store Connect의 앱 세부정보 페이지의 TestFlight 탭으로 이동합니다.
- 사이드바에서 Internal Testing을 선택합니다.
- 테스터에게 게시할 빌드를 선택한 다음, Save를 클릭합니다.
- 내부 테스터의 이메일 주소를 추가합니다. 페이지 상단의 드롭다운 메뉴에 있는 App Store Connect의 Users and Roles 페이지에서 추가적인 내부 사용자를 추가할 수 있습니다.
더 자세한 내용은 TestFlight를 사용하여 앱 배포를 참조하세요.
App Store에 앱 출시
앱을 세상에 내놓을 준비가 되면, 다음 단계에 따라 앱을 제출하여 검토를 받고 App Store에 출시하세요:
- App Store Connect의 앱 세부정보 페이지의 사이드바에서 Pricing and Availability를 선택하고 필요한 정보를 입력하세요.
- 사이드바에서 status를 선택합니다. 앱의 첫 출시인 경우, status는 1.0 Prepare for Submission입니다. 필요한 모든 필드를 작성하세요.
- Submit for Review를 클릭합니다.
Apple은 앱 검토 프로세스가 완료되면 이를 알립니다. Version Release 섹션에서 지정한 지침에 따라 앱이 출시됩니다.
더 자세한 내용은 App Store를 통해 앱 배포를 참조하세요.
Troubleshooting
앱 배포 가이드는 App Store에 앱을 출시하는 과정에 대한 자세한 개요를 제공합니다.