• How to setup a Swift Package Registry in Artifactory

    Introduction It’s very difficult to have GenAI not hallucinate when in comes to Swift Package Registry. No surprise there: the feature is definitely niche, has not been vastly adopted and there’s a lack of examples online. As Dave put it, Swift Package Registries had an even rockier start compared to SPM. I’ve recently implemented a…

    Read More

  • How to Implement a Decentralised CLI Tool Manager

    SPONSORED Based on this article, I’ve published Luca!A lightweight decentralised tool manager for macOS to manage project-specific tool environments. 👶 Check it out: luca.tools Overview It’s common for iOS teams to rely on various CLI tools such as SwiftLint, Tuist, and Fastlane. These tools are often installed in different ways. The most common way is to…

    Read More

  • Toggles: the easiest feature flagging in Swift

    I previously wrote about JustTweak here. It’s the feature flagging mechanism we’ve been using at Just Eat Takeaway.com to power the iOS consumer apps since 2017. It’s proved to be very stable and powerful and it has evolved over time. Friends have heard me promoting it vehemently and some have integrated it with success and…

    Read More

  • Easy connection to AWS Mac instances with EC2macConnector

    Overview Amazon Web Services (AWS) provides EC2 Mac instances commonly used as CI workers. Configuring them can be either a manual or an automated process, depending on the DevOps and Platform Engineering experience in your company. No matter what process you adopt, it is sometimes useful to log into the instances to investigate problems. EC2macConnector…

    Read More

  • CloudWatch dashboards and alarms on Mac instances

    CloudWatch is great for observing and monitoring resources and applications on AWS, on premises, and on other clouds. While it’s trivial to have the agent running on Linux, it’s a bit more involved for mac instances (which are commonly used as CI workers). The support was announced in January 2021 for mac1.metal (Intel/x86_64) and I…

    Read More

  • The idea of a Fastlane replacement

    Prelude Fastlane is widely used by iOS teams all around the world. It became the standard de facto to automate common tasks such as building apps, running tests, and uploading builds to App Store Connect. Fastlane has been recently moved under the Mobile Native Foundation which is amazing as Google wasn’t actively maintaining the project.…

    Read More

  • Scalable Continuous Integration for iOS

    Originally published on the Just Eat Takeaway Engineering Blog. How Just Eat Takeaway.com leverage AWS, Packer, Terraform and GitHub Actions to manage a CI stack of macOS runners. Problem At Just Eat Takeaway.com (JET), our journey through continuous integration (CI) reflects a landscape of innovation and adaptation. Historically, JET’s multiple iOS teams operated independently, each employing their distinct…

    Read More

  • The iOS internationalization basics I keep forgetting

    In this article, I try to summarize the bare minimum one needs to know to add internationalization support to an iOS app. Localizations, locales, timezones, date and currency formatting… it’s shocking how easy is to forget how they work and how to use them correctly. After years more than 10 years into iOS development, I…

    Read More

  • The algorithm powering iHarmony

    Problem I wrote the first version of iHarmony in 2008. It was the very first iOS app I gave birth to, combining my passion for music and programming. I remember buying an iPhone and my first Mac with the precise purpose of jumping on the apps train at a time when it wasn’t clear if…

    Read More

  • iOS Monorepo & CI Pipelines

    Originally published on the Just Eat Takeaway Engineering Blog. We have presented our modular iOS architecture in a previous article and I gave a talk at Swift Heroes 2020 about it. In this article, we’ll analyse the challenges we faced to have the modular architecture integrated with our CI pipelines and the reasoning behind migrating…

    Read More