Publishing to App Stores
1. Publishing to Google Play Store
| Step | Description | Action |
|---|---|---|
| 1 | Prepare app for release | Create a release build using flutter build apk --release |
| 2 | Generate signing key | Use keytool to create a keystore file |
| 3 | Configure signing | Add key path and credentials to key.properties |
| 4 | Upload to Google Play Console | Go to Google Play Console, create app, upload APK |
| 5 | Complete app listing | Add screenshots, description, and metadata |
Example: Signing Configuration
android {
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
Note: Ensure your app is optimized for release with
flutter build apk --release and that all assets are properly included.
Warning: Never share your keystore file or its credentials. Losing them means you cannot update the app on Google Play.
2. Creating Google Play Developer Account
Example: Account Creation Steps
1. Visit https://play.google.com/console
2. Click "Create Account"
3. Fill in business details:
- Business Name: MyCompany
- Business Email: admin@mycompany.com
- Country/Region: United States
4. Accept Terms and Pay $25 Registration Fee
| Step | Description | Notes |
|---|---|---|
| 1. Visit Console | https://play.google.com/console |
Use a verified email address |
| 2. Create Account | Click "Create Account" | Must be a Google account |
| 3. Business Details | Fill in company info | Required for app publishing |
| 4. Pay Registration Fee | $25 one-time fee | Non-refundable |
Note: You must have a verified email and valid payment method to complete registration.
Warning: The Google Play Developer account is tied to your Google account and cannot be transferred.
Account Requirements
- NEW Verified email address
- $25 one-time registration fee
- Valid payment method (credit card or bank account)
- Business details (name, address, email)
3. Preparing Store Listing
Example: App Store Metadata
flutter:
assets:
- assets/icon.png
- assets/splash.png
# App Store metadata
ios:
bundleIdentifier: com.example.myapp
teamId: ABC123DEF456
signingCertificate: iPhone Distribution
provisioningProfile: MyAppProfile
android:
package: com.example.myapp
signing:
storeFile: key.jks
storePassword: myStorePassword
keyAlias: myKeyAlias
keyPassword: myKeyPassword
| Field | Description | Required | Notes |
|---|---|---|---|
| bundleIdentifier | Unique identifier for iOS app | Yes | Must match App Store Connect |
| teamId | Apple Developer Team ID | Yes | Found in Apple Developer account |
| signingCertificate | Signing certificate name | Yes | Must match installed certificate |
| provisioningProfile | Provisioning profile name | Yes | Must match installed profile |
| package | Android package name | Yes | Must match Google Play Console |
| storeFile | Keystore file path | Yes | Must be in project root or subdirectory |
| storePassword | Keystore password | Yes | Must be kept secure |
| keyAlias | Key alias in keystore | Yes | Must match alias used to create key |
| keyPassword | Password for key in keystore | Yes | Must match password used to create key |
Note: Ensure all metadata matches exactly what is entered in App Store Connect and Google Play Console to avoid rejection.
Warning: Never commit keystore files or passwords to version control. Use environment variables or secure secrets management.
Key Steps for Store Listing Preparation
- Create or verify app identifiers in Apple Developer and Google Play Console
- Generate signing certificates and provisioning profiles for iOS
- Create or verify keystore files for Android
- Update
pubspec.yamlwith correct identifiers and paths - Verify all metadata matches store console entries
4. Uploading App Bundle to Play Store
| Step | Description | Action |
|---|---|---|
| 1. Build App Bundle | Generate the app bundle for Android | flutter build appbundle |
| 2. Sign the Bundle | Sign the generated bundle with your keystore | Use keytool or Android Studio |
| 3. Upload to Google Play Console | Upload the signed bundle to the console | Go to App releases > Internal testing |
Note: Ensure the keystore is securely stored and backed up.
Warning: Do not use the debug keystore for production builds.
Key Points
- Use
flutter build appbundleto generate the bundle. - Sign with a release keystore before uploading.
- Upload to Google Play Console under Internal Testing or Production track.
5. Configuring Release Tracks
| Track | Description | Deployment Options | Notes |
|---|---|---|---|
| production | Final release track for public distribution | App Store, Google Play | Only stable builds allowed |
| internal | For testing within the organization | Internal distribution (e.g., Firebase App Distribution) | Builds can be signed with internal certificates |
| alpha | Early release for limited testing | Google Play Internal Testing, TestFlight | Builds may include experimental features |
| beta | Release for broader testing before production | Google Play Beta, TestFlight | Builds must be stable but can include new features |
Note: Ensure the app's
build.gradle is configured with the correct release track settings.
Warning: Do not upload builds to the production track unless they are fully tested and stable.
6. Publishing to Apple App Store
| Step | Description | Details |
|---|---|---|
| 1. Prepare for Submission | Set up app metadata and assets |
|
| 2. Configure App ID | Register app in Apple Developer Portal |
|
| 3. Create Distribution Certificate | Generate certificate for code signing |
|
| 4. Create Provisioning Profile | Generate provisioning profile for distribution |
|
| 5. Build Release APK | Generate signed release build |
|
| 6. Upload to App Store Connect | Submit build via Transporter or Xcode |
|
Note: Ensure that your app's
Info.plist includes all necessary permissions and descriptions for App Store review.
Warning: Do not use
flutter build ios --release without setting up the correct code signing identities in Xcode. The app will fail to archive or upload.
Key Requirements for App Store Submission
- NEW App must support iOS 12.0 or higher
- App icon must be 1024x1024 PNG format
- App screenshots must be in landscape mode (iPhone 15 Pro Max)
- Privacy policy URL must be accessible from the App Store
- App must not use private APIs or frameworks
7. Creating Apple Developer Account
| Step | Description | Action |
|---|---|---|
| 1 | Go to Apple Developer website | Navigate to developer.apple.com and click "Account" |
| 2 | Sign in with Apple ID | Use existing Apple ID or create a new one |
| 3 | Agree to terms | Read and accept the Apple Developer Program License Agreement |
| 4 | Provide personal details | Enter full name, address, phone number, and email |
| 5 | Pay annual fee | Pay $99 USD for the Apple Developer Program membership |
| 6 | Verify account | Complete verification via email or phone |
Note: The Apple Developer Program membership is required to publish apps to the App Store.
8. Using TestFlight for Beta Testing
Example: Submitting to TestFlight
flutter build ios --release
# Then open Xcode and upload to App Store Connect
| Step | Description | Notes |
|---|---|---|
| 1. Build Release | flutter build ios --release |
Creates IPA for distribution |
| 2. Archive in Xcode | Open archive in Xcode | Must be done via Xcode for TestFlight |
| 3. Upload to App Store Connect | Use Xcode or Transporter | Must be signed with valid provisioning profile |
| 4. Add Testers | Go to App Store Connect | Invite internal or external testers |
| 5. Distribute Build | Select build version in TestFlight | Builds can be distributed to groups or individuals |
Note: TestFlight builds must be built with the
release configuration to pass Apple's review process.
Warning: TestFlight builds expire after 90 days unless re-uploaded.
TestFlight Workflow Summary
- Build app with
flutter build ios --release - Archive in Xcode or use Transporter
- Add testers to App Store Connect
- Distribute build via TestFlight dashboard
9. Preparing App Store Listing
Example: App Store Metadata
name: "My Flutter App"
bundle_id: "com.example.myapp"
version: "1.0.0"
description: "A beautiful Flutter application."
screenshots:
- "screenshots/screenshot1.png"
- "screenshots/screenshot2.png"
categories:
- "Entertainment"
- "Games"
keywords:
- "game"
- "fun"
- "flutter"
| Field | Description | Required | Notes |
|---|---|---|---|
| name | App name displayed to users | Yes | Max 30 characters |
| bundle_id | Unique identifier for the app | Yes | Reverse domain notation |
| version | App version string | Yes | Must follow semantic versioning |
| description | App description for the store | Yes | Max 4000 characters |
| screenshots | Images for the app store listing | No | Up to 8 images, PNG or JPG |
| categories | App category for the store | No | Up to 2 categories |
| keywords | Search terms for the app | No | Up to 5 keywords |
Note: Ensure all metadata aligns with Apple's App Store guidelines to avoid rejection.
Warning: App Store descriptions must not include URLs or external links.
10. Submitting App for Review
| Step | Description | Action |
|---|---|---|
| 1 | Prepare app for submission | Ensure all assets, metadata, and screenshots are ready. |
| 2 | Build release version | Run flutter build appbundle for Android or flutter build ios for iOS. |
| 3 | Upload to Google Play Console | Navigate to Google Play Console and upload the generated AAB or IPA file. |
| 4 | Complete store listing | Fill in app details, screenshots, descriptions, and set pricing. |
| 5 | Submit for review | Click "Submit" and wait for Google to review your app. |
Note: Ensure your app meets all Google Play Store guidelines before submission.
Warning: Once submitted, changes to app metadata or assets may require a new review.