In December last year, I remember when I was interning at a startup, working on the watchOS app. There was this issue where the app was extremely slow to load the music files from the internet, and I couldn’t figure out why. As a naive intern, I was manually sending builds, one after another, on TestFlight for the team to check, with disappointing results every time.

In the end, we decided to leave the app as it is, but that left me with a grave lesson on how I wasted hours by manually changing the build number, archiving it, and sending the builds on TestFlight, and then adding the release note afterward.

Back then, I wasn’t aware of fastlane or any other CI/CD service to automate the process, or if it was even possible.

After writing unit and UI tests for personal apps and using Codemagic to release them to the App Store, I can’t believe the time I wasted while the app was archived. As that app depended on huge pods, the time invested per build was around ~15 to 20 minutes. While it looks to be a small amount of time, they add up over many builds that I sent manually over the internship.

And yes, I didn’t look for an alternative solution back then—big mistake. It felt like automating the process was extremely complicated, and you need a DevOps engineer for that.

When I look back, it wasn’t just my productivity hours wasted. I wasted energy with every manual build as well. I probably could have gotten the app working if I had automated the process and spent that fifteen minutes per build debugging the issue.

A small rant about the naive me that I wanted to let go of. The lesson learned here is to automate repetitive tasks as much as possible.

  • Use a CI/CD service or fastlane, whichever suits you the best.
  • Get a template configuration to build, test, and archive the project/workspace.
  • Send it to the App Store or TestFlight.
  • You can even automate screenshots if there isn’t much customization involved.