Issue 63
Sponsored
Enjoy the fastest Apple Silicon chips at a fixed monthly price — fully managed so you can focus on shipping great code. Get an additional 50% off your first month with code IOSCI50OFF — exclusively for subscribers. Start your free 10-day trial now.
Hey everyone! I hope you’ve all had an amazing couple of weeks, and welcome to another issue of the newsletter!
This week, while I was working on some improvements to the RevenueCat iOS sample apps, I noticed a small annoyance in the release process for our iOS SDK. We release new versions very often, and sometimes we have to do hotfix releases for older versions of the SDK.
While this is a common enough process, I realised that the automation we use to create GitHub releases marks each new release as the latest, regardless of whether it is a new version, a pre-release version or a hotfix.
This can lead to some confusion for our users, as they might look at the repository’s home page and think that an old version with a recent hotfix release is the most up-to-date version of the SDK.
Example of a hotfix release being marked as the latest available version
I set out on a mission to fix this and quickly spotted what the issue was. We use the set_github_release built-in fastlane action to create a GitHub release and, while we have the logic in place to check whether the new release should be marked as the latest, the action, which uses the GitHub API under the hood, does not support the make_latest parameter.
We wanted to fix the issue quickly for us, so we forked the action and added support for the missing parameter locally. Once we had added the missing functionality for ourselves, we also decided to make it available to everyone else by upstreaming the changes, so we created a PR in the Fastlane repository.
This is a process that I really enjoy and I have followed at a few places I worked at and, as important as it is to get things working as quickly as possible for your project, for me it is also very important to give back to the Open Source project you are working with and upstream the changes if you can ❤️.
CI/CD providers latest software versions
Latest available Xcode and macOS versions on popular mobile CI/CD providers.


16.2 (16C5032a)

15.3 (24D60)


16.2 (16C5032a)

15.2 (24C101)


16.2 (16C5032a)

15.2 (24C101)


16.2 (16C5032a)

15.2 (24C101)


16.2 (16C5032a)

14.6


16.2 (16C5032a)

14.6.1 (23G93)


15.4 (15F31d)

14.6.1 (23G93)


16.0 (16A242d)

14.5 (23F79)
🚀 An introduction to fastlane for iOS developers
Over the years, fastlane has established itself as a standard for automating tasks and processes in the mobile community. While the tech stack might seem unintuitive or even obsolete at first, the incredible amount of built-in actions and community around fastlane make it an obvious choice.
If you’re completely new to fastlane and want to understand why and how to use it, make sure you check out this amazing article by my good friend Noam.
🔨 Coding with ChatGPT on macOS just got so much better!
I have been using ChatGPT while I code for quite some time and, since the beginning of the year, I migrated over from VSCode to Cursor for all my non-Apple work.
Ever since I started using Cursor, I fell in love with the chat experience and how easy it was to feed codebase-specific context to the model, and I have been longing for the same experience from Xcode. This announcement from the OpenAI team was music to my ears ❤️.
🪛 A template for writing Shell Scripts
Let’s say you need to create a new shell script for your next automation. You create the file and are ready to automate.
But do you remember what the syntax for the shebang at the top of the file is? Or how you handle errors in shell scripts? I have to look these things up all the time, so this template from Collin Donnell is very much welcome!
📺 Turning your Swift command-line apps into beautiful macOS apps
As iOS engineers, we usually have to come up with small utility apps that we can run from the command-line both locally and on CI/CD. Some of these might benefit from having some UI that can help configure and run these executables.
This article from Karin Prater shows you how you can call command-line tools from a SwiftUI app.