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 88

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

This week’s issue covers the following topics:

  • Letting your agents control Xcode’s Simulator efficiently.
  • Extending Xcode Cloud workflows with shell scripts.
  • An upcoming change to the GitHub Actions macos-latest image.
  • A practical introduction to Bazel persistent workers.

Now, let’s dive into it!

​​​📲 How to let your agents interact with Xcode’s Simulator

My good friend Antoine van der Lee has recently shipped a CLI for RocketSim, that allows AI agents to interact with the Simulator in a fast, accurate and token-efficient way.

Antoine and I have had many conversations over the past few months about how best to expose app functionality to agents, how to ship a CLI alongside a Mac app, and what agent-ready tooling should actually look like. He has been a massive inspiration for our upcoming Helm CLI, which we are planning to ship this summer!

☁️ How to extend Xcode Cloud Workflows with shell scripts

While Xcode Cloud is really easy to set up and gets you most of the way there for the common automations you need as an Apple developer, there are times when you need to extend its functionality.

This is where shell scripts come in handy, as Amy explains in this article.

⚠️ GitHub Actions macos-latest image is changing

Starting June 15, GitHub Actions will migrate macos-latest from macOS 15 to macOS 26 over about 30 days. This means that your workflows may switch images without any YAML changes on your side, and your builds may start failing.

If you are not ready yet, pin macos-15 until you have tested the upgrade. Read the changelog for dates and other runner migrations.

🔧 Get started with Bazel persistent workers

Persistent workers keep a long-lived Bazel process alive to avoid repeated JVM or compiler startup costs — useful when you author custom rules and care about build performance.

Adin Ćebić demonstrates this with a simple uppercase-file rule and a Swift worker using Bazel’s JSON protocol. Their guide walks through the full implementation step by step.