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.
swift-outdated
can be installed via Homebrew.
$ brew install swift-outdated
swift-outdated
can also be installed via Mint.
$ mint install kiliankoe/swift-outdated
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.
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)
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.
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.