Exile Crusade
A survival game made in Godot. Fight waves, pick upgrades, and see how long you last. Built on Windows, shipped to iOS.
It started with a survival loop
Enemies keep coming. You collect XP, pick an upgrade, and try to last a little longer. I liked how much I could build around that simple loop.
The upgrades had to change how a run felt. More damage on a stats screen didn’t mean much if playing still felt the same. I added different attacks, tougher enemies, and bosses to keep the run moving.
Then I put it on a phone
One tap on the level-up screen could select more than one upgrade. I hadn’t really seen that with a mouse.
Touch controls needed their own attention: a virtual joystick, larger targets, and menus that worked across phone sizes. I should have tested on a phone earlier.
I also added progress between runs: gold, upgrades, achievements, and stats. The main menu started getting crowded, so I rebuilt the hub around one clear PLAY action and kept the rest secondary.
Shipping iOS from my Windows PC
I don’t own a Mac. Godot could export the Xcode project, but signing and building the iOS release still needed macOS.
GitHub Actions became my build machine:
- Push the project from Windows.
- Export the Godot project on a macOS runner.
- Install the certificate and provisioning profile in a temporary keychain.
- Archive with Xcode and export the signed IPA.
- Upload the build to App Store Connect.
The signing files live in GitHub secrets. Getting the pipeline working took a lot of trial and error, but I could finally submit builds without leaving Windows.
The game made it to the store
Version 2.0 shipped for iPhone and android with enemy waves, leveling, abilities, bosses, and touch controls.
This was my first time handling the full Apple release process. Certificates, screenshots, metadata, and review took more work than I expected.
Next time, I’d get touch input and the release pipeline working much earlier. I’d also split up the gameplay systems before the project grew around them.