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.
Before you start
Section titled “Before you start”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 high level
Section titled “The high level”The submission pipeline is:
- Build a production iOS binary with EAS
- Upload it to App Store Connect (
.ipa) - Configure the App Store listing (name, screenshots, description, privacy)
- Submit for Apple review
- Wait 24-48 hours
- 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”- Go to appstoreconnect.apple.com and sign in with your Apple Developer account.
- My Apps → + → New App.
- Fill in:
- Platform: iOS
- Name: your app’s display name (this can differ from your bundle ID — for example, bundle ID
com.example.recipescould 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
- Click Create.
Step 2 — Production build with EAS
Section titled “Step 2 — Production build with EAS”From your mobile/ folder:
eas build --profile production --platform iosOr 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).
Step 3 — Upload to App Store Connect
Section titled “Step 3 — Upload to App Store Connect”The easiest path is EAS Submit:
eas submit --profile production --platform ios --latestThis 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:
- Download the
.ipafrom the EAS build page - Open Transporter (free Mac app from the App Store)
- Drag and drop the
.ipa - Click Deliver
After upload, App Store Connect runs validation (15-30 minutes). Once green, the build appears under TestFlight.
Step 4 — Test via TestFlight
Section titled “Step 4 — Test via 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.
- In App Store Connect, go to TestFlight in your app.
- Add yourself (and any other testers) as Internal Testers. Internal testers don’t need Apple’s separate review.
- Install TestFlight on your iPhone if you don’t have it.
- 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)
Step 6 — Submit for review
Section titled “Step 6 — Submit for review”- Once the listing is filled in and a build is selected from TestFlight, the Add for Review button activates.
- Click it. Apple asks if you want to release manually or automatically when approved — most teams pick automatic.
- 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).
Common rejection reasons
Section titled “Common rejection reasons”- 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
Settingsscreen 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.
After approval
Section titled “After approval”- 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).