Stay up to date with the latest iOS CI/CD news

Every two weeks, directly to your inbox and packed with everything you need to know and be aware of so that you're always prepared for the next app release!

Read and trusted by engineers from:

Issue 72

Sponsored

​🚀 Fastlane alternative - Codemagic CLI tools​

Are you tired of Ruby and Fastlane installation issues? There's got to be a better way! ​Discover Codemagic open source CLI tools​. It is not a drop-in replacement for all of what Fastlane does (screenshots for example), but we use it at Codemagci to build and publish iOS and Android apps, also versioning and device provisioning.

AI writes code Fast, CI/CD keeps it Safe

Hey everyone! I hope you’ve all had a fantastic couple of weeks — welcome to another issue of the newsletter!

As we find ourselves deep in the era of AI-assisted development, the way we write code is evolving faster than ever. Tools like GitHub Copilot, ChatGPT, and Claude are enabling developers to generate and ship code at unprecedented speed. What once took hours of meticulous implementation can now be scaffolded in minutes with a well-crafted prompt. On top of that, vibe coding has made it possible for people to bring their ideas to life with very little hands-on coding. It’s exciting, empowering — and also a little terrifying.

Because with that speed comes risk.

This is something Hidde and I have been experimenting with in Helm, using OpenAI’s Codex feature. When we get support tickets we can’t easily reproduce, we sometimes spin up a coding agent that attempts to fix the bug and open a PR on our behalf… or at least tries to.

These agents will confidently output code that compiles — but not necessarily code that’s correct. Which means your CI/CD setup is no longer just a nice-to-have — it’s your safety net. It’s what catches the silent regressions, unintentional side effects, and the sneaky race conditions introduced by an overly helpful AI. If you don’t have a comprehensive test suite yet, your CI/CD can still be useful by simply making sure all platforms compile.

Here’s an example of a fix that Codex did for us in Helm. Having CI/CD helps us understand the quality of the changes very quickly:

Commits added to a PR by Codex and being validated by an Xcode Cloud workflow

Once you’ve got that in place — and this is what I’m currently doing with Helm — I’d recommend starting to write tests for your core functionality. Not only will it help guide the LLM when it’s generating fixes, but it will also let you experiment and iterate more confidently. Let the AI fix it. If the CI/CD passes — ship it!

I know that writing tests might often feel like a waste of time, especially for us indie developers as it doesn’t have an immediate customer impact, but believe me it will pay off in the era of AI-assisted (or more AI-driven 😅) development.

⚠️ Important updates to GitHub-hosted macOS runners

GitHub recently announced important updates to hosted macOS runners that might affect your GitHub Actions workflows.

These updates impact several runner types and Xcode installations, so make sure you read their announcement to ensure your app is ready for the changes.

🏷️ Uploading your app to TestFlight using GitHub Actions

In the latest article of Noam’s amazing “GitHub Actions to TestFlight – from zero to hero” series, he goes through how you can automate distribution to TestFlight.

This article is a must-read if you’re looking to streamline your release process and ship builds to testers with confidence — all without leaving GitHub.

✂️ How Duolingo deleted 1% of their code using this Open Source tool

Last week, I shared the news about Sentry open-sourcing the core functionality behind Emerge’s Launch Booster product. This week, I’m excited to share yet another project they’ve open-sourced since joining Sentry: Reaper.

Reaper uses runtime analysis to effectively detect unused code in production — making it easier to clean up, slim down your binaries, and ship more maintainable apps. A super exciting tool for anyone working in large Swift codebases! 👻🧹

✨ How to build delight Swift CLIs

It’s very common to build small scripts and command-line tools to support your iOS project’s needs — especially when working on CI/CD pipelines.

Building these tools in Swift is a great choice: you get type safety, strong performance, a small memory footprint, and — most importantly — better maintainability thanks to using a familiar language.

In this piece, Natan shares some must-know tips and tricks to make your Swift tools not just functional, but delightful to use!

📦 A decentralized CLI tool manager

Installing third-party CLI tools like SwiftLint, Tuist, and Fastlane is common in iOS projects — but Homebrew’s lack of version pinning and clunky tap system often gets in the way. Tools like Mint and Mise offer better control, letting teams activate specific versions per project.

In this article, Alberto shares how he built a simple, decentralized approach to managing CLI tools — no registry, just zip downloads and per-project version control.