One app, two app store rulebooks: shipping a Flutter marketplace on Google Play and the App Store

By Daniel Chen · · 4 min read

SolveMY, a services marketplace I built, runs on Android, iOS and the web from one Flutter codebase and one Go API. Getting it onto Google Play was straightforward. Getting it through Apple's review taught me more. Here is what I would plan for from day one.

Read the payment rules before you design pricing

Apple's guidelines require in-app purchase for digital goods and features unlocked inside the app, and they limit how you point people to other ways to pay. Our first submissions were rejected over exactly this. The fix was to make pricing platform-aware: the iOS app shows no pricing or upgrade paths, website pages opened from the iOS app hide them too, and Android and desktop web stay unchanged. Design for this early and you avoid weeks of resubmissions.

Treat push notifications as two systems

Android and iOS push both go through Firebase, but iOS needs its own APNs credentials. At one point an iOS-only configuration block was attached to every message, and Firebase rejected the Android messages too, so phones stopped alerting for days while the in-app list looked fine. Keep platform-specific settings platform-specific, and build an admin tool that proves a push really reached a device.

Old app versions never go away

People do not update apps quickly, so the API has to keep working for builds that are months old. Make changes additive. When we added delete-for-everyone in chat, deleted messages were still served as plain text plus a flag, so old versions show a sensible placeholder without an update.

Deep links: cold starts are different

A link that opens a running app delivers a short path; a link that cold-starts it delivers a full URL, and the router may run its start-up redirect after the link was handled. Normalise both and make the splash redirect idempotent, or your QR codes will open the home screen instead of the right page.

None of this is exotic. It is the work between 'it runs on my phone' and 'it is live in two stores'.

Related serviceMobile apps for iOS & AndroidLearn more

More notes