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.
Getting started
Three things, all one-time. The first Run button shows up on the next PR that builds.
- 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.
- Add one step to CI
Point it at the shared scheme that builds your app. If CI already produces a Simulator
.app, passapp-pathand nothing gets built twice. - 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.
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.
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: MyAppXcode 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
Create a publish token on the repo’s page in your workspace. It only works for that repo.
- 2
In App Store Connect, open the Xcode Cloud workflow that builds your PRs.
- 3
Under Environment Variables, add
PRESTO_TOKENand tick Secret. - 4
Add
ci_scripts/ci_post_xcodebuild.shwith the line below. Xcode Cloud runs that file after every build.
#!/bin/sh
curl -fsSL https://presto.digitalbunker.dev/publish.sh | bashWho 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.
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.