菜单

macOS 和 Linux 构建

相关源文件

目的与范围

本文档详细介绍了为 Draw.io Desktop 应用程序创建 macOS 和 Linux 发行版的构建流程。它涵盖了配置选项、构建目标、特定于平台的先决条件(如 macOS 公证)以及用于自动化构建的持续集成管道。有关特定于 Windows 的构建信息,请参阅 Windows Builds

构建系统概述

Draw.io Desktop 使用 electron-builder 为 macOS 和 Linux 平台打包应用程序。构建配置主要在特定于平台的 JSON 文件中定义,并通过 GitHub Actions 工作流实现构建过程的自动化。

来源:electron-builder-linux-mac.json electron-builder-snap.json .github/workflows/electron-builder.yml build/notarize.mjs

macOS 构建配置

macOS 构建过程会创建可分发包,并处理 Apple 特有的安全要求,包括代码签名和公证。

构建目标

Draw.io Desktop 同时构建 Intel (x64) 和 Apple Silicon (arm64) 处理器版本,还提供一个通用的二进制文件,可在两种架构上运行。

来源:electron-builder-linux-mac.json17-36

代码签名和公证

Apple 要求应用在分发给用户之前必须进行签名和公证。这项安全措施有助于保护用户免受恶意软件侵害。

公证过程由 notarize.mjs 脚本处理,该脚本在 electron-builder 配置中被指定为 afterSign 钩子。

来源:electron-builder-linux-mac.json17-22 build/notarize.mjs

macOS 特定设置

{
  "hardenedRuntime": true,
  "gatekeeperAssess": false,
  "entitlements": "build/entitlements.mac.plist",
  "entitlementsInherit": "build/entitlements.mac.plist",
  "category": "public.app-category.graphics-design"
}

这些设置启用了 Apple 所需的安全功能

  • hardenedRuntime:启用 Apple 的强化运行时安全功能
  • entitlements:指定应用程序的权限
  • category:将应用程序分类到 macOS App Store 中

来源:electron-builder-linux-mac.json17-22

Linux 构建配置

Linux 构建过程会生成多种包格式,以支持不同的 Linux 发行版包管理器。

构建目标

来源:electron-builder-linux-mac.json41-62 electron-builder-snap.json14-22

Linux 包配置

Linux 包包含特定的元数据,以便与桌面环境正确集成

{
  "executableName": "drawio",
  "category": "Graphics",
  "maintainer": "JGraph <support@draw.io>",
  "icon": "./build"
}

RPM 包包含额外的参数,以满足 Red Hat 的打包要求

"rpm": {
  "fpm": [
    "--rpm-rpmbuild-define=_build_id_links none",
    "--rpm-digest=sha256"
  ]
}

来源:electron-builder-linux-mac.json41-45 electron-builder-linux-mac.json64-69

Snap 包

Snap 包提供了一种容器化的应用程序格式,具有对系统资源的受控访问。Draw.io Desktop 的 Snap 包配置为可以访问

  • 默认权限
  • 可移动媒体(用于访问外部驱动器上的文件)
"snap": {
  "plugs": [
    "default",
    "removable-media"
  ]
}

来源:electron-builder-snap.json23-28

macOS 和 Linux 的 CI/CD 管道

自动化构建过程在 GitHub Actions 上运行,并在推送版本标签时触发。

来源:.github/workflows/electron-builder.yml

构建环境设置

GitHub Actions 工作流在 Ubuntu 和 macOS 运行器上运行

对于 Linux 构建,会安装额外的依赖项

sudo apt-get update && sudo apt-get install -y icnsutils graphicsmagick xz-utils rpm

对于两个平台,工作流都会设置用于代码签名和公证的环境变量

来源:.github/workflows/electron-builder.yml10-25 .github/workflows/electron-builder.yml62-63

构建与发布流程

构建过程遵循以下步骤

  1. 安装 Node.js 和 yarn
  2. 设置构建环境
  3. 运行同步脚本(sync.js/sync.cjs
  4. 使用 electron-builder 构建包
  5. 对于 Linux,另外构建 Snap 包
  6. (Linux)将 Snap 包推送到 edge 频道
yarn run sync
yarn run release-linux

对于 Linux 上的 Snap 包

sudo snap install snapcraft --classic
yarn run release-snap
snapcraft push --release edge dist/draw.io-amd64-*.snap

来源:.github/workflows/electron-builder.yml67-77

文件关联

macOS 和 Linux 包都配置为与以下文件类型关联

扩展描述MIME 类型角色
.drawiodraw.io 图application/vnd.jgraph.mxfile编辑器
.vsdxVSDX 文档application/vnd.visio编辑器

来源:electron-builder-linux-mac.json70-85 electron-builder-snap.json30-45

通用配置

macOS 和 Linux 构建共享一些通用配置参数

这些设置定义了

  • 应用程序标识符
  • 版权信息
  • 是否使用 asar 归档格式
  • 包含/排除在包中的文件
  • 工件的命名约定
  • 发布方法(GitHub Releases)

来源:electron-builder-linux-mac.json1-16 electron-builder-snap.json1-13