Quick start

Setting up Presto.
Ten minutes, once.

Connect a repo, add one step to the CI workflow that already builds on PRs, install the Mac app. After that every PR gets a Run in Simulator button and you never think about it again.

01

Getting started

Three things, all one-time. The first Run button shows up on the next PR that builds.

  1. Connect the repo

    Sign in with GitHub and install the Presto app on the iOS repo. Just that one; it doesn’t need the org.

  2. Add one step to CI

    Point it at the shared scheme that builds your app. If CI already produces a Simulator .app, pass app-path and nothing gets built twice.

  3. Install the Mac app

    Everyone who wants to run PRs installs it once. It needs Xcode for Simulator, and the same GitHub account.

That’s it. Open a PR, wait for the comment, click Run.

02

The workflow file

Drop this in .github/workflows/presto.yml and swap MyApp for your shared scheme. The scheme has to be shared or xcodebuild can’t see it on the runner.

.github/workflows/presto.yml
name: Presto

on:
  pull_request:

permissions:
  contents: read
  id-token: write
  pull-requests: read

concurrency:
  group: presto-${{ github.event.pull_request.number }}
  cancel-in-progress: true

jobs:
  preview:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v5
      - uses: aryamansharda/presto-build@v1
        with:
          scheme: MyApp
Open a PRClick Run in SimulatorPoke at the app
03

Xcode Cloud and other CI

Not on GitHub Actions? Same idea: your CI already builds the app, a short script uploads it. The only extra piece is one secret.

The token lives in App Store Connect, not in the repo. Create it once, paste it once, revoke it from your workspace whenever.

  1. 1

    Create a publish token on the repo’s page in your workspace. It only works for that repo.

  2. 2

    In App Store Connect, open the Xcode Cloud workflow that builds your PRs.

  3. 3

    Under Environment Variables, add PRESTO_TOKEN and tick Secret.

  4. 4

    Add ci_scripts/ci_post_xcodebuild.sh with the line below. Xcode Cloud runs that file after every build.

ci_scripts/ci_post_xcodebuild.sh
#!/bin/sh
curl -fsSL https://presto.digitalbunker.dev/publish.sh | bash
04

Who can run what

Access follows GitHub. If you can see the PR, you can run its build. If you can’t, you can’t.

  • You pick which repos get the app installed. Nothing else is visible to us.
  • Everyone signs in with their own GitHub account, on the web and in the Mac app.
  • Builds expire after 10 days. Remove a repo or revoke a token any time from the workspace.
05

When it doesn’t work

The three things that actually go wrong.

No Run button on the PR

Check the Actions tab. If the Presto job is red, it’s almost always a scheme that isn’t shared or a workflow that isn’t on pull_request.

Mac app says it can’t open the build

You may be missing the iOS runtime the build needs. Install it in Xcode, Settings, Platforms, then click Run again.

Build expired

Builds live 10 days. Push to the PR (or re-run the workflow) and the comment updates with a fresh one.

PR from a fork

Not supported, on purpose. GitHub gives fork PRs no identity token, and a fork’s code published under your name would be run by every reviewer. The job skips with a notice; ask contributors to push a branch instead.

Ready?Set up your first repo