【翻译】打包和发布 Flutter 桌面应用程序: 创建 macOS .app 和 .dmg

375 阅读7分钟

原文链接

在科技飞速发展的今天,一切似乎都在向云和移动端转移,你可能会认为桌面应用程序已经成为过去式。不过,先别急着否定桌面应用程序的重要性!虽然移动应用程序和基于网络的应用程序提供了便利性和可移植性,但桌面应用程序提供的功能和表现水平是难以超越的。从提供卓越的计算能力,到提供无缝的用户体验,再到安全性和离线运行能力,桌面应用程序往往能不断发展壮大,满足用户和企业不断变化的需求,这使它们成为无数行业和用户不可或缺的工具。例如,Microsoft Excel 是桌面上最强大的电子表格应用程序,其功能无与伦比。尽管微软试图在网络上复制它的成功,但桌面应用程序仍然无与伦比。

Flutter 坚定不移地致力于覆盖广泛的设备,可以帮助您从单一代码库中构建面向 macOS、Windows 和 Linux 三大平台的桌面应用程序。它提供无懈可击的无缝本地编译、成熟的第三方软件包生态系统来构建桌面应用程序,同时还支持构建令人惊叹的可视化用户界面,因此在构建桌面应用程序时被广泛采用。

为什么要发布 Flutter 桌面应用程序的 “独立 ”或开源指南?

当我第一次准备发布API DASH时——API Dash 是 Postman 的开源替代品,可帮助开发人员测试和集成 API,完全使用 Flutter 从零开始构建(仓库链接)——殊不知,在准备分发应用程序的过程中,我将面临一个重大障碍。

q1.webp

由于我正在构建一个开源的 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 包)。

q2.webp

通过本指南,我想与大家分享我的心得,让大家也能以开源方式打包和发布 Flutter 应用程序。

打包和发布适用于 macOS 的 Flutter 桌面应用程序

前提阅读 - 有关 macOS 集成部署的官方文档。

我们可以为 macOS 构建和分发一个通用软件包,它既适用于英特尔芯片,也适用于苹果硅芯片(如 M1、M2 等)。

第一步

执行 flutter 构建命令并在 Xcode 中打开workspace

q3.webp

第二步

下一步是点击 Runner,选择 Signing & Capabilities选项卡。

现在,请填写下图所示的签名详细信息。

q4.webp

macOS 包含一项名为 Gatekeeper 的安全技术,旨在帮助确保只有受信任的软件才能在用户的 Mac 上运行。因此,如果你不签名你的产物,Gatekeeper 将不允许你的应用程序运行。

获取签名证书有两种方法——

  1. 购买 Apple Developer ID,个人费用为 99 美元/年,企业费用为 299 美元/年。
  2. 如果您是苹果公司的注册用户,可以使用苹果公司提供的免费开发证书来签署您的应用程序。该免费证书不带公证功能,因此您无法将应用程序上传到应用程序商店,但您可以通过 Github 或您的网站免费发布应用程序。

第三步

添加相关entitlements/permissions,并启用hardened runtime(Apple 要求),以防止任何未经授权的代码修改,并防止访问敏感资源。此外,为了获得 Apple 的公证,macOS 应用程序必须启用Hardened Runtime功能。

q5.webp

第四步(如果没有付费开发者账户,请跳过)

如果您拥有付费开发者账户,请通过Product > Archive菜单选项创建archive

q6.webp

创建archive后,您可以对应用程序进行公证,以避免在用户首次打开应用程序时显示任何恶意软件警告。

查看Window > Organizer

q7.webp

并点击 Validate App进行公证。

q1.webp

通过验证后,您就可以点击 Distribute App来发布应用程序。

但是,作为一个 “独立 ”或开源开发者,你可能没有一个昂贵的付费账户。

因此,您可以按照以下步骤操作:

第五步

release 模式下为 macos 执行 flutter build 命令。如下图所示,它将构建应用程序并将其放置在 macos > Build > Products > Release 文件夹中。

q1.webp

第六步

使用 codesign 命令验证应用程序是否已正确签名,如下所示。

q1.webp

第七步

如果应用程序没有签名,您可以自行签名。

首先,需要使用security命令查找有效签名。

q1.webp

然后,您可以使用下面的codesign命令对应用程序进行代码签名并验证。

q1.webp

第八步

你现在可以自由发布这个文件,人们可以把它放到自己的应用程序文件夹中运行,因为 macOS 允许侧载。

由于我们没有标记该应用程序,因此当用户首次运行该应用程序时,将显示恶意软件信息。这种情况很常见,因为大多数免费发布的 macOS 应用程序都会显示这条信息,而且安装说明中可能会包括用户如何首次打开应用程序。

q1.webp

您可以提供的安装说明示例如下:

  1. 右键单击应用,并点击打开

q1.webp

  1. 再次点击打开启动应用

q1.webp

只需进行一次这样的操作,后续就可以像其他普通应用程序一样打开。

第九步

在苹果社区,.app 文件通常通过 .dmg 磁盘映像分发,用户可以轻松安装应用程序。

在安装 macOS 应用程序时,你可能会看到类似下面的对话框。

q1.webp

让我们通过以下步骤了解如何创建 .dmg 文件。

第十步

要创建 .dmg 磁盘映像文件,我们将使用 appdmg nodejs 软件包。

q1.webp

安装nodejs 并使用 npm 命令安装 appdmg 软件包,如下所示。

q1.webp

第十一步

在项目中创建 installers > macos文件夹,添加背景图片、图标并创建 config.json 文件。

q1.webp

磁盘镜像安装对话框(如下图)有各种组件,如图标、标题、背景和内容,这些都可以在config.json文件中指定。

q1.webp

在 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 也需要签署。

q1.webp

第十二步

现在,使用以下命令进入installers > macos 文件夹

$ cd installers/macos

然后运行appdmg命令

appdmg config.json "App name.dmg"

q1.webp

现在,当前文件夹中的 .dmg 文件已生成,可以分发了。您可以查看提供给用户的安装说明示例(链接)。

第十三步

要发布应用程序,可以创建一个新的 GitHub release,并附上.dmg文件,如下所示。

q1.webp

一旦发布,所有用户均可下载该应用程序。

相关文章

打包和发布 Flutter-Windows 桌面应用程序