为Swift命令行工具设置包管理工具” Mint”


简介

我最初对此很感兴趣,因此决定在计算机上安装Mockolo。

什么是"薄荷"?

一种用于管理Swift命令行工具的安装和执行的工具。

如果您将其视为Bundler的Swift版本,则很容易理解。

好处

基本上,这与使用Bundler管理Ruby库的优点相同。

  • 在项目中轻松对齐Swift命令行工具的版本
  • 您可以为每个项目使用不同版本的Swift命令行工具

环境

  • 作业系统:macOS Catalina 10.15
  • 薄荷:0.13.0

设定

造币厂安装

从Homebrew安装。

1
$ brew install mint

请参阅官方文档以与Make或Swift PM一起安装。
https://github.com/yonaskolb/Mint#installing

薄荷版检查

检查Mint版本。

1
2
$ mint version
Version: 0.13.0

操作方法

创建一个Mintfile

创建一个名为

Mintfile的文件,并描述您要使用的软件包。
您可以在不创建Mintfile的情况下管理软件包,但是如果您希望在项目中拥有相同版本的软件包,则Mintfile很容易。

薄荷文件

{ユーザー名}/{リポジトリ名}@{バージョン}的格式描述。

软件包安装

通过执行

mint bootstrap命令,Mintfile中描述的所有软件包都将在本地安装。

1
$ mint bootstrap

使用

--verbose选项,将详细输出日志。
当软件包安装失败时,最好附上它。

已安装的软件包被跳过,因此您可以编辑Mintfile的一部分以有效地安装它。

附录
--overwrite选项已在0.16.0中添加。
https://github.com/yonaskolb/Mint/releases/tag/0.16.0

如果指定

--overwrite y,则在二进制文件已存在的情况下将自动输入y
此选项应在CI期间添加。

已安装软件包的列表

您可以通过执行

mint list命令来输出已安装软件包的列表。

1
2
3
4
5
6
$ mint list
??  Installed mint packages:
  mockolo
    - 1.1.1
  SwiftLint
    - 0.38.0

执行软件包

您可以执行

mint run {パッケージ名} {コマンド}指定的软件包的命令。

1
$ mint run {パッケージ名} {コマンド}

示例

1
2
3
4
5
$ mint run swiftlint swiftlint version
??  Using realm/SwiftLint 0.38.0 from Mintfile.
??  SwiftLint 0.38.0 already installed
??  Running swiftlint 0.38.0...
0.38.0

作为

Mint的一项功能,如果在执行程序包时未安装它,它将自动安装。
如果您不在CI / CD环境中使用mint bootstrap,并且仅在需要时安装所需的软件包,则可以通过一个Mintfile有效地使用多个工作流程。

卸载软件包

mint uninstall {パッケージ名}@{バージョン}卸载指定的软件包。

1
$ mint uninstall {パッケージ名}@{バージョン}

由于可以安装

软件包的多个版本,因此基本上指定版本并进行卸载。
如果未指定版本,请卸载所有版本。

包版本升级

只需在

Mintfilemint bootstrap中更改版本。
较旧的版本将保留,因此如果不需要,请mint uninstall {パッケージ名}@{バージョン}

奖励:本地安装路径

默认情况下,

软件包安装在/usr/local/lib/mint中,而不是项目文件夹中。
因此,与CocoaPods和Carthage不同,它没有版本控制,而没有将安装文件夹添加到.gitignore

当我快速浏览安装文件夹时,似乎没有按项目名称管理软件包。
如果在不同项目之间使用相同版本的软件包,则可能会引用相同的文件夹。

由于很难与

CI一起使用,因此建议为MINT_PATH指定mint/lib,为MINT_LINK_PATH指定mint/bin,依此类推。

在本地,应设置如下。

.bash_profile

1
2
3
4
if which mint >/dev/null; then
  export MINT_PATH="${HOME}/.mint/lib"
  export MINT_LINK_PATH="${HOME}/.mint/bin"
fi

注意:在运行脚本阶段与Xcode 11.5及更高版本

一起使用时需要解决方法

在Xcode 11.5或更高版本的运行脚本阶段中使用Mint时,会发生以下构建错误。
スクリーンショット_2020-07-19_15_40_17_skitch.png

您可以通过在

脚本的开头运行unset SDKROOT来解决此问题,但是它可能会有副作用。
毕竟有副作用。使用Mint管理R.swift时,发生" SDKROOT的丢失值"错误。
由于使用Mint构建的命令行工具可在macOS上运行,因此最好在mint run之前添加xcrun --sdk macosx来明确指定SDK。
スクリーンショット_2020-11-24_15_16_01.png

如果您正在使用Mint Carthage XcodeGen,请进行以下设置。
不必要取决于Carthage管理的库的类型,因此,如果发生上述错误,则可以对其进行处理。

project.yml

1
2
options:
  carthageExecutablePath: xcrun --sdk macosx mint run Carthage/Carthage carthage

参考

  • https://github.com/yonaskolb/Mint/issues/179
  • https://twitter.com/the_uhooi/status/1331040735391404032?s=20

结论

我能够轻松管理Swift命令行工具!
在iOS应用程序开发中,管理SwiftLint,Carthage,XcodeGen,Mockolo等将取得很大进展。

参考链接

  • yonaskolb / Mint:一个软件包管理器,用于安装和运行Swift CLI软件包
  • 使用Mint-Qiita管理Swift命令行工具
  • 我搜索了薄荷--ryokosuge.io-中
  • https://twitter.com/giginet/status/1219580555244625921?s=20