Skip to content

Apple App Store

This walks through getting a Mosayic-built app accepted by Apple. The first submission is the painful one — once you’ve done it, updates are routine.

You need:

  • An Apple Developer Program membership ($99/year). Sign up at developer.apple.com.
  • A Mac to do the iOS build (only if you build locally; EAS cloud builds work from any OS).
  • Your app’s bundle ID, set in the Mosayic dashboard. Once locked in, you can’t change it without losing your app’s identity in the store.

The submission pipeline is:

  1. Build a production iOS binary with EAS
  2. Upload it to App Store Connect (.ipa)
  3. Configure the App Store listing (name, screenshots, description, privacy)
  4. Submit for Apple review
  5. Wait 24-48 hours
  6. Either ship to the world, or fix what they flagged and re-submit

Step 1 — Create the app in App Store Connect

Section titled “Step 1 — Create the app in App Store Connect”
  1. Go to appstoreconnect.apple.com and sign in with your Apple Developer account.
  2. My Apps → +New App.
  3. Fill in:
    • Platform: iOS
    • Name: your app’s display name (this can differ from your bundle ID — for example, bundle ID com.example.recipes could be named “Sourdough Helper”)
    • Primary language: English (US) for most apps
    • Bundle ID: select the one you registered (Apple auto-creates this from your Apple Developer account when you first build through EAS)
    • SKU: any unique string you want — used internally for reporting
  4. Click Create.

From your mobile/ folder:

Terminal window
eas build --profile production --platform ios

Or trigger from the EAS web dashboard. The build takes 10-20 minutes in the cloud.

When it finishes, you’ll get a .ipa file (or EAS can submit it directly — see step 3).

The easiest path is EAS Submit:

Terminal window
eas submit --profile production --platform ios --latest

This grabs your most recent production build and uploads it to App Store Connect, including the rather painful TestFlight encryption export compliance form. EAS asks you for your App Store Connect API key the first time and remembers it.

Alternatively, you can upload manually:

  1. Download the .ipa from the EAS build page
  2. Open Transporter (free Mac app from the App Store)
  3. Drag and drop the .ipa
  4. Click Deliver

After upload, App Store Connect runs validation (15-30 minutes). Once green, the build appears under TestFlight.

Always TestFlight before submitting for App Store review. Apple reviewers will reject builds that crash on launch — you really want to catch this in TestFlight first.

  1. In App Store Connect, go to TestFlight in your app.
  2. Add yourself (and any other testers) as Internal Testers. Internal testers don’t need Apple’s separate review.
  3. Install TestFlight on your iPhone if you don’t have it.
  4. Open the build invite link from your email. Install. Test.

If your app crashes or has a clear regression, fix it and submit a new build. Repeat until you’re confident.

Step 5 — Configure the App Store listing

Section titled “Step 5 — Configure the App Store listing”

Under your app in App Store Connect, fill in:

  • App Information
    • Subtitle (30 chars)
    • Category (primary + optional secondary)
  • Pricing and Availability — Free or a price tier; territories
  • App Privacy — declarations about what data you collect (Apple’s questionnaire). The Blueprint card on privacy walks through the common Mosayic-app declarations (Supabase Auth uses email; if you store any user content in Supabase, that’s “user content collection”; etc.)
  • Version Information for the release you’re submitting:
    • Screenshots (required: 6.5” iPhone — typically the iPhone 14 Plus / 14 Pro Max layout. Optional but recommended: iPad Pro 12.9”)
    • Promotional text (optional, can be updated without a new build)
    • Description
    • Keywords (the search terms users will find your app under)
    • Support URL (link to a support page on your website)
    • Marketing URL (optional)
    • Version (must match the version number in your app.json)
  1. Once the listing is filled in and a build is selected from TestFlight, the Add for Review button activates.
  2. Click it. Apple asks if you want to release manually or automatically when approved — most teams pick automatic.
  3. Confirm the submission.

The status changes to “Waiting for Review”, then “In Review”, then “Pending Developer Release” (if you chose manual) or “Ready for Sale” (if automatic).

  • Guideline 4.3 (spam) — your app looks like a template. This is the killer for indie apps. Differentiate visually and functionally — don’t just slap a logo on the starter UI and submit.
  • Guideline 5.1.1 (data collection without consent) — you ask for permissions you don’t use. If you request notification permission, actually use notifications. If you request location, explain why in plain English in the permission prompt.
  • Missing privacy policy URL. Both your App Store listing and your Settings screen need to link to a privacy policy.
  • Missing data-deletion path. Apps with user accounts must offer a way to delete the account. The Mosayic API template has DELETE /auth/users/me — wire it to a button in your Settings screen.
  • Crash on launch. Almost always caught in TestFlight if you actually use it.
  • The app appears in the App Store within a few hours.
  • You can monitor downloads, crashes, and reviews from App Store Connect.
  • For updates, repeat steps 2-6. Updates typically clear review faster (a few hours).