LicensePlist Logo LicensePlist

platforms GitHub license Language: Swift 5.3 Swift Package Manager compatible

Lint Test

LicensePlist 是一个命令行工具,可以自动生成一个包含所有依赖项的 Plist 文件,包括手动添加的文件(通过 YAML 配置文件指定)或者使用 CarthageCocoaPods 添加的依赖项。所有这些许可证都将显示在“设置”应用中。

Flow

Demo

应用设置根目录 许可证列表 许可证详情

安装

警告
不支持 SPM (Swift Package Manager)。

CocoaPods(推荐)

pod 'LicensePlist'
# Installation path: `${PODS_ROOT}/LicensePlist/license-plist`

Homebrew(也推荐)

brew install licenseplist

Mint(也推荐)

mint run mono0926/LicensePlist

Xcode 项目 - SPM

在项目设置中,在“Package Dependencies”(包依赖)选项卡上,单击“+”并添加 https://github.com/mono0926/LicensePlist

单击“Add Package”(添加包),无需选择任何包产品。

Releases 下载可执行二进制文件

Releases 下载,然后复制到 /usr/local/bin/license-plist 等目录。

或者您也可以下载最新的二进制文件,并使用一行命令安装它。

curl -fsSL https://raw.githubusercontent.com/mono0926/LicensePlist/master/install.sh | sh

从源代码

克隆仓库的 master 分支,然后运行 make install

git clone https://github.com/mono0926/LicensePlist.git
make install

用法

  1. 当您位于包含 CartfilePods 的目录中时,只需执行 license-plist
  2. 将会生成 com.mono0926.LicensePlist.Output 目录。
  3. 将输出目录中的文件移动到您应用的 Settings.bundle 中。
Settings.bundle
├── Root.plist
├── com.mono0926.LicensePlist
│   ├── APIKit.plist
│   ├── Alamofire.plist
│   └── EditDistance.plist
├── com.mono0926.LicensePlist.plist
├── en.lproj
│   └── Root.strings
└── ja.lproj
    └── Root.strings

选项

您可以使用 license-plist --help 查看选项。

--cartfile-path

--mintfile-path

--pods-path

--package-path

--package-paths

--package-sources-path

--xcodeproj-path

--xcworkspace-path

--output-path

--github-token

--config-path

--prefix

--html-path

--markdown-path

--csv-path

--license-file-names

--force

--add-version-numbers

License list with versions

--add-sources

--suppress-opening-directory

--single-page

--fail-if-missing-license

--silence-mode / --verbose

--no-color / --color

--sandbox-mode / --no-sandbox-mode

集成到构建 - 运行脚本

在“Build Phases”(构建阶段)中添加一个“Run Script Phase”(运行脚本阶段)

if [ $CONFIGURATION = "Debug" ]; then
cd $SRCROOT
/usr/local/bin/license-plist --output-path $PRODUCT_NAME/Settings.bundle --github-token YOUR_GITHUB_TOKEN
fi

Run Script Phase

或者,如果您已通过 CocoaPods 安装 LicensePlist,则脚本应如下所示

if [ $CONFIGURATION = "Debug" ]; then
${PODS_ROOT}/LicensePlist/license-plist --output-path $PRODUCT_NAME/Settings.bundle --github-token YOUR_GITHUB_TOKEN
fi

集成到构建 - 构建工具插件

LicensePlist 构建工具插件需要 Swift 包安装

Choose package plugins

选择您的目标,在“Build Phases”(构建阶段)选项卡上,在“Run Build Tool Plug-ins”(运行构建工具插件)部分中,单击“+”并添加 LicensePlistBuildTool

Run build tool plug-ins

如果使用构建工具插件,请在项目根目录的 license_plist.yml 中定义所有设置。

license_plist.yml 示例

options:
  xcworkspacePath: "*.xcworkspace"
  prefix: Acknowledgements
  singlePage: true

重要提示:要处理 Swift Package 许可证,配置必须包含以下参数之一

注意:outputPathpackageSourcesPath 配置参数会被构建工具插件忽略。

有关更多信息,请参阅配置部分。

如果您需要将许可证文件放入 Settings.bundle 或任何其他特定位置,请将以下脚本添加到构建阶段

echo "Will copy acknowledgements"
ACKNOWLEDGEMENTS_DIR=${BUILT_PRODUCTS_DIR}/${CONTENTS_FOLDER_PATH}/com.mono0926.LicensePlist.Output
DESTINATION_PATH=${BUILT_PRODUCTS_DIR}/${CONTENTS_FOLDER_PATH}/Settings.bundle/
cp -r "${ACKNOWLEDGEMENTS_DIR}"/* "${DESTINATION_PATH}"
rm -rf "${ACKNOWLEDGEMENTS_DIR}"

或者在项目上下文菜单中单击“AddAcknowledgementsCopyScriptCommand”,然后选择应用程序目标以自动创建构建阶段。

AddAcknowledgementsCopyScriptCommand

构建应用程序。首次运行时,Xcode 会询问运行插件的权限。单击“Trust & Enable All”(信任并全部启用)

Trust & Enable All

为了实现无人值守使用(例如在 CI 中),您可以通过以下方式禁用包验证对话框

注意:这会隐式信任所有 Xcode 包插件并绕过 Xcode 的包验证对话框,这具有安全隐患。

上下文菜单命令

LicensePlist 命令需要 Swift 包安装

在项目上下文菜单中单击“GenerateAcknowledgementsCommand”。

Generate Acknowledgements menu command in Xcode

命令对话框允许指定命令行参数。由于 Xcode 不会保存参数以供将来使用,因此建议使用配置文件

单击“Run”(运行)以运行 LicensePlist。

Generate Acknowledgements command dialog in Xcode

单击“Allow Command to Change files”(允许命令更改文件)。此操作为 LicensePlist 提供对项目目录的写入访问权限。

“Don't ask again”(不再询问)选项可防止将来显示此对话框。

Allow command to change files dialog in Xcode

注意:--package-sources-path 选项和 packageSourcesPath 配置参数会被命令插件忽略。

配置

常规选项

选项”中的主要参数可以在配置文件中定义。

所有参数都是可选的。

如果命令行和配置都为同一属性指定了值,则该工具将使用命令行值。

示例

options:
  outputPath: "./com.mono0926.LicensePlist.Output"
  cartfilePath: Cartfile
  mintfilePath: Mintfile
  podsPath: Pods
  packagePaths:
    - Package.swift
  packageSourcesPath: "./SourcePackages"
  xcodeprojPath: "*.xcodeproj"
  xcworkspacePath: "*.xcworkspace"
  prefix: com.mono0926.LicensePlist
  gitHubToken: YOUR_GITHUB_TOKEN
  htmlPath: acknowledgements.html
  markdownPath: acknowledgements.md
  licenseFileNames:
    - LICENSE
    - LICENSE.*
  force: false
  addVersionNumbers: false
  suppressOpeningDirectory: false
  singlePage: false
  failIfMissingLicense: false
  addSources: false
  sandboxMode: false

手动 GitHub 来源

可以显式定义 GitHub 来源,以便在无法从依赖项文件中推断出许可证的情况下包含许可证。

示例

github:
  - owner: mono0926
    name: LicensePlist
    version: 1.2.0

手动许可证正文

如果您需要包含 GitHub 上不可用的许可证,您可以将许可证文本放在配置文件中以包含在输出中。许可证文本也可以从本地文件读取,以保持配置文件的整洁。

示例

许可证正文直接在配置文件中

manual:
  - source: https://webrtc.googlesource.com/src
    name: WebRTC
    version: M61
    body: |-
      Copyright (c) 2011, The WebRTC project authors. All rights reserved.
      ...
      ...
      ...

许可证正文在本地文件中

manual:
  - name: "Dummy License File"
    file: "dummy_license.txt"

排除项

可以定义排除项,以从最终输出中排除匹配的库。排除项是一个字典,其中包含 namesourceownerlicenseType 的任意组合。

当使用字典格式时

示例

按名称排除软件包

exclude:
  - name: LicensePlist

排除使用特定许可证的软件包

exclude:
  - licenseType: "Apache 2.0"

排除使用任何匹配许可证的软件包

exclude:
  - licenseType: /BSD/

排除来自特定 github 所有者的软件包

exclude:
  - owner: mycompany

排除来自特定 github 所有者且包含匹配许可证的软件包

exclude:
  - owner: mycompany
    licenseType: /^(?!.*MIT).*$/ # this regex excludes packages that do NOT use the MIT license

排除来自特定 github 所有者和仓库的软件包

exclude:
  - owner: mycompany
    name: private-repo

重命名

如果库名称不适合输出包,您可以显式重命名它。当库名称太模糊或需要更易于理解的名称时,可以使用此功能。

示例

rename:
  LicensePlist: License Plist # Rename LicensePlist to "License Plist"
  WebRTC: Web RTC # Rename WebRTC to "Web RTC" (which is faulty, but used for test)

问答

如何生成 Xcode 项目?

执行 swift package generate-xcodeprojmake xcode


相关文章


随时间推移的 Stargazers

Stargazers over time


捐赠(Donation)

如果您喜欢 LicensePlist,欢迎捐赠 🤗

通过 钱包应用 Kyash 付款

Kyash