Build React Native (Expo) apps for iOS using GitHub Actions and sideload them — no Mac, no paid Apple Developer account.
A simple proof-of-concept to show that indie devs, students, and hobbyists can run their own iOS builds with just GitHub.
- For personal & educational use only.
- Not intended for piracy, cracked apps, or redistribution.
This repo contains an example Expo codebase along with a GitHub Actions workflow that generates an unsigned .ipa file.
The generated .ipa can be sideloaded on any iPhone using tools like AltStore or TrollStore.
Perfect for experimenting with Expo / React Native on iOS without the Apple paywall.
-
Start a new Expo project:
npx create-expo-app my-app
-
Add the
build.ymlfile to.github/workflows/build.yml. -
Push your repo → Run the workflow in GitHub Actions.
-
Wait ~15–20 minutes → Download the
.ipafrom Actions → Artifacts. -
Sideload the
.ipato your iPhone. Done
-
The workflow currently uses
xcodebuild -configuration Debug. You can switch it to Release to generate final unsigned builds. -
Always keep dependencies updated (
expo doctor) → otherwise builds may crash with no clear error. -
GitHub provides free Actions credits even on free accounts (~$6/month).
- macOS runners cost 10× more than Linux (
~$0.08/min). - Each build takes ~15–20 minutes.
- Roughly 25–30 builds/month on a free account (may vary with project size + GitHub’s future limits).
- macOS runners cost 10× more than Linux (
After a build finishes:
-
Go to the GitHub Actions run → Download the artifact (
.ipa). -
Move it to your iPhone.
-
Extract and sideload using one of the following:
- TrollStore → Best option (no 7/14-day limit, but only works on specific iOS versions exploiting macdirtycow and similar bugs).
- AltStore → Works everywhere, but apps expire every 7 days unless refreshed.
- SideStore → A community fork of AltStore that also offers wireless sideloading.
If you want to do it manually using AltServer + docker, you can automate with tools like AltCon. It sets up:
- AltServer-Linux + custom anisette server inside Docker
- Requires usbmuxd + libimobiledevice/idevicepair
- Creates a throwaway Apple ID (tip: iMusic Apple IDs work without phone verification)
- Installs the app directly on the device after you trust it in Settings.
Originally, the goal was to build a simple CLI tool to automate everything — from building to sideloading — with just a few commands. I don’t have time to maintain that, but parts of the code exist in this repo for reference.
This project is not meant to be polished or production-ready. It’s a working hack that shows:
- You don’t need a Mac or Apple’s $100/year developer account just to test your own apps.
- GitHub Actions can handle iOS builds for you.
- Sideloading makes it possible to run them on real devices.
Use this repo as an example, fork it, break it, improve it — and share your experiments!
- Dadoum's Anisette for providing a stable anisette.
- NyaMisty's AltServer-linux for making Altserver work on Linux.
- Altcon for making sideloading fullying dockerized.