swift outdated

A swift subcommand for displaying when your dependencies (SwiftPM or Xcode) are out of date

342
14
Swift

swift-outdated

A swift subcommand for checking if your dependencies have an update available. This especially applies to updates outside of your version requirements.

Heavily inspired by cargo-outdated.

Calling swift package update will only update to the latest available requirements inside your specified version requirements, which totally makes sense, but you might miss that there’s a new major version available if you don’t check the dependency’s repository regularly.

This tool aims to help with that by allowing to quickly check if any requirements might be outdated, it does this by checking the remote git tags of your dependencies to see if something outside of your version requirements is available.

Installing

Homebrew

swift-outdated can be installed via Homebrew.

$ brew install swift-outdated

Mint

swift-outdated can also be installed via Mint.

$ mint install kiliankoe/swift-outdated

Usage

Since swift-outdated installs with its name, it can be called just like a subcommand of Swift itself via swift outdated.

$ swift outdated
| Package               | Current | Latest | URL                                                |
|-----------------------|---------|--------|----------------------------------------------------|
| rainbow               | 3.2.0   | 4.0.1  | https://github.com/onevcat/rainbow.git             |
| swift-argument-parser | 1.1.4   | 1.2.2  | https://github.com/apple/swift-argument-parser.git |

This lists all your outdated dependencies, the currently resolved version and the latest version available in their upstream repository.

Library

This packages also exposes a library target called Outdated. Use this if you want to integrate the functionality into your project.

Here’s a basic usage example.

import Outdated

let pins = try SwiftPackage.currentPackagePins(in: .current)
let packages = await SwiftPackage.collectVersions(for: pins, ignoringPrerelease: true)
packages.output(format: .markdown)

Xcode

swift-outdated also supports Xcode projects that use Swift packages for their dependency management. Either run it manually inside your repo
or set up a Run Script Phase. In the latter case swift-outdated emits warnings for your outdated dependencies.

Xcode warnings screenshot

Be aware however that using a Run Script Phase in this way will fetch available versions for all of your dependencies on every build, which will
increase your build time by a second or two. You’re probably better off running this manually every now and then.