Answers · Mobile

What gets a web view app rejected from the App Store?

Two reasons account for most rejections of apps like this. Linking out to Stripe or any external checkout for digital goods, which the guidelines prohibit. And minimum functionality: an app that reviewers judge to be a website in a wrapper with nothing native about the experience. Both are avoidable before you submit.

External payment

The one to get right first. Digital subscriptions consumed in the app must use StoreKit. A Stripe checkout button visible inside the app is the clearest possible rejection, and reviewers look for it specifically.

<% if hotwire_native_app? %>

That helper, in app/controllers/application_controller.rb, is how the app shows the native purchase trigger and the web shows the Stripe button. Getting the branch wrong in either direction is a problem: the app version rejects, and the web version sends your margin to Apple for no reason.

Minimum functionality

A shell around a website with no native behavior reads as a repackaged web page. The defenses are concrete rather than philosophical:

  • Native navigation that behaves like an app, which the path configuration served from config/routes.rb controls.
  • Screens that actually work at phone width rather than a desktop layout squeezed down.
  • A real app icon and launch screen, not a placeholder.
  • Something the web version does not do, such as push notifications or a native purchase sheet.

Sign in with Apple, if you offer social sign-in

If the app offers Google sign-in, the guidelines require Sign in with Apple alongside it. That means the paid developer membership and the credential setup. The way to avoid it entirely is to offer only magic-code sign-in in the app, which is a legitimate and simpler choice.

Account deletion

An app with accounts must let users delete theirs from inside the app. One Shot already has the GDPR delete flow, so this is a matter of linking to it somewhere reachable, not building it.

Before you submit

bin/check

Then walk the whole app on a device: sign in, subscribe, cancel, sign out, delete the account. Every one of those is something a reviewer will try, and each is a rejection if it dead-ends.

Expect one rejection

Most first submissions get one, usually for something small and specific. The reply is a message in App Store Connect rather than a resubmission, and the turnaround is typically a day.

Related questions

How do I submit an Android app to Google Play for review?

Generate an upload key, build a signed Android App Bundle from mobile/android, and upload it in the Play Console. Google signs the delivered app with its own key, so your upload key is recoverable if lost. Budget most of the time for the store listing and the data safety form, not the build.

Can I put a Rails app in the App Store and Play Store?

Yes. Hotwire Native wraps your existing web views in a native shell, so the screens you already built are the screens in the app. One Shot ships both shells in mobile/ios and mobile/android. The rule you cannot route around is that digital subscriptions have to use the platform's in-app purchase, not Stripe.

Do I have to use Apple's in-app purchase for subscriptions?

Inside the app, yes, for anything digital your users consume in the app. Apple takes 15 to 30 percent and rejects apps that link out to an external checkout for it. On the web, in a browser, you keep using Stripe. The same account can be entitled by either path.