Ship iOS apps to App Store Connect from the command line - your key, your machine, the last mile automated.
Python
0
5 commits
updated Oct 1, 2026
Ship iOS apps to App Store Connect from the command line — metadata, screenshots, and the actual submission, driven by the ASC REST API with your own key, on your own machine.
Not a build tool. Shipside picks up where the archive ends: it creates the version, pushes the listing, uploads screenshots, wires the age rating and review contact, attaches the build, opens the review submission — and submits. Then it tells you exactly what Apple's API refused to do and how to fix it in two clicks.
pipx install git+https://github.com/rorshopping/shipside
# or: uv tool install git+https://github.com/rorshopping/shipside
cd your-app # folder with your project
shipside init # 10 questions -> shipside.toml (your ASC key id/issuer/.p8 path)
shipside state # what does ASC actually say right now?
shipside plan # dry-run the submission: every blocker, nothing written
shipside screenshots ./shots-67
shipside metadata # fastlane-deliver-compatible metadata/<locale>/*.txt
shipside submit --yes # fixes the fixables, submits for review
In one day — 2026-09-30 — this pipeline shipped five apps to App Review end-to-end: Adhera, Pushup Alarm, REM Sleep Alarm, InCase and RenewalRadar. That day hit every wall App Store Connect has: the 405 version-creation deadlock, an INVALID_BINARY mid-flight, the age-rating questionnaire, the 640×920 subscription screenshot trap. The full story and every playbook are in this repo and encoded in the CLI: when an API call fails in a known way, Shipside prints the exact recovery steps instead of a stack trace.
| Command | What happens | Writes? |
|---|---|---|
shipside init | Config wizard: bundle id, team key id/issuer/.p8 path, review contact → shipside.toml | local file |
shipside doctor | Signs a JWT, checks team + app access | no |
shipside state | Full report: versions, builds, screenshots, IAPs, review submissions + next action | no |
shipside plan | The submission dry-run: every step marked ok / fix / blocked | no |
shipside metadata | Pushes listing text (deliver-compatible folders) into the editable version, with Apple's char limits enforced | yes |
shipside screenshots | Uploads PNGs (1320×2868 / 1290×2796) into the 6.7" set — including the APP_IPHONE_69-is-not-an-enum trap | yes |
shipside submit --yes | Creates the version if needed, sets age rating + review details + content rights, attaches the newest VALID build, opens the review submission, submits | irreversible |
shipside trial / license | 14-day free trial, then license activation | local |
Retry-After respect; a 409 on a retried write means the first write landed — treated as success.14-day free trial with every feature, no card. Then $19/month or $149/year per developer — launch code SHIPDAY takes 40% off your first year. Activate with the email you bought with:
shipside trial --email you@example.com
shipside license activate --email you@example.com
The license check is online with a 14-day offline grace window — airport-friendly.
v0.1, dogfooded in anger. See docs/PLAYBOOKS.md for the failure catalog and docs/LAUNCH_STORY.md for the day this was battle-tested.
MIT licensed. Not affiliated with Apple. App Store Connect is a trademark of Apple Inc.
Python
86.9%
HTML
13.1%
Ship iOS apps to App Store Connect from the command line - your key, your machine, the last mile automated.
Python
0
5 commits
updated Oct 1, 2026
Ship iOS apps to App Store Connect from the command line — metadata, screenshots, and the actual submission, driven by the ASC REST API with your own key, on your own machine.
Not a build tool. Shipside picks up where the archive ends: it creates the version, pushes the listing, uploads screenshots, wires the age rating and review contact, attaches the build, opens the review submission — and submits. Then it tells you exactly what Apple's API refused to do and how to fix it in two clicks.
pipx install git+https://github.com/rorshopping/shipside
# or: uv tool install git+https://github.com/rorshopping/shipside
cd your-app # folder with your project
shipside init # 10 questions -> shipside.toml (your ASC key id/issuer/.p8 path)
shipside state # what does ASC actually say right now?
shipside plan # dry-run the submission: every blocker, nothing written
shipside screenshots ./shots-67
shipside metadata # fastlane-deliver-compatible metadata/<locale>/*.txt
shipside submit --yes # fixes the fixables, submits for review
In one day — 2026-09-30 — this pipeline shipped five apps to App Review end-to-end: Adhera, Pushup Alarm, REM Sleep Alarm, InCase and RenewalRadar. That day hit every wall App Store Connect has: the 405 version-creation deadlock, an INVALID_BINARY mid-flight, the age-rating questionnaire, the 640×920 subscription screenshot trap. The full story and every playbook are in this repo and encoded in the CLI: when an API call fails in a known way, Shipside prints the exact recovery steps instead of a stack trace.
| Command | What happens | Writes? |
|---|---|---|
shipside init | Config wizard: bundle id, team key id/issuer/.p8 path, review contact → shipside.toml | local file |
shipside doctor | Signs a JWT, checks team + app access | no |
shipside state | Full report: versions, builds, screenshots, IAPs, review submissions + next action | no |
shipside plan | The submission dry-run: every step marked ok / fix / blocked | no |
shipside metadata | Pushes listing text (deliver-compatible folders) into the editable version, with Apple's char limits enforced | yes |
shipside screenshots | Uploads PNGs (1320×2868 / 1290×2796) into the 6.7" set — including the APP_IPHONE_69-is-not-an-enum trap | yes |
shipside submit --yes | Creates the version if needed, sets age rating + review details + content rights, attaches the newest VALID build, opens the review submission, submits | irreversible |
shipside trial / license | 14-day free trial, then license activation | local |
Retry-After respect; a 409 on a retried write means the first write landed — treated as success.14-day free trial with every feature, no card. Then $19/month or $149/year per developer — launch code SHIPDAY takes 40% off your first year. Activate with the email you bought with:
shipside trial --email you@example.com
shipside license activate --email you@example.com
The license check is online with a 14-day offline grace window — airport-friendly.
v0.1, dogfooded in anger. See docs/PLAYBOOKS.md for the failure catalog and docs/LAUNCH_STORY.md for the day this was battle-tested.
MIT licensed. Not affiliated with Apple. App Store Connect is a trademark of Apple Inc.
Python
86.9%
HTML
13.1%