许多使用诸如 MIT 或 BSD 等流行开源许可证的开源库或框架,都要求在许可条款中包含署名。这意味着使用这些框架的应用程序需要在某处(通常在设置屏幕中)包含许可证信息。
记住包含所有这些许可证并保持其更新是一个令人沮丧的手动过程。很容易忘记,如果库供应商具有诉讼倾向,则可能会产生严重的后果。
Tribute 是一个命令行工具,旨在简化在您的项目中生成、检查和维护开源许可证的过程。
您可以在 macOS 或 Linux 上安装此工具,方法是从源代码自行构建,从发布页面下载预构建的二进制文件,或者使用 Mint。
$ mint install nicklockwood/tribute
安装完 tribute
命令行工具后,您可以按如下方式运行它
$ cd path/to/your/project
$ tribute list
如果在您的项目内部运行,此命令应列出您正在使用的所有开源库。您可能会发现包含了一些您认为不应该包含的库。您可以使用 --skip library-name
和/或 --exclude subfolder
来忽略这些库,如下所示
$ tribute list --exclude Tests --skip UnusedKit
如果缺少任何库,请确保它们具有有效的 LICENSE
文件。只有包含标准开源许可证文件的库才能被 Tribute 工具检测到。
除了列出项目中的许可证之外,Tribute 还可以生成一个文件,用于在您的应用程序或网站中显示。要生成许可证文件,请使用以下命令(请注意文件名
$ tribute export path/to/acknowledgements-file.json
Tribute 提供了多种选项来配置此文件的格式和结构。有关更多详细信息,请运行以下命令
$ tribute help export
生成许可证文件并将其集成到您的应用程序或网站后,您可能希望配置一个脚本,以便在每次构建时更新它。要在 Xcode 中进行设置,请执行以下操作
TARGETS
下选择您的目标,单击 Build Phases
选项卡New Run Script Phase
,然后粘贴以下脚本if which tribute >/dev/null; then
tribute export path/to/acknowledgements-file.json
else
echo "warning: Tribute not installed, download from https://github.com/nicklockwood/Tribute"
fi
如果您有 CI(持续集成)设置,您可能不希望在服务器上生成此文件,但您可能希望验证它是否已作为自动化测试套件的一部分运行。为此,您可以使用 check
命令,如下所示
$ tribute check path/to/acknowledgements-file.json
此命令不会更改任何文件,但如果许可证文件中缺少任何非排除的库,则会产生错误。
对于大型项目,依赖项扫描速度相当慢,特别是对于包含 Swift Package Manager 依赖项的项目。这将在未来得到改进。
只有在依赖项已检出的情况下,依赖项扫描才能工作。如果您正在使用 git 子模块,或诸如 CocoaPods、Carthage 或 Swift Package Manager 之类的包管理器,请确保在运行 Tribute 之前已解析所有依赖项(如果您能够成功构建您的应用程序,您可以假定依赖项已解析)。
Tribute 只能检测包含 LICENSE 文件(无论是否带有文件扩展名)的依赖项。如果您复制了没有 LICENSE 文件的依赖项,或者如果依赖项不包含此类文件,则将无法检测到它。如果您遇到这种情况,请打开一个 issue,我会尝试找到解决方案。
版本检测仅适用于通过 Swift Package manager 包含的库。