SideShip

Set up SideShip on your own computer

SideShip lets you build an iPhone app with an AI agent and install it on your own phone through SideStore. You don't need a $99 Apple Developer account or App Store review. This page lists every step, in order. One command does most of the work. The steps marked You are the ones that need your hands.

  1. You + AI agentdescribe features in plain words
  2. Flutter appcode lives in your git repo
  3. Buildon your Mac or GitHub Actions
  4. Your storehosted free on Cloudflare
  5. iPhoneSideStore installs & updates it

Shortcut: let an AI agent run the setup

After step 2, open your AI coding agent (Claude Code, Codex, Cursor…) in the project folder and say: “Set this project up for me by following SETUP.md.” It asks you the questions in chat, runs each phase, and tells you when it needs your hands. The steps below are the same either way.

01

Check what you need

You2 min
ItemDetails
A computerA Mac with ~25 GB free (Xcode is large). Apple silicon or Intel both work.Ubuntu/Debian or Fedora with ~5 GB free. Builds happen in the cloud.
An iPhoneiOS 14 or newer, and a USB cable for the one-time SideStore install.
Free accountsApple ID · Cloudflare · GitHub (or GitLab)GitHub. You'll create them during setup if you don't have them.
OptionalA domain on Cloudflare DNS, for a store address like apps.yourname.com.
Already installed?Nothing else. Setup installs Node.js, Flutter, the git and Cloudflare tools, CocoaPods and Homebrew.
02

Get the code

You1 min

Open Terminal (press ⌘ Space, type “Terminal”)a terminal and copy in these lines. Replace my-app with any folder name you like.

$ git clone <SideShip template URL> my-app
$ cd my-app

If your Mac says git isn't installed, click Install in the pop-up (Apple's Command Line Tools), then run the line again.

03

Start the setup and answer a few questions

SetupYou3 min
$ ./sideship setup

If Node.js is missing, it installs it first (with Homebrew, which asks for your Mac password). Then it asks:

  • Your name. Shown as the developer in your store.
  • Your app's name, e.g. “Plant Buddy”. It also suggests a bundle ID like com.alexkim.plantbuddy. Keep it: changing it later makes your phone treat it as a different app.
  • A one-line description and a brand color. Optional.
  • GitHub or GitLab. GitHub is recommended because it can also build in the cloud.Choose GitHub. It's required without a Mac.
  • Where to build. On this Mac (needs Xcode) or in GitHub Actions.

Stopped by accident? Press Ctrl C any time. ./sideship setup picks up where you left off, and ./sideship setup --plan shows what's done.

04

Create your accounts while tools install

YouSetup15–20 min

While the tools install in the background, setup walks you through each account and opens the right web page. Here's what you'll do:

Apple ID

The one on your iPhone works. You do not need the paid developer program. SideShip never sees your Apple ID password. You only type it into iloader and SideStore later. No Apple ID yet? Create one at account.apple.com.

Xcode (only if building on this Mac)

Setup opens the App Store page for Xcode. Click Get now. It's a big download, so it can run while you do the rest.

Cloudflare: hosts your personal app store

  1. Sign up free at dash.cloudflare.com/sign-up and verify your email.
  2. Go to My Profile → API Tokens and click Create Token.
  3. Next to Edit Cloudflare Workers, click Use template.
  4. Account Resources: Include → your account. Zone Resources: Include → All zones.
  5. Click Continue to summary, then Create Token, and copy it.
  6. Paste it when setup asks. It's checked right away and saved in a private .env file that is never uploaded.

Where to store app files

  • Cloudflare R2 (recommended): 10 GB free and keeps every version. Needs a card on file. Enable it once under R2 Object Storage → Purchase R2 Plan (the $0 tier).
  • Cloudflare Pages: no card needed, but each app file must be under 25 MB and only the latest version is kept.

GitHub or GitLabGitHub account

Stores your code and builds your app. Sign up at github.com/signup or gitlab.com if you need to.

Custom domain (optional)

Have a domain on Cloudflare DNS? Enter something like apps.yourname.com. Otherwise press Enter and use the free …pages.dev address.

On your iPhone

Install LocalDevVPN from the App Store (it used to be called StosVPN). SideStore uses it later to install and refresh apps.

05

Let the tools finish installing

Setup5–15 min

Setup waits for the background installs and shows a line like this until every item has a tick:

✔ Flutter SDK   ✔ CocoaPodsSystem packages   … GitHub CLI   · Cloudflare CLI (wrangler)
  • If you build on this Mac, it asks for your password once to finish setting up Xcode (accept the license, download the iOS platform). Open Xcode once after it installs.
  • It asks for your password once to install system packages (curl, unzip, usbmuxd…), and adds Flutter to your shell. New terminals will see it.
  • Something failed? The details are in .sideship/logs/install.log. Fix the item, then run ./sideship setup again.
06

Sign in to GitHub/GitLabGitHub and create your repository

YouSetup3 min
  1. A browser window opens. Sign in and approve the code shown in the terminal.
  2. Setup asks whether the current git remote is yours. Answer No: it's the template you cloned. It's kept as upstream so you can pull SideShip updates later.
  3. Pick a name for your repository and choose Private or Public.

Private repos get about 200 free macOS build minutes a month on GitHub Actions (roughly 15–20 releases). Public repos get unlimited minutes.

07

Your store and your app are created

Setup3–5 min

Nothing to do but watch. Setup:

  • creates a Cloudflare Pages project for your store, plus an R2 bucket if you chose R2, and attaches your domain if you gave one;
  • creates the Flutter app in app/ with your name, bundle ID, a generated icon (branding/icon.png) and a starter screen;
  • makes the first commit and pushes it, then saves your Cloudflare key as a GitHub Actions secret so the cloud build can publish.

If it shows a DNS record to add for your custom domain, add it in Cloudflare under your domain → DNS, then press Enter.

08

Set up your iPhone while the first build runs

You10–15 min

Version 1.0.0 now builds on your Macin GitHub Actions (about 5–15 minutes). Setup guides you through these steps meanwhile:

  1. Download iloader for macOSLinux from its releases page and open it. The usbmuxd service must be running: sudo systemctl start usbmuxd.
  2. Plug in your iPhone, unlock it, tap Trust and enter your passcode.
  3. In iloader, sign in with your Apple ID, pick your phone, and choose Install SideStore.
  4. On the iPhone: Settings → General → VPN & Device Management, tap your Apple ID, then Trust.
  5. Settings → Privacy & Security → Developer Mode → On. The phone restarts. Confirm Turn On.
  6. Open LocalDevVPN and tap Connect, then open SideStore.

SideStore changes from time to time. If a screen looks different, docs.sidestore.io has the current steps.

09

Add your store and install your app

You2 min

When the build is published, setup prints your store address and a QR code.

  1. Scan the QR code with your iPhone's Camera (or type the address into Safari).
  2. Tap Add to SideStore and confirm.
  3. In SideStore, open your app and tap Install. 🎉

Button didn't work? In SideStore go to Sources → + and paste your store address followed by /source.json. Lost the QR code? Run ./sideship status.

10

Start building with your AI agent

Youongoing

Open your agent in the project folder and describe what you want, e.g. “add a list of my plants with a photo and a watering reminder”. It follows AGENTS.md: it writes a short spec for each feature, builds in small tested steps, and writes release notes that show up in SideStore.

$ claude                   # or your favourite AI agent
$ ./sideship preview       # try it: iOS Simulatorin your browser
$ ./sideship release       # ship a new version to your phone
$ ./sideship status        # store link + QR code
$ ./sideship doctor        # something wrong? start here
Every 7 days: apps from a free Apple ID expire after a week. Open SideStore with LocalDevVPN connected and tap Refresh All. To automate it: Shortcuts → Automation → Time of Day → daily → SideStore “Refresh All”.
?

Limits and troubleshooting

reference

Free Apple ID limits

  • Up to 3 sideloaded apps at once, SideStore included.
  • Apps last 7 days between refreshes. Your data stays when you refresh.
  • No push notifications, iCloud, Sign in with Apple, Apple Pay or in-app purchases. Local notifications, camera, photos, location and storage all work. Your agent knows this.

If something goes wrong

ProblemWhat to do
Setup stopped halfwayRun ./sideship setup again. It continues where it stopped.
A tool failed to installRead .sideship/logs/install.log, fix the item, re-run setup.
Cloudflare token rejectedMake a new token with the Edit Cloudflare Workers template and paste it again.
“R2 is not enabled”Cloudflare dashboard → R2 Object Storage → Purchase R2 Plan ($0), or choose Pages storage.
App file is over 25 MBEnable R2, then ./sideship setup --phase cloudflare.
Cloud build failedgh run view --log-failed shows why. Usually a failing test.
Build fails on the Maccd app && flutter doctor, then flutter clean and ./sideship build.
“Maximum number of apps”Remove a sideloaded app. Free Apple IDs allow 3 including SideStore.
Install or refresh hangsConnect LocalDevVPN. Still stuck? Run iloader again to refresh SideStore's pairing file.
App won't open after a weekIt expired. Open SideStore and tap Refresh All.
No update appears in SideStorePull to refresh the Sources tab. Check the store address from ./sideship status opens in a browser.