SwiftDelta: finding Xcode upgrade problems before they find you

Hi everyone,

I’ve been working on SwiftDelta, an open-source macOS tool for checking how a project may be affected when moving between two Xcode versions.

When upgrading Xcode, I usually end up doing the same thing: build the project, fix the obvious errors, and then discover the less obvious SDK changes later. Release notes are useful, but they don’t show which changes actually touch a particular project.

SwiftDelta is my attempt to make that process easier.

What it does

You select:

  • Your project
  • The current Xcode
  • The Xcode you want to migrate to
  • The target platform and build context

SwiftDelta then compares the two local toolchains and looks for changes relevant to your source code, including:

  • Removed or renamed APIs
  • Availability changes
  • Function and type signature changes
  • Swift concurrency annotation changes
  • New compiler errors and warnings
  • Build diagnostics that appear only with the newer Xcode

The terminal interface shows the affected source location, SDK evidence, compiler diagnostics, analysis coverage, and anything it could not resolve confidently.

Where the information comes from

SwiftDelta does not use a hand-written database of Apple API migration rules.

Instead, it reads the SDKs and compiler tools included with the two Xcode installations you select. It extracts and normalizes their declarations, compares them, resolves references in the project, and runs isolated builds when needed.

This means the result is based on the actual Xcode versions installed on the Mac.

Repair

SwiftDelta can also prepare source changes for some findings.

Simple repairs come from compiler Fix-its or precise SDK metadata. More complicated cases can optionally use Apple Foundation Models on supported Macs.

Every proposed edit is:

  1. Shown as a diff
  2. Checked against the original source
  3. Tested in an isolated project copy
  4. Applied only after selection and validation

Model-generated proposals are marked clearly. If SwiftDelta cannot produce a sufficiently grounded edit, it leaves the finding for review instead of silently changing the source.

Local by design

Project analysis and Foundation Models inference run locally. SwiftDelta does not upload source code or use a cloud analysis service.

Running a build can still execute scripts, plug-ins, macros, or generators already configured by the project, so the selected project should be treated with the same level of trust as when running xcodebuild directly.

Current release

SwiftDelta 1.0.0 is available now.

  • macOS 13 or later
  • Apple Silicon
  • Swift 6.4
  • SwiftSyntax 603.0.2
  • Developer ID signed and notarized
  • Apache License 2.0

Repository:

Download:

Feedback

This is the first public release, and there will be projects and build configurations I haven’t encountered yet.

If you try it, I’d really like to know:

  • Which migration problems it finds correctly
  • Where the results are unclear or too noisy
  • Which project configurations it struggles with
  • Which repair cases would be most useful to support next

Issues, suggestions, and contributions are all welcome.

3 Likes