Submitting your app
Download listing folder on the Store submission page gives you a zip laid out exactly the way fastlane reads it. You upload it yourself, from your own developer account.
If you’d rather not, the Memberside team can do the submission for you, still from your account — see Managed services.
Why it comes from your account
Section titled “Why it comes from your account”The practical effect is small: one command from your own machine instead of a button here. On iPhone it is smaller still, because the build itself is delivered for you — what you upload is the listing around it. What this protects is the thing that gets template-built apps rejected: the app must be yours — your developer account, your name on the listing, your support URL.
What is in the zip
Section titled “What is in the zip”For the App Store:
metadata/en-US/name.txt, subtitle.txt, description.txt, keywords.txt, …metadata/copyright.txt, primary_category.txtmetadata/review_information/first_name.txt, demo_user.txt, demo_password.txt, notes.txtscreenshots/en-US/ ← your generated screenshots, numbered in orderreview-notes.txt ← the same notes, loose, for pasting by handREADME.txtFor Google Play:
metadata/android/en-US/title.txt, short_description.txt, full_description.txtmetadata/android/en-US/images/ ← generated screenshots, plus your icon and feature graphicapp-access.txt ← the test account, to paste into the consoleREADME.txtEach file’s name matches the field name in the console, so you can copy them in by hand instead if you prefer.
Screenshots are included if you have generated them. If you have not, the folder holds a README listing the exact dimensions each store requires, so you can drop your own in before uploading.
Fields you left blank have no file
Section titled “Fields you left blank have no file”That is deliberate. deliver reads a present-but-empty file as “clear this
field”, so shipping an empty subtitle.txt would erase a subtitle you had
already set in App Store Connect. An absent file leaves the existing value alone.
Uploading to the App Store
Section titled “Uploading to the App Store”The binary is already there. With an App Store Connect key on your site, each iOS build goes to TestFlight on its own, so what follows uploads your metadata and screenshots, not the app. If a build never arrived, How iOS builds work covers the Transporter fallback.
brew install fastlane
cd <the unzipped folder>fastlane deliver init # asks for your Apple ID and bundle identifierfastlane deliver --verify_only # shows what it would send, sends nothingfastlane deliver # uploads--verify_only is worth running first every time. It catches a rejected field
in seconds rather than after an upload.
Uploading to Google Play
Section titled “Uploading to Google Play”You need a Play Console service-account key first — Play Console → Setup → API access → create a service account, then download its JSON.
cd <the unzipped folder>fastlane supply \ --package_name com.example.app \ --json_key /path/to/key.json \ --skip_upload_apk --skip_upload_aabThe two --skip_upload flags send the listing only; upload the bundle itself
separately. The build list can do that for you: see
Sending builds to Google Play.
The .aab has to be signed with your own upload key, which Memberside does once
that key is set up — a build without one is signed for testing and Play will refuse
it. See Android signing.
The reviewer’s account
Section titled “The reviewer’s account”The demo password you entered is decrypted into
metadata/review_information/demo_password.txt (App Store) or app-access.txt
(Play). That is the one place it leaves Memberside.
Play has no listing field for it, so app-access.txt sits outside the
metadata/ tree — paste it into Play Console under App content → App access.
When it does not work
Section titled “When it does not work”| Symptom | Cause | Fix |
|---|---|---|
deliver complains about missing screenshots | None have been generated, and none were added by hand | Take screenshots, or add your own at the sizes the folder’s README lists |
deliver init overwrites your metadata | It pulls the current listing down from App Store Connect | Run it in an empty folder first, then copy your files over |
| Play rejects the bundle, not the listing | That build was signed for testing rather than with your upload key | Set up your key, then build again — see Android signing |
| A screenshot is rejected by Play | Play caps the long side at twice the short side | Frame the screen on a shorter canvas rather than cropping it |
| A field uploads empty | Its file was empty rather than absent | Do not create files for fields you want left alone |
| The download fails | The export is built when you click | Try again; if it persists, get in touch |
- Store readiness — run it once more before you upload
- Store screenshots
- Preparing your store listing
- How iOS builds work
- Getting ready for iOS builds