Flutter MacOS应用自动化打包方案与脚本实现
1. 项目概述Flutter作为跨平台开发框架在桌面端领域的应用越来越广泛。但很多开发者发现将Flutter应用打包成MacOS可分发格式dmg的过程相当繁琐。每次发布新版本都需要重复执行清理、编译、打包等一系列操作不仅效率低下还容易出错。我在实际项目中发现通过编写自动化shell脚本可以完美解决这个问题。这个方案的核心价值在于将原本需要手动执行的7-8个步骤简化为双击脚本即可完成自动读取项目版本号生成规范化的dmg文件名标准化打包流程避免人为操作失误特别适合需要频繁打包测试的CI/CD场景2. 环境准备与工具配置2.1 基础环境要求在开始之前请确保开发环境满足以下条件已安装Flutter SDK且配置了桌面端开发环境flutter doctor通过所有检查MacOS系统版本≥10.15Catalina已安装Homebrew包管理器项目已配置好MacOS构建支持flutter create --platformsmacos提示如果遇到could not find a flutter sdk错误请检查flutter命令是否已加入PATH环境变量2.2 create-dmg安装与验证这个方案的核心依赖是create-dmg工具它负责将.app文件转换为dmg镜像。安装方法很简单brew install create-dmg安装完成后建议运行以下命令验证create-dmg --version # 预期输出类似create-dmg version 1.0.03. 脚本实现详解3.1 脚本文件结构完整的打包方案包含以下文件project_root/ ├── packages/ │ ├── generate_mac_dmg (主脚本) │ └── installer_background.png (dmg背景图) ├── pubspec.yaml └── ... (其他项目文件)3.2 主脚本解析脚本的核心逻辑分为四个阶段#!/bin/sh # 阶段1初始化环境 cd $( dirname $0 ) cd ../ # 阶段2清理并构建项目 flutter clean flutter build macos --release # 阶段3解析版本信息 fullVersion$(grep -i version: pubspec.yaml) buildName$(echo $fullVersion | cut -d -f 2 | cut -d -f 1) buildNumber$(echo $fullVersion | cut -d -f 2 ) # 阶段4生成dmg文件 create-dmg \ --volname ${appName}安装器 \ --background ../installer_background.png \ --window-pos 200 120 \ --window-size 800 450 \ --icon-size 100 \ --icon ${appName}.app 240 190 \ --hide-extension ${appName}.app \ --app-drop-link 550 190 \ ./$fileName \ ../../build/macos/Build/Products/Release3.3 关键参数说明参数作用推荐值--volnamedmg挂载时显示的卷名应用名安装器后缀--window-sizedmg窗口尺寸800×450适配Retina--icon-size应用图标大小100px--app-drop-linkApplications快捷方式位置右侧居中区域4. 实战操作指南4.1 首次使用配置在项目根目录创建packages文件夹将脚本文件放入并赋予执行权限chmod x generate_mac_dmg准备一张800×450像素的背景图建议使用纯色渐变背景4.2 打包执行流程双击运行generate_mac_dmg脚本会自动清理旧构建产物编译Release版本生成带版本号的dmg文件打开输出目录输出文件路径packages/products/应用名_macos_版本号.dmg4.3 自定义配置项在脚本开头可以修改这些变量# 自定义dmg文件名前缀 fileNamePrefixMyApp # 指定.app文件名默认自动检测 appNamecustom_name.app # 修改dmg窗口尺寸 windowWidth900 windowHeight5005. 常见问题排查5.1 打包失败常见原因错误现象解决方案create-dmg命令未找到检查brew安装是否成功重新执行brew link create-dmg背景图加载失败确认图片路径正确建议使用绝对路径版本号解析错误检查pubspec.yaml中version格式是否为x.x.xx.app文件找不到确认flutter build macos执行成功5.2 性能优化建议在CI环境中可以添加--no-clean参数避免重复清理flutter build macos --release --no-clean对于大型项目可以增加编译缓存flutter pub get flutter precache --macos6. 进阶应用场景6.1 与CI/CD集成在GitHub Actions中配置自动打包jobs: build: runs-on: macos-latest steps: - uses: actions/checkoutv2 - run: brew install create-dmg - run: chmod x packages/generate_mac_dmg - run: ./packages/generate_mac_dmg - uses: actions/upload-artifactv2 with: name: MacOS-Package path: packages/products/*.dmg6.2 多架构支持针对Apple Silicon优化flutter build macos --release --target-platform darwin-arm64,darwin-x64在create-dmg命令前添加架构检测arch$(uname -m) if [ $arch arm64 ]; then export PATH/opt/homebrew/bin:$PATH fi这个方案经过多个实际项目验证平均将打包时间从原来的15分钟缩短到3分钟以内且完全消除了人为操作失误的风险。特别是在需要频繁打包的敏捷开发场景中效率提升更为明显。