- 0.16.0 and master18.104.22.168.04.2
- 0.16.0 and masteriOSmacOS(Intel)macOS(ARM)LinuxtvOSwatchOS
A package manager that installs and runs executable Swift packages
A package manager that installs and runs Swift command line tool packages.
$ mint run realm/SwiftLint@0.40.3
This would install and run SwiftLint version 0.40.3
Mint is designed to be used with Swift command line tools that build with the Swift Package Manager. It makes installing, running and distributing these tools much easier.
Homebrew is a popular method of distributing Swift executables, but that requires creating a formula and then maintaining that formula. Running specific versions of homebrew installations can also be tricky as only one global version is installed at any one time. Mint installs your package via SPM and lets you run multiple versions of that package, which are installed and cached in a central place.
If your Swift executable package builds with SPM, then it can be run with Mint! See Support for details.
Swift Packager Manager Tools -> SPMT -> Spearmint -> Mint! 🌱😄
Mint: a place where something is produced or manufactured
Make sure Xcode 10.2 is installed first.
$ brew install mint
$ git clone https://github.com/yonaskolb/Mint.git $ cd Mint $ make
$ git clone https://github.com/yonaskolb/Mint.git $ cd Mint $ swift run mint install yonaskolb/mint
$ mint install yonaskolb/mint
$ git clone https://github.com/yonaskolb/Mint.git $ cd Mint $ swift run mint
Use as dependency
Add the following to your Package.swift file's dependencies:
.package(url: "https://github.com/yonaskolb/Mint.git", from: "0.15.0"),
And then import wherever needed:
Until 1.0 is reached, minor versions will be breaking.
mint help to see usage instructions.
runlater, and also links that version globally
install commands require a package reference parameter. This can be a shorthand for a github repo (
mint install realm/SwiftLint) or a fully qualified git path (
mint install https://github.com/realm/SwiftLint.git). In the case of
run you can also just pass the name of the repo if it is already installed (
run swiftlint) or in the Mintfile.
An optional version can be specified by appending
@version, otherwise the newest tag or master will be used. Note that if you don't specify a version, the current tags must be loaded remotely each time.
$ mint run yonaskolb/XcodeGen@2.18.0 # run the only executable $ mint run yonaskolb/XcodeGen@2.18.0 --spec spec.yml # pass some arguments $ mint run yonaskolb/XcodeGen@2.18.0 xcodegen --spec spec.yml # specify a specific executable $ mint run --executable xcodegen yonaskolb/XcodeGen@2.18.0 --spec spec.yml # specify a specific executable in case the first argument is the same name as the executable $ mint install yonaskolb/XcodeGen@2.18.0 --no-link # installs a certain version but doesn't link it globally $ mint install yonaskolb/XcodeGen # install newest tag $ mint install yonaskolb/XcodeGen@master --force #reinstall the master branch $ mint run yonaskolb/XcodeGen@2.18.0 # run 2.18.0 $ mint run XcodeGen # use newest tag and find XcodeGen in installed packages
By default Mint symlinks your installs into
mint install, unless
--no-link is passed. This means a package will be accessible from anywhere, and you don't have to prepend commands with
mint run package. Note that only one linked version can be used at a time though. If you need to run a specific older version use
Mintfile can specify a list of versioned packages. It makes installing and running these packages easy, as the specific repos and versions are centralized.
Simply place this file in the directory you're running Mint in. The format of the
Mintfile is simply a list of packages in the same form as the usual package parameter:
Then you can simply run a package with:
mint run xcodegen
Or install all the packages (without linking them globally) in one go with:
If you prefer to link them globally, do such with:
mint bootstrap --link
mint runto silence any output from mint itself. Useful if forwarding output somewhere else.
MINT_LINK_PATHenvs to configure where mint caches builds, and where it symlinks global installs. These default to
mint install --forceto reinstall a package even if it's already installed. This shouldn't be required unless you are pointing at a branch and want to update it.
Mint works on Linux but has some limitations:
If your Swift command line tool builds with the Swift Package Manager than it will automatically install and run with mint!
Make sure you have defined an
executable product type in the
products list within your
let package = Package( name: "Foo", products: [ .executable(name: "foo", targets: ["Foo"]), ], targets: [ .target(name: "Foo"), ... ] )
You can then add this to the
Installing section in your readme:
### [Mint](https://github.com/yonaskolb/mint) ``` $ mint install github_name/repo_name ```
Since Swift 5.3 resources are now built into the Swift Package manager, so if you're targetting that version or above the
Package.resourcesfile is no longer necessary https://github.com/apple/swift-evolution/blob/master/proposals/0271-package-manager-resources.md
The Swift Package Manager doesn't yet have a way of specifying resources directories. If your tool requires access to resources from the repo you require a custom
Package.resources file. This is a plain text file that lists the resources directories on different lines:
If this file is found in you repo, then all those directories will be copied into the same path as the executable.
Feel free to add your own!