Flutter发布工具插件publish_tools的使用
Flutter发布工具插件publish_tools的使用
本包提供了一组通过Grinder
任务来简化Dart和Flutter包发布的工具。以下是该包的一些特性:
目录
开始使用
需求
为了使用该包的GitHub发布功能,你的开发环境必须满足以下条件:
git
必须在你的命令行路径中可用(如果你正在阅读此文档,那么这一步应该已经满足,如果没有,请参阅 - 安装Git)- 你有一个GitHub账户,并且已经设置了一个个人访问令牌(参阅文档 - 创建一个个人访问令牌)
- 细粒度令牌需要以下权限:
- 读写 - 管理 - 用于Homebrew
tap
仓库的创建 - 读写 - 内容 - 用于更新仓库内容并创建
tap
的release
- 只读 - 元数据 - 所有细粒度个人访问令牌的必需项
- 读写 - 管理 - 用于Homebrew
确保将你的publish_tools.yaml
文件添加到.gitignore
以防止将其发布到GitHub
pubspec.yaml配置
在你的pubspec.yaml
文件中,添加以下内容到dev_dependencies
部分:
dev_dependencies:
...
grinder: ^0.9.5
publish_tools: ^1.0.0+10
可选地,提供一个非默认路径的配置文件(记得添加到.gitignore
):
publish_tools: tool/config.yaml
publish_tools.yaml配置
创建一个名为tool
的文件夹(如果你使用了grinder
包,它应该已经存在)。在这个文件夹中创建你的publish_tools
配置文件。
## 这是一个最小配置,一些字段将被赋予默认值
## 如果存在github键,它将覆盖默认值(从.git文件夹获取值)
# github:
# repoUser: [你的GitHub用户名]
# repoName: [默认为pubspec.yaml中的名称]
## 如果存在模板键,将覆盖默认值。下面与默认配置匹配。
# templates:
# - name: README.md
# type: overwrite
# - name: CHANGELOG.md
# type: prepend
commit: '示例提交消息'
创建以下代码:
import 'package:publish_tools/publish_tools.dart';
main(args) async {
PublishTools.addAllTasks();
grind(args);
}
[@DefaultTask](/user/DefaultTask)('如果未在命令行指定,则运行此任务')
[@Depends](/user/Depends)('pt-commit', 'pt-publish', 'pt-homebrew')
done() {
log('主项目的提交完成');
log('已发布到pub.dev/packages');
log('brew tap的提交完成');
}
README.md/CHANGELOG.md模板
publish_tools
可以帮助你保持README.md
和CHANGELOG.md
文件的最新状态。它使用mustache
模板来动态重新生成你的README
和CHANGELOG
,当你运行相应的grinder
任务时。
最简单的方法是复制现有的README.md
和CHANGELOG.md
文件到tool
文件夹。现在你可以更新这些文件,以便在运行pt-markdown
任务时动态替换这些字段。
例如,在上面的pubspec.yaml setup
部分中,有关于如何更新你的pubspec.yaml
以使用此工具的说明和示例。README
中的publish_tools
版本是动态设置的变量。以下是tool/README.md
的mustache
模板中的相应部分:
```yml
dev_dependencies:
...
grinder: ^0.9.2
publish_tools: ^{{ pubspec.version }}
`{{ pubspec.version }}`的值将由`pt-markdown`任务自动填充。
或者,对于`CHANGELOG.md`,可以使用以下模板:
```text
# Changelog
## {{ pubspec.version }}
{{ changes }}
默认情况下,每次运行pt-markdown
任务时,README.md
文件都会被覆盖。然而,默认情况下,CHANGELOG.md
文件会被前置。这意味着提供的模板将被添加到现有CHANGELOG.md
文件的开头。
其他可用于动态使用的值包括:
对象 | 属性 | 描述 |
---|---|---|
pubspec | 包含项目pubspec.yaml 文件中的信息 |
|
name | 项目名称 | |
version | 项目版本 | |
homepage | 指向包主页或源代码仓库的URL | |
documentation | 包的文档URL | |
description | 项目简短描述 | |
publishTo | 指定发布包的位置 | |
github | 与GitHub相关的publish_tools 配置文件的值 |
|
repoUser | 与该项目关联的GitHub用户名 | |
repoName | 该项目的GitHub仓库名称 | |
homebrew | 与HomeBrew相关的publish_tools 配置文件的值 |
|
className | 为HomeBrew ruby 文件创建的类名,该文件将用于创建并发布到GitHub的tap 仓库 |
|
description | 在ruby tap仓库中给出的描述 |
|
homePage | 在ruby tap仓库中给出的描述,默认与pubspec.homepage 相同 |
|
binSrc | 项目命令行二进制文件的源代码文件名,预期在homebrew.binFolder 中,默认文件名为[pubspec.name].dart |
|
executableName | 用于最终用户的命令行二进制文件的编译可执行文件的名称,默认为pubspec.name |
|
binFolder | 包含命令行可执行文件源代码的文件夹,默认为bin |
|
meta_path | 编写meta.dart 文件的位置,该文件用于向CLI二进制可执行文件提供pubspec 信息,默认为lib/meta.dart |
|
commit | publish_tools 配置文件中提供的commit 消息 |
|
changes | publish_tools 配置文件中提供的changes (用于CHANGELOG.md ) |
Grinder任务
以下是该包中可用的grinder
任务列表:
任务名称 | 描述 |
---|---|
pt-analyze | 分析目录中的Dart代码 - dart analyze . |
pt-format | 以惯用方式格式化Dart源代码 - dart format . |
pt-doc | 为Dart项目生成API文档 - dart doc . |
pt-test | 为Dart项目生成API文档 - dart test . |
pt-meta | 在配置指定的文件夹中创建一个meta.dart 文件(默认为src/util/),该文件包含pubspec.yaml 文件的JSON表示形式,使cli 程序可以访问这些信息 |
pt-markdown | 处理配置中引用的任何markdown 模板。通常处理README.md 和CHANGELOG.md ,模板可以使用mustache 语法访问ptConfig 对象中的数据 |
pt-pana | pana 将执行本地包分析,这与你在运行dart pub publish 时在pub.dev服务器上进行的分析相匹配。这对于在发布前发现包的缺陷非常有用 |
pt-commit | 提交项目到GitHub(git add . ,git commit {{ ptConfig.commit }} ,git pull --tags ,git tag v${pubSpec.version} ,git push --tags ,git push )。只有当{{ pubSpec.version }} 发生变化时,才会创建一个新的标签 |
pt-release | 为当前项目在GitHub中创建一个Release |
pt-homebrew | 为该项目的命令行可执行文件创建一个HomeBrew tap |
pt-clean | 删除由该工具创建的构建和HomeBrew存储库文件夹 |
pt-publish | 将当前包发布到pub.dev |
在下一个主要版本中
- 支持Chocolatey
- 支持NPM
示例代码
以下是一个简单的示例代码,展示了如何使用publish_tools
插件:
import 'package:publish_tools/publish_tools.dart';
// 此代码通常放置在[项目]/tool文件夹中
main(args) async {
PublishTools.addAllTasks();
grind(args);
}
[@DefaultTask](/user/DefaultTask)('如果未在命令行指定,则运行此任务')
[@Depends](/user/Depends)('pt-commit', 'pt-publish', 'pt-homebrew')
done() {
log('主项目的提交完成');
log('已发布到pub.dev/packages');
log('brew tap的提交完成');
}
更多关于Flutter发布工具插件publish_tools的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter发布工具插件publish_tools的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
publish_tools
是一个用于简化 Flutter 项目发布流程的工具插件。它可以帮助开发者自动化执行一些常见的发布任务,如构建 APK、AAB、IPA 等,并将其发布到不同的平台(如 Google Play、App Store 等)。
安装 publish_tools
首先,你需要在 pubspec.yaml
文件中添加 publish_tools
依赖:
dev_dependencies:
publish_tools: ^1.0.0
然后运行以下命令来安装依赖:
flutter pub get
基本使用
publish_tools
提供了一些命令来简化发布流程。以下是几个常用的命令:
1. 构建 APK
要构建 APK,你可以使用以下命令:
flutter pub run publish_tools build apk
这将生成一个 APK 文件,默认路径为 build/app/outputs/apk/release/app-release.apk
。
2. 构建 AAB
要构建适用于 Google Play 的 Android App Bundle (AAB),你可以使用以下命令:
flutter pub run publish_tools build aab
生成的 AAB 文件默认路径为 build/app/outputs/bundle/release/app-release.aab
。
3. 构建 IPA
要构建适用于 App Store 的 IPA 文件,你可以使用以下命令:
flutter pub run publish_tools build ipa
注意:构建 IPA 文件需要在 macOS 上运行,并且需要配置好 Xcode 和相关证书。
配置文件
publish_tools
支持通过配置文件来定制构建和发布流程。你可以在项目根目录下创建一个 publish.yaml
文件来配置相关参数。
以下是一个简单的 publish.yaml
配置示例:
apk:
build_type: release
output: build/app/outputs/apk/release/app-release.apk
aab:
build_type: release
output: build/app/outputs/bundle/release/app-release.aab
ipa:
build_type: release
output: build/ios/ipa/app-release.ipa
google_play:
track: production
service_account: path/to/service_account.json
package_name: com.example.app
app_store:
api_key: path/to/api_key.p8
key_id: YOUR_KEY_ID
issuer_id: YOUR_ISSUER_ID
发布到 Google Play 和 App Store
publish_tools
还支持将构建好的应用发布到 Google Play 和 App Store。
1. 发布到 Google Play
要发布到 Google Play,你可以使用以下命令:
flutter pub run publish_tools publish google_play
确保在 publish.yaml
中正确配置了 Google Play 的相关参数。
2. 发布到 App Store
要发布到 App Store,你可以使用以下命令:
flutter pub run publish_tools publish app_store