Shipping alone: what to check, what to skip
The compliance surface is the same size for one person as for a team of forty. What changes is that you cannot afford to read all of it.
So do an applicability pass instead of a thorough one. Most guidelines do not apply to your app, and knowing which ones do is cheaper than being generally careful.
The order that costs the least time:
1. The four upload blockers. Automated, decided before any human looks, and each one costs a round trip. ITMS-90683 · ITMS-91053 · ITMS-91054/5/6 · ITMS-91061
2. The four that apply to nearly every app. Account deletion if you have accounts. Subscription disclosure if you sell one. Other-platform references in metadata. A demo path a reviewer can actually use.
3. The stranger install. Release build, device you have never signed into, fresh install, no account, offline once. This finds more than every automated check combined.
4. Whatever your specific app triggers. User content, AI output, health claims, background location, hardware.
And the habit that matters most for one person: audit on a dependency change, not before a release. Most of what blocks an RN app arrives through node_modules, and finding it during an ordinary Tuesday is a completely different experience from finding it on submission day.
What you can honestly defer
Localisation, until there is evidence of demand. [Shipping in one language is fine.]
iPad, unless the app is genuinely better on a large screen and you will test it every release. Supporting it badly is worse than not supporting it. iPad and device compatibility.
Android, if you are one person and iOS is where your users are. Two stores is two sets of gates, two release processes and two sets of forms. The Play launch checklist.
Features that add guideline surface you are not ready to support. A social feature brings 1.2's four requirements including blocking, which is a data-model change.
The rule: every capability you add is a permanent obligation, and one person's obligations compound faster than a team's.
The pass, written down once
The point of writing it down is that you stop re-deriving it:
# 1. resolved config, not app.json
npx expo config --type public > /tmp/cfg.json
grep -E 'UsageDescription|bundleIdentifier|version|buildNumber' /tmp/cfg.json
# 2. capabilities you did not ask for
grep -rn 'UsageDescription' ios/*/Info.plist 2>/dev/null
grep -o 'android:name="android.permission.[A-Z_]*"' \
android/app/build/intermediates/merged_manifests/release/AndroidManifest.xml 2>/dev/null | sort -u
# 3. metadata
grep -rniE 'android|google play|play store' fastlane/metadata src app 2>/dev/null | head
grep -rniE '#1|the best|[0-9,]+\+? (users|downloads)' fastlane/metadata 2>/dev/null | head
# 4. accounts without deletion
grep -rniE 'sign ?up|create account' src app --include=*.tsx | head
grep -rniE 'delete (my )?account' src app --include=*.tsx | head
# 5. secrets that must not ship
grep -rniE 'sk-[a-z0-9]{10}|api[_-]?key\s*[:=]\s*["\x27]' src app app.json 2>/dev/null | headThen the stranger install, by hand. Automated checks find config problems; a person finds behaviour problems, and doing one without the other leaves half the surface uncovered. What you can check for free.
The mistake that costs the most
Fixing only the thing the rejection named.
A reviewer stops at the first blocking problem. Fix that, resubmit, and you frequently meet the second one, then the third. Each meeting is a full cycle, and for one person a cycle is not just time, it is the loss of momentum on everything else.
Before every resubmission, run the whole pass again, not the item you were told about. After a rejection. · What a rejection actually costs.
What to automate
For one person, automation is worth it where the check is boring and the failure is silent:
The dependency audit, on every install.
The resolved-config diff, so a config plugin adding a permission is visible.
A pre-release checklist in the repo, because the version in your head degrades between releases and you will ship three months apart.
Not the stranger install. That has to be a person, and it has to be a person who will notice that the first screen is blank.
And the part that is not compliance
Shipping alone means every hour spent on process is an hour not spent on the product, which is why the applicability pass matters more than thoroughness.
The goal is not to know the guidelines. It is to know which twelve paragraphs apply to your app, and to check those every time. The first-submission checklist. · Shipping your first update.
shipcheck exists because this pass is mechanical, and mechanical work done by one person before a release is the work most likely to be skipped. What it checks.
More in this section
About shipcheck
shipcheck is a pre-submission checker from Baker Ventures LLC that runs inside Claude Code. It reads your React Native or Expo project, finds the things that get apps rejected or blocked at upload, cites the exact App Store Review Guideline or Google Play policy clause, and names the file and line to fix.
It exists because React Native and Expo apps fail for reasons that are invisible in the code you wrote: capability arriving through a dependency, purpose strings added by a config plugin, a privacy manifest missing from an SDK you never chose directly, and a generated ios/ directory that discards your edits on the next prebuild. shipcheck checks what the binary and the config actually declare, not what you intended. The rejection references on this site are free, need no account, and link to the primary Apple or Google document for every claim.
Questions and answers
What should a solo developer prioritise before submitting?
The upload-time blockers first, because they are automated and cost a round trip each. Then the four review items that apply to nearly every app: account deletion, subscription disclosure, other-platform references, and a demo path a reviewer can actually use.
What can a solo developer safely skip?
Anything that does not apply to your app, which is most of the guidelines. The skill is knowing which sections apply rather than reading all of them, and a short applicability pass is cheaper than a thorough general one.
How much time does a proper pre-submission pass take?
A few hours the first time, and under an hour afterwards if the checks are written down. Compare that with a review cycle, which costs days and cannot be shortened by working harder.
What is the highest-value habit for one person?
Auditing on a dependency change rather than before a release. Most of what blocks an RN app arrives through node_modules, and finding it during an ordinary week is a different experience from finding it on submission day.
Should a solo developer support iPad and Android from the start?
Only what you will genuinely test every release. Supporting a platform badly is worse than not supporting it, and dropping a platform is a legitimate decision rather than an admission.
What is the most common way one person loses a week?
Fixing only the thing the rejection named. A reviewer stops at the first blocking problem, so a resubmission that carries one fix frequently meets the second problem, and each meeting costs another cycle.
shipcheck. “Shipping alone: what to check, what to skip.” Baker Ventures LLC, September 7, 2026. https://shipcheck.bakerventuresstudio.com/guides/shipping-as-a-solo-developer/