LicensePlist
is a command-line tool that automatically generates a Plist of all your dependencies, including files added manually(specified by YAML config file) or using Carthage
or CocoaPods
. All these licenses then show up in the Settings app.
App Setting Root | License List | License Detail |
---|---|---|
Warning
SPM(Swift Package Manager) are not supported.
pod 'LicensePlist'
# Installation path: `${PODS_ROOT}/LicensePlist/license-plist`
brew install licenseplist
mint run mono0926/LicensePlist
Download the executable binary from Releases
Download from Releases, then copy to /usr/local/bin/license-plist
etc.
Or you can also download the latest binary and install it with a one-liner.
curl -fsSL https://raw.githubusercontent.com/mono0926/LicensePlist/master/install.sh | sh
Clone the master branch of the repository, then run make install
.
git clone https://github.com/mono0926/LicensePlist.git
make install
- When you are in the directory that contains your
Cartfile
orPods
, simply executelicense-plist
. com.mono0926.LicensePlist.Output
directory will be generated.- Move the files in the output directory into your app's
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
You can see options by license-plist --help
.
- Default:
Cartfile
- Default:
Mintfile
- Default:
Pods
- Default:
Package.swift
LicensePlist
tries to findYourProjectName.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
andYourProjectName.xcworkspace/xcshareddata/swiftpm/Package.resolved
, then uses new one.
- Support for multiple
Package.swift
- Example:
license-plist --package-paths /path/to/package1/Package.swift /path/to/package2/Package.swift
- Default:
"*.xcodeproj"
- By specifiying the path to the
.xcodeproj
LicensePlist
will attempt to load thePackage.resolved
from that Xcode project. If you specifysomedir/*.xcodeproj
thenLicensePlist
will load from the firstxcodeproj
it finds insomedir
.
- Default:
"*.xcworkspace"
- By specifying the path to the
.xcworkspace
LicensePlist
will load thePackage.resolved
from that Xcode workspace. If you specifysomedir/*.xcworkspace
thenLicensePlist
will load from the firstxcworkspace
it finds insomedir
. --xcworkspace-path
supersedes any provided--xcodeproj-path
.
- Default:
com.mono0926.LicensePlist.Output
- Recommended:
--output-path YOUR_PRODUCT_DIR/Settings.bundle
- Default: None.
- LicensePlist uses GitHub API, so sometimes API limit errors occur. You can avoid those errors by specifying a GitHub token.
- You can generate a token here
repo
scope is needed.
- You can also pass the GitHub token via the
LICENSE_PLIST_GITHUB_TOKEN
environment variable.
- Default:
license_plist.yml
- You can specify GitHub libraries(introduced by hand) and excluded libraries
- Example is here
- See Configuration for more information
- Default:
com.mono0926.LicensePlist
- You can specify output file names instead of default one.
- Default: None.
- If this path is specified, a html acknowledgements file will be generated.
- Default: None.
- If this path is specified, a markdown acknowledgements file will be generated.
- Default: false
LicensePlist
saves latest result summary, so if there are no changes, the program interrupts.- In this case, execution time is less than 100ms for the most case, so you can run
LicensePlist
atRun Script Phase
every time 🎉
- In this case, execution time is less than 100ms for the most case, so you can run
- You can run all the way anyway, by using
--force
flag.
- Default: false
- When the library name is
SomeLibrary
, by adding--add-version-numbers
flag, the name will be changed toSomeLibrary (X.Y.Z)
.X.Y.Z
is parsed from CocoaPods and Cartfile information, and GitHub libraries specified at Config YAML also support this flag.
- Default: false
- Adds the source of the library to the output if there is one. The source for GitHub and CocoaPods libraries is generated. Manual libraries use the optional source field.
- Default: false
- Only when the files are created or updated, the terminal or the finder opens. By adding
--suppress-opening-directory
flag, this behavior is suppressed.
- Default: false
- All licenses are listed on a single page, not separated pages.
- Default: false
- If there is even one package for which a license cannot be found, LicensePlist returns exit code 1.
- By adding the
--silence-mode
flag, the logger's output will not print. - The logger's output will be more detailed than the average log level by adding the
--verbose
flag. - LicencePlist uses the latter option if you simultaneously set the
--silence-mode
option and the--verbose
option. - Default: average log level
- The logger's output is printed in monochrome by adding the
--no-color
flag. If any escape characters in CI/CD log bother you, the--no-color
option will help. - By adding the
--color
flag, LicensePlist will always print the logger's output in color. - LicencePlist uses the latter option if you simultaneously set the
--no-color
option and the--color
option. - If neither option is specified, LicensePlist will look for the
NO_COLOR
environment variable. If you set theNO_COLOR
environment variable to"1"
, LicensePlist runs without colors. - Default: auto - LicensePlist decides its color mode depending on the terminal type.
Add a Run Script Phase
to Build Phases
:
if [ $CONFIGURATION = "Debug" ]; then
/usr/local/bin/license-plist --output-path $PRODUCT_NAME/Settings.bundle --github-token YOUR_GITHUB_TOKEN
fi
Alternatively, if you've installed LicensePlist via CocoaPods the script should look like this:
if [ $CONFIGURATION = "Debug" ]; then
${PODS_ROOT}/LicensePlist/license-plist --output-path $PRODUCT_NAME/Settings.bundle --github-token YOUR_GITHUB_TOKEN
fi
A GitHub source can be explicitly defined to include the license in the scenario where it can't be inferred from your dependency files.
github:
- owner: mono0926
name: LicensePlist
version: 1.2.0
If you need to include a license that isn't available on GitHub, you can place the license text in the config file to be included in the output. The license text can also be read from a local file, to keep the config file clean.
License body directly in the config file:
manual:
- source: https://webrtc.googlesource.com/src
name: WebRTC
version: M61
body: |-
Copyright (c) 2011, The WebRTC project authors. All rights reserved.
...
...
...
License body in local file:
manual:
- name: "Dummy License File"
file: "dummy_license.txt"
Excludes can be defined to exclude matching libraries from the final output.
An exclude is a dictionary containing any combination of name
, source
, owner
, or licenseType
.
When using the dictionary format:
- The exclusion rule is only applied if all properties match for a dependency. eg,
(name: LicensePlist) AND (owner: mono0926)
- Any property can be either a string or a regular expression.
Exclude a package by name:
exclude:
- name: LicensePlist
Exclude packages using a specific license:
exclude:
- licenseType: "Apache 2.0"
Exclude packages using any matching licenses:
exclude:
- licenseType: /BSD/
Exclude packages from a specific github owner:
exclude:
- owner: mycompany
Exclude packages from a specific github owner containing matching licenses:
exclude:
- owner: mycompany
licenseType: /^(?!.*MIT).*$/ # this regex excludes packages that do NOT use the MIT license
Exclude a package from a specific github owner and repo:
exclude:
- owner: mycompany
name: private-repo
If a library name is unsuitable for the output bundle, you can explicitly rename it. This can be used when a library name is too vague, or if more human-readable names are needed.
rename:
LicensePlist: License Plist # Rename LicensePlist to "License Plist"
WebRTC: Web RTC # Rename WebRTC to "Web RTC" (which is faulty, but used for test)
Execute swift package generate-xcodeproj
or make xcode
.
- LicensePlist というiOSアプリ利用ライブラリのライセンス一覧生成するツールを作りました – Swift・iOSコラム – Medium
- Swift Package Manager(SwiftPM)で作ったコマンドラインツールをHomebrewに登録する方法 - Qiita
Donations are welcome if you like LicensePlist🤗
- PayPal.Me
- Transfer commission will be charged (40 yen + 3.6%)
- mono is creating LicensePlist | Patreon
- Amazonギフト券- Eメールタイプ
- メールアドレス: mono0926@gmail.com
- ほしい物リスト