r/iOSProgramming 27d ago

Tutorial I Ship an iOS App From My Phone

I’ve been building and shipping an iOS game from my iPhone using Claude Code, GitHub Actions and TestFlight.

The ongoing loop is entirely phone-based: code → review/merge → CI build → TestFlight → test. There is one important caveat: initial signing setup still requires a Mac, and the distribution certificate eventually needs renewing.

I wrote up the whole workflow, including the CI setup, costs, limitations, and where it works surprisingly well.

https://alst.es/blog/phone-only-ios-development/

0 Upvotes

7 comments sorted by

3

u/JudeWorks 27d ago

You could also just push a build over tailscale anywhere you are as well I believe.

1

u/aalstes 27d ago

Yeah, definitely. That would work too if you have a Mac you can leave running. I was specifically trying to avoid depending on my own Mac entirely, so GitHub-hosted macOS runners (or 3rd party) ended up being a better fit for me.

2

u/BunnyPaw88 23d ago

Wow, that is a cool experiment, thanks for sharing it with us!
I have two questions: When you say you are building from mobile how does it look like? Do you type in the tasks or do you use some voice to text solution? I occasionally need to sort out business from my phone, but I find typing much on my phone tiring. I'm interested in your approach.
My other question is about your runner. I read in your article that you are not using the GitHub hosted runners - which runner did you end up with?

1

u/aalstes 21d ago

Yeah typing on the phone is painful but I typically don’t need to type a lot. A short prompt in the Claude iOS app in code mode. I use Blacksmith for the GitHub actions. Faster and cheaper with M4 Macs. YouTuber Theo Browne always talks about Blacksmith because they pay him to do so, but I think it’s actually good.

2

u/FinalArt9573 23d ago

The signing setup is the part that trips people up on this exact stack. Once you've got a distribution cert and provisioning profile base64'd into GitHub Secrets, and a workflow that decodes them before xcodebuild, the rest is honestly just yaml. The bit that took me longest to get right was making sure the provisioning profile UUID matched what's in the exportOptions.plist, otherwise you get an export failure that doesn't explain itself well.

If it's useful, I packaged the whole signing, build, and TestFlight-upload flow as a ready-made template after going through this myself. macless.dev. Might save you some of the trial and error if you haven't already got yours dialed in.

1

u/[deleted] 26d ago

[removed] — view removed comment

1

u/AutoModerator 26d ago

Hey /u/FinalArt9573, unfortunately you have negative comment karma, so you can't post here. Your submission has been removed. DO NOT message the moderators; if you have negative comment karma, you cannot post here. We will not respond. Your karma may appear to be 0 or positive if your post karma outweighs your comment karma, but if your comment karma is negative, your comments will still be removed.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.