在科技飞速发展的今天,一切似乎都在向云和移动端转移,你可能会认为桌面应用程序已经成为过去式。不过,先别急着否定桌面应用程序的重要性!虽然移动应用程序和基于网络的应用程序提供了便利性和可移植性,但桌面应用程序提供的功能和表现水平是难以超越的。从提供卓越的计算能力,到提供无缝的用户体验,再到安全性和离线运行能力,桌面应用程序往往能不断发展壮大,满足用户和企业不断变化的需求,这使它们成为无数行业和用户不可或缺的工具。例如,Microsoft Excel 是桌面上最强大的电子表格应用程序,其功能无与伦比。尽管微软试图在网络上复制它的成功,但桌面应用程序仍然无与伦比。
Flutter 坚定不移地致力于覆盖广泛的设备,可以帮助您从单一代码库中构建面向 macOS、Windows 和 Linux 三大平台的桌面应用程序。它提供无懈可击的无缝本地编译、成熟的第三方软件包生态系统来构建桌面应用程序,同时还支持构建令人惊叹的可视化用户界面,因此在构建桌面应用程序时被广泛采用。
为什么要发布 Flutter 桌面应用程序的 “独立 ”或开源指南?
当我第一次准备发布API DASH时——API Dash 是 Postman 的开源替代品,可帮助开发人员测试和集成 API,完全使用 Flutter 从零开始构建(仓库链接)——殊不知,在准备分发应用程序的过程中,我将面临一个重大障碍。
由于我正在构建一个开源的 Flutter 应用程序,所以我想按照开源社区的方式来发布它,即通过 GitHub 上提供的可下载软件包安装程序来发布,如 macOS 的 .app 或 .dmg、Windows 的 .exe 文件、基于 Redhat 的 Linux 的 .rpm 软件包和基于 Debian 的 Linux 系统的 .deb 软件包。
Flutter 官方文档详细介绍了官方商店(App Store (macOS)、Microsoft Store (Windows) 和 Snap Store (Ubuntu/Linux))的打包和分发。但是,和其他开发者一样,我也觉得需要一份分步指南,指导我如何在多个平台上打包和分发我的应用程序,而且分发更自由、不收费。
目前,API Dash 完全通过 GitHub 发布,适用于 macOS(针对英特尔和苹果硅芯片的通用构建)、Windows(64 位 exe)和 Linux(针对英特尔和 ARM 芯片的 debian 和 rpm 包)。
通过本指南,我想与大家分享我的心得,让大家也能以开源方式打包和发布 Flutter 应用程序。
打包和发布适用于 macOS 的 Flutter 桌面应用程序
我们可以为 macOS 构建和分发一个通用软件包,它既适用于英特尔芯片,也适用于苹果硅芯片(如 M1、M2 等)。
第一步
执行 flutter 构建命令并在 Xcode 中打开workspace。
第二步
下一步是点击 Runner,选择 Signing & Capabilities选项卡。
现在,请填写下图所示的签名详细信息。
macOS 包含一项名为 Gatekeeper 的安全技术,旨在帮助确保只有受信任的软件才能在用户的 Mac 上运行。因此,如果你不签名你的产物,Gatekeeper 将不允许你的应用程序运行。
获取签名证书有两种方法——
- 购买 Apple Developer ID,个人费用为 99 美元/年,企业费用为 299 美元/年。
- 如果您是苹果公司的注册用户,可以使用苹果公司提供的免费开发证书来签署您的应用程序。该免费证书不带公证功能,因此您无法将应用程序上传到应用程序商店,但您可以通过 Github 或您的网站免费发布应用程序。
第三步
添加相关entitlements/permissions,并启用hardened runtime(Apple 要求),以防止任何未经授权的代码修改,并防止访问敏感资源。此外,为了获得 Apple 的公证,macOS 应用程序必须启用Hardened Runtime功能。
第四步(如果没有付费开发者账户,请跳过)
如果您拥有付费开发者账户,请通过Product > Archive菜单选项创建archive。
创建archive后,您可以对应用程序进行公证,以避免在用户首次打开应用程序时显示任何恶意软件警告。
查看Window > Organizer,
并点击 Validate App进行公证。
通过验证后,您就可以点击 Distribute App来发布应用程序。
但是,作为一个 “独立 ”或开源开发者,你可能没有一个昂贵的付费账户。
因此,您可以按照以下步骤操作:
第五步
在release 模式下为 macos 执行 flutter build 命令。如下图所示,它将构建应用程序并将其放置在 macos > Build > Products > Release 文件夹中。
第六步
使用 codesign 命令验证应用程序是否已正确签名,如下所示。
第七步
如果应用程序没有签名,您可以自行签名。
首先,需要使用security命令查找有效签名。
然后,您可以使用下面的codesign命令对应用程序进行代码签名并验证。
第八步
你现在可以自由发布这个文件,人们可以把它放到自己的应用程序文件夹中运行,因为 macOS 允许侧载。
由于我们没有标记该应用程序,因此当用户首次运行该应用程序时,将显示恶意软件信息。这种情况很常见,因为大多数免费发布的 macOS 应用程序都会显示这条信息,而且安装说明中可能会包括用户如何首次打开应用程序。
您可以提供的安装说明示例如下:
- 右键单击应用,并点击
打开
- 再次点击
打开启动应用
只需进行一次这样的操作,后续就可以像其他普通应用程序一样打开。
第九步
在苹果社区,.app 文件通常通过 .dmg 磁盘映像分发,用户可以轻松安装应用程序。
在安装 macOS 应用程序时,你可能会看到类似下面的对话框。
让我们通过以下步骤了解如何创建 .dmg 文件。
第十步
要创建 .dmg 磁盘映像文件,我们将使用 appdmg nodejs 软件包。
安装nodejs 并使用 npm 命令安装 appdmg 软件包,如下所示。
第十一步
在项目中创建 installers > macos文件夹,添加背景图片、图标并创建 config.json 文件。
磁盘镜像安装对话框(如下图)有各种组件,如图标、标题、背景和内容,这些都可以在config.json文件中指定。
在 config.json 文件中指定应用程序发布版本的路径、背景和图标图像、内容位置及其他规格,如下所述。
{
"title": "API Dash",
"icon": "AppIcon.icns",
"background": "background.png",
"contents": [
{
"x": 445,
"y": 260,
"type": "link",
"path": "/Applications"
},
{
"x": 155,
"y": 270,
"type": "file",
"path": "../../build/macos/Build/Products/Release/API Dash.app"
}
],
"code-sign": {
"signing-identity": "PQR"
}
}
注意:别忘了添加代码签名标识(如下图所示),我们可以使用security命令获取该标识,如第 7 步所示。即使你已经签署了 .app 文件,.dmg 也需要签署。
第十二步
现在,使用以下命令进入installers > macos 文件夹
$ cd installers/macos
然后运行appdmg命令
appdmg config.json "App name.dmg"
现在,当前文件夹中的 .dmg 文件已生成,可以分发了。您可以查看提供给用户的安装说明示例(链接)。
第十三步
要发布应用程序,可以创建一个新的 GitHub release,并附上.dmg文件,如下所示。
一旦发布,所有用户均可下载该应用程序。