LicensePlist
是一个命令行工具,可以自动生成一个包含所有依赖项的 Plist 文件,包括手动添加的文件(通过 YAML 配置文件指定)或者使用 Carthage
或 CocoaPods
添加的依赖项。所有这些许可证都将显示在“设置”应用中。
应用设置根目录 | 许可证列表 | 许可证详情 |
---|---|---|
![]() |
![]() |
![]() |
警告
不支持 SPM (Swift Package Manager)。
pod 'LicensePlist'
# Installation path: `${PODS_ROOT}/LicensePlist/license-plist`
brew install licenseplist
mint run mono0926/LicensePlist
在项目设置中,在“Package Dependencies”(包依赖)选项卡上,单击“+”并添加 https://github.com/mono0926/LicensePlist
。
单击“Add Package”(添加包),无需选择任何包产品。
从 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
Cartfile
或 Pods
的目录中时,只需执行 license-plist
。com.mono0926.LicensePlist.Output
目录。Settings.bundle
中。Settings.bundle
的示例在这里Root.plist
文件中将 com.mono0926.LicensePlist
指定为许可证列表文件。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
Mintfile
Pods
Package.swift
LicensePlist
尝试查找 YourProjectName.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
和 YourProjectName.xcworkspace/xcshareddata/swiftpm/Package.resolved
,然后使用最新的那个。Package.swift
license-plist --package-paths /path/to/package1/Package.swift /path/to/package2/Package.swift
LicensePlist
将使用克隆的文件而不是 GitHub API。有关更多信息,请参阅 xcodebuild 的参数 -clonedSourcePackagesDirPath
。license-plist --package-sources-path ./SourcePackages
"*.xcodeproj"
.xcodeproj
的路径,LicensePlist
将尝试从该 Xcode 项目加载 Package.resolved
。如果您指定 somedir/*.xcodeproj
,则 LicensePlist
将从在 somedir
中找到的第一个 xcodeproj
加载。"*.xcworkspace"
.xcworkspace
的路径,LicensePlist
将从该 Xcode 工作区加载 Package.resolved
。如果您指定 somedir/*.xcworkspace
,则 LicensePlist
将从在 somedir
中找到的第一个 xcworkspace
加载。--xcworkspace-path
优先于任何提供的 --xcodeproj-path
。com.mono0926.LicensePlist.Output
--output-path YOUR_PRODUCT_DIR/Settings.bundle
repo
作用域。LICENSE_PLIST_GITHUB_TOKEN
环境变量传递 GitHub 令牌。com.mono0926.LicensePlist
LICENSE, LICENSE.*
。FILENAME.*
,则支持任何非空路径扩展名。--package-sources-path
结合使用。LicensePlist
保存最新的结果摘要,因此如果没有更改,程序会中断。LicensePlist
🎉--force
标志始终运行完整流程。SomeLibrary
时,通过添加 --add-version-numbers
标志,名称将更改为 SomeLibrary (X.Y.Z)
。X.Y.Z
从 CocoaPods 和 Cartfile 信息中解析,并且在 Config YAML 中指定的 GitHub 库也支持此标志。--suppress-opening-directory
标志,可以禁止此行为。--sandbox-mode
,则自动启用。--silence-mode
标志,记录器的输出将不会打印。--verbose
标志,记录器的输出将比平均日志级别更详细。--silence-mode
选项和 --verbose
选项,LicensePlist 将使用后一个选项。--no-color
标志,记录器的输出将以单色打印。如果 CI/CD 日志中的任何转义字符困扰您,--no-color
选项将有所帮助。--color
标志,LicensePlist 将始终以彩色打印记录器的输出。--no-color
选项和 --color
选项,LicensePlist 将使用后一个选项。NO_COLOR
环境变量。如果您将 NO_COLOR
环境变量设置为 "1"
,LicensePlist 将在没有颜色的情况下运行。--package-sources-path
。在“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
或者,如果您已通过 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 包安装。
选择您的目标,在“Build Phases”(构建阶段)选项卡上,在“Run Build Tool Plug-ins”(运行构建工具插件)部分中,单击“+”并添加 LicensePlistBuildTool
。
如果使用构建工具插件,请在项目根目录的 license_plist.yml
中定义所有设置。
license_plist.yml
示例
options:
xcworkspacePath: "*.xcworkspace"
prefix: Acknowledgements
singlePage: true
重要提示:要处理 Swift Package 许可证,配置必须包含以下参数之一
xcworkspacePath
,xcodeprojPath
,packagePaths
.注意:outputPath
和 packageSourcesPath
配置参数会被构建工具插件忽略。
有关更多信息,请参阅配置部分。
如果您需要将许可证文件放入 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”,然后选择应用程序目标以自动创建构建阶段。
构建应用程序。首次运行时,Xcode 会询问运行插件的权限。单击“Trust & Enable All”(信任并全部启用)
为了实现无人值守使用(例如在 CI 中),您可以通过以下方式禁用包验证对话框
-skipPackagePluginValidation
传递给 xcodebuild
或defaults write com.apple.dt.Xcode IDESkipPackagePluginFingerprintValidatation -bool YES
。注意:这会隐式信任所有 Xcode 包插件并绕过 Xcode 的包验证对话框,这具有安全隐患。
LicensePlist 命令需要 Swift 包安装。
在项目上下文菜单中单击“GenerateAcknowledgementsCommand”。
命令对话框允许指定命令行参数。由于 Xcode 不会保存参数以供将来使用,因此建议使用配置文件。
单击“Run”(运行)以运行 LicensePlist。
单击“Allow Command to Change files”(允许命令更改文件)。此操作为 LicensePlist 提供对项目目录的写入访问权限。
“Don't ask again”(不再询问)选项可防止将来显示此对话框。
注意:--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:
- 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"
可以定义排除项,以从最终输出中排除匹配的库。排除项是一个字典,其中包含 name
、source
、owner
或 licenseType
的任意组合。
当使用字典格式时
(name: LicensePlist) AND (owner: mono0926)
按名称排除软件包
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)
执行 swift package generate-xcodeproj
或 make xcode
。
如果您喜欢 LicensePlist,欢迎捐赠 🤗