## 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.

```erb
<% 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

```bash
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.
