Flutter发布工具插件publish_tools的使用

Flutter发布工具插件publish_tools的使用

本包提供了一组通过Grinder任务来简化Dart和Flutter包发布的工具。以下是该包的一些特性:

SDK版本 支持平台 支持SDK

Build Status Pull Requests Issues GitHub Last Commit Pub Score

目录

Pub Package 代码大小 发布者 许可证

开始使用

需求

为了使用该包的GitHub发布功能,你的开发环境必须满足以下条件:

  • git 必须在你的命令行路径中可用(如果你正在阅读此文档,那么这一步应该已经满足,如果没有,请参阅 - 安装Git
  • 你有一个GitHub账户,并且已经设置了一个个人访问令牌(参阅文档 - 创建一个个人访问令牌
  • 细粒度令牌需要以下权限:
    • 读写 - 管理 - 用于Homebrew tap仓库的创建
    • 读写 - 内容 - 用于更新仓库内容并创建taprelease
    • 只读 - 元数据 - 所有细粒度个人访问令牌的必需项

确保将你的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.mdCHANGELOG.md文件的最新状态。它使用mustache模板来动态重新生成你的READMECHANGELOG,当你运行相应的grinder任务时。

最简单的方法是复制现有的README.mdCHANGELOG.md文件到tool文件夹。现在你可以更新这些文件,以便在运行pt-markdown任务时动态替换这些字段。

例如,在上面的pubspec.yaml setup部分中,有关于如何更新你的pubspec.yaml以使用此工具的说明和示例。README中的publish_tools版本是动态设置的变量。以下是tool/README.mdmustache模板中的相应部分:

```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.mdCHANGELOG.md,模板可以使用mustache语法访问ptConfig对象中的数据
pt-pana pana将执行本地包分析,这与你在运行dart pub publish时在pub.dev服务器上进行的分析相匹配。这对于在发布前发现包的缺陷非常有用
pt-commit 提交项目到GitHub(git add .git commit {{ ptConfig.commit }}git pull --tagsgit tag v${pubSpec.version}git push --tagsgit 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

1 回复

更多关于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
回到顶部