You have a signed .aab and an iOS build sitting in App Store Connect, and the app still isn't on either store. Both consoles want forms, policies, screenshots and answers about data before anyone reviews a line of code. This app store submission checklist for Flutter apps covers Google Play first, then Apple, in the order the consoles ask. If you don't have signed builds yet, start with signing your first Flutter release build.
Requirements below were checked against Google's and Apple's documentation in October 2026. Both stores change them often, so recheck any number near a deadline.
Before you open either console
Prepare three things first:
- A privacy policy URL. Both stores require one, even when the app collects nothing. Host it on a public page you control.
- A support URL. Apple requires it, and it must give users a way to contact you.
- A list of what your build sends off the device. Both privacy forms depend on it.
What "collected" means for our templates
Google and Apple both define collection as data leaving the device. Data processed only on the device isn't collected and doesn't need declaring. Our Flutter templates keep records in a local database on the device with no backend, so the template's own features usually send nothing. Vet Vault and Agri Ops declare no data collected or shared on Google Play and "Data Not Collected" on the App Store.
Ads change that. StyleBook, CleanSync, MemberKeep, TutorTrack, SubZero and Zenith ship with AdMob. Google's own disclosure for the Mobile Ads SDK lists data it collects automatically, including IP address, product interactions, diagnostics and the advertising ID. Both stores make you declare data sent by third-party SDKs as well as your own code.
So declare what your build actually does. If you switched ads off (MemberKeep and TutorTrack have an ads switch, CleanSync a flag), or added Firebase, analytics or a server, your answers change with it.
Google Play submission checklist
- Check the target API level. Since 31 August 2026, new apps and updates must target Android 16 (API level 36). Google offered extensions to 1 November 2026, and no later date is listed. Open
android/app/build.gradle.ktsand findtargetSdk. If it readsflutter.targetSdkVersion, the number comes from your Flutter SDK version, so confirm it is 36 or higher. MemberKeep, for example, already targets API 36. - Run the closed test if your account is personal. Personal developer accounts created after 13 November 2023 need a closed test with at least 12 testers opted in for the preceding 14 consecutive days before applying for production access. Google says it usually reviews that application within seven days, sometimes longer.
- Upload the
.aab. New apps must publish as an Android App Bundle. Uploadapp-release.aabto the closed testing track. - Complete App content. In Play Console, work through each item:
- Privacy policy: paste the URL.
- Ads: answer yes if the build includes an ad SDK such as AdMob.
- App access: needed only if part of the app sits behind a login or other authentication. Our templates have no account login, but MemberKeep has a PIN app lock and SubZero and TutorTrack have optional ones. If a reviewer would hit a PIN, provide it here.
- Content rating: fill in the IARC questionnaire. Google removes apps without a rating, and you redo the questionnaire if your content changes.
- Target audience and Data safety: the Data safety form is required even if you collect nothing.
- Prepare store listing graphics.
| Asset | Requirement |
|---|---|
| App icon | 512 × 512 px, 32-bit PNG with alpha, up to 1024 KB |
| Feature graphic | 1024 × 500 px, JPEG or 24-bit PNG, no alpha |
| Screenshots | At least 2 across device types, up to 8 per type, JPEG or 24-bit PNG, 320 to 3840 px, long side no more than twice the short side |
For apps to be eligible for promotion, Google recommends at least four screenshots of at least 1080 px, such as 1080 × 1920 portrait.
Apple App Store submission checklist
- Use a current Xcode. Since 28 April 2026, uploads must be built with Xcode 26 or later using the iOS 26 SDK. Since 9 September 2026, apps must target iOS 13 or later; every template with a stated iOS minimum already meets that. Apple has announced that from April 2027 uploads need the iOS 27 SDK and a minimum of iOS 15, so plan to raise the deployment target on templates that start at iOS 13 or 14.
- Check the app record. You created it with the bundle ID while signing. Confirm the name, primary language and SKU.
- Check the privacy manifest. Apple requires a reason for each "required reason" API your app uses (file timestamps, system boot time, disk space, active keyboards and user defaults) in
PrivacyInfo.xcprivacy. Since 1 May 2024, App Store Connect doesn't accept apps without those reasons. Plugins count too: Flutter itself,path_provider,share_plus,file_picker,flutter_local_notificationsandurl_launcherare on Apple's list of SDKs that need their own manifest. Keep plugins current rather than writing their entries by hand. StyleBook already includesPrivacyInfo.xcprivacy. - Fill in App Privacy. This is the privacy label on your product page. Include data your third-party partners collect. For AdMob, Google's iOS disclosure page lists the data types to declare, and says Mobile Ads SDK 11.2.0 and later supports privacy manifests.
- Set the age rating. Go to App Information, then Set Up Age Ratings, and answer the questionnaire. An unrated app can't be published.
- Upload screenshots. You need 1 to 10 per required size, as JPEG or PNG, no transparency. Apple's specifications currently require at least one for iPhone with Dynamic Island (medium display), which accepts 1206 × 2622 or 1179 × 2556 portrait. If the app runs on iPad, you also need 13-inch iPad screenshots at 2064 × 2752 or 2048 × 2732. Check Supported Destinations in Xcode; if iPad is listed, the iPad set is required.
- Add the URLs. Support URL and privacy policy URL go in App Store Connect. Guideline 5.1.1(i) also requires a privacy policy link inside the app. CleanSync and Vet Vault include an in-app privacy policy screen.
- Write App Review notes. A demo account is required only if the app needs a login, and it must not expire. Use the notes to say the app works offline with no account, and give any PIN the reviewer needs. Apps built from templates also face guideline 4.2.6, explained in our post on the App Store 4.2.6 rejection for template apps.
- Answer export compliance. Add
ITSAppUsesNonExemptEncryptiontoios/Runner/Info.plist.NOmeans the app, including its libraries, uses no encryption or only exempt encryption. Without the key, App Store Connect asks the questionnaire on every upload. StockPilot encrypts its database (AES-256) and MemberKeep keeps an encryption key in secure storage, so check Apple's export compliance overview before answering for those. Apple puts the responsibility for the answer on you.
Each rejection means fixing, rebuilding, re-uploading and waiting in the review queue again, and the reply often quotes a guideline number rather than the screen that broke it. Many are avoidable before you press submit, and our guide to avoiding the common App Store review rejections walks through them.
Troubleshooting
Play Console won't accept the bundle because of its target API level. Raise targetSdk to 36 (or update Flutter if it uses flutter.targetSdkVersion), rebuild, and test on a real device before uploading again.
You can't apply for production access. Fewer than 12 testers are opted in, or someone opted out and broke the 14 consecutive days. Testers who leave early don't count.
Your Data safety answer says no data, but the build shows ads. AdMob sends data off the device. Update the form using Google's AdMob disclosure page, and update your privacy policy to match.
Apple emails about a missing API declaration. Developers report it arrives as ITMS-91053: Missing API declaration, naming an API category. Update the plugins, then add any remaining reason to PrivacyInfo.xcprivacy.
The build waits on Missing Compliance. Answer the export compliance questions in App Store Connect, then add the Info.plist key so the next upload skips them.
Screenshots are rejected on upload. Check the exact pixel size against the list in step 6 and remove any transparency; Apple rejects images with an alpha channel.
App Review couldn't get past the lock screen. Put the PIN, or the steps to skip it, in the review notes and resubmit.
Setup guides for every template are in our Help Center setup guides.