原来 GitHub Actions 还能直接打包 EXE、IPA、DMG、APK:不用本地搭环境,也不一定需要 Mac
原来 GitHub Actions 还能直接打包 EXE、IPA、DMG、APK:不用本地搭环境,也不一定需要 Mac
大家好,这里是「代码简单说」。
最近我才发现一个之前一直被我忽略的东西:GitHub Actions 不只是用来跑测试、部署网站,还可以直接拿来做软件构建和发布。
这意味着什么?
以前我如果要做一个跨平台客户端,往往需要准备各种开发环境:
Windows
├── Node.js
├── Java / JDK
├── Android SDK
├── Android Studio
└── 各种编译工具
Mac
├── Xcode
├── CocoaPods
├── Node.js
└── Apple 签名环境
尤其是做 macOS、iOS 软件时,没有 Mac 经常会非常麻烦。
但 GitHub Actions 可以直接调用 GitHub 提供的云端 Runner:
本地电脑
↓
git push
↓
GitHub
↓
GitHub Actions
↓
自动构建
↓
EXE / DMG / APK / IPA
↓
GitHub Artifacts / Release
整个构建过程都可以放到云端完成。
一、GitHub Actions 到底是什么
GitHub Actions 本质上就是 GitHub 提供的一套 CI/CD 自动化平台。
最简单的理解:
你把代码提交到 GitHub,GitHub 就帮你开一台临时电脑执行命令。
例如:
name: Build
on:
push:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: npm install
- name: Build
run: npm run build
提交代码后,GitHub 就会自动:
拉取代码
↓
启动 Linux Runner
↓
安装 Node.js
↓
npm install
↓
npm run build
↓
生成构建结果
所以 GitHub Actions 本质上可以理解成:
“远程帮我执行命令的电脑。”
二、最让我惊讶的是,它不只是 Linux
以前很多人的印象可能是:
GitHub Actions = 跑 Linux 脚本
实际上 GitHub 提供了不同操作系统的 Runner,例如:
ubuntu-latest
windows-latest
macos-latest
所以你可以根据目标平台选择构建环境。
例如:
| 目标 | Runner |
|---|---|
| Linux | Ubuntu |
| Android | Ubuntu |
| Windows | Windows |
| macOS | macOS |
| iOS | macOS |
这件事情对于个人开发者来说非常方便。
三、Android APK 可以直接云端打包
比如我开发一个 Android 项目。
以前通常需要:
安装 Android Studio
安装 JDK
安装 Android SDK
配置 Gradle
配置环境变量
下载各种依赖
电脑还得腾出大量空间。
但现在完全可以让 GitHub Actions 帮我构建。
例如:
name: Android Build
on:
push:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'
- name: Build APK
run: ./gradlew assembleRelease
- name: Upload APK
uses: actions/upload-artifact@v4
with:
name: app-release
path: app/build/outputs/apk/release/*.apk
之后:
git push
↓
GitHub Actions
↓
Gradle 构建
↓
app-release.apk
直接就出来了。
四、EXE 也可以让 GitHub 帮你打包
Windows 软件同样如此。
比如 Electron:
Vue
↓
Electron
↓
electron-builder
↓
EXE
GitHub Actions 可以直接使用 Windows Runner:
jobs:
build:
runs-on: windows-latest
然后执行:
npm install
npm run build
或者:
npx electron-builder --win
最后自动生成:
dist/
├── xxx.exe
└── xxx.exe.blockmap
再通过:
uses: actions/upload-artifact@v4
上传。
这样我的电脑甚至不需要安装 Visual Studio。
五、DMG 也可以直接构建
这也是我觉得 GitHub Actions 特别方便的地方。
macOS 软件通常需要 Mac 环境。
例如 Electron 项目:
electron-builder --mac
传统情况下,你可能需要:
一台 Mac
↓
安装 Node.js
↓
安装依赖
↓
配置 Xcode / 工具链
↓
执行构建
↓
生成 DMG
而 GitHub Actions 可以直接指定:
runs-on: macos-latest
然后:
- name: Build macOS
run: npm run build:mac
生成:
MyApp.dmg
MyApp.zip
所以对于单纯的 macOS 构建任务来说:
我自己的电脑不需要是一台 Mac。
GitHub 会提供 macOS Runner 执行构建。
六、那 IPA 呢?
这里需要特别说明。
IPA 可以进行云端构建,但 iOS 的情况明显比 APK 复杂。
原因不是“编译”本身,而是 Apple 的签名体系。
通常涉及:
Apple Developer
↓
Certificates
↓
Provisioning Profiles
↓
Code Signing
↓
Xcode
↓
IPA
所以 GitHub Actions 可以运行:
macOS Runner
↓
Xcode
↓
iOS 项目
↓
Archive
↓
Export IPA
但是:
你仍然需要 Apple 的开发者账号以及正确的签名材料。
GitHub Actions 并不会凭空解决 Apple 签名问题。
因此更准确的说法是:
没有自己的 Mac,也可以把 iOS 构建流程放到 GitHub Actions 的 macOS Runner 上执行。
这和“完全不需要 Apple 开发者账号”是两回事。
七、最舒服的地方:一次提交,多个平台一起构建
例如我有一个 Electron 项目:
MyApp
我可以写一个 Matrix:
jobs:
build:
strategy:
matrix:
os:
- windows-latest
- macos-latest
- ubuntu-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npm install
- run: npm run build
然后:
GitHub
│
▼
GitHub Actions
│
┌────────────┼────────────┐
▼ ▼ ▼
Windows macOS Ubuntu
│ │ │
▼ ▼ ▼
EXE DMG AppImage
一次提交,三个平台同时构建。
对于开发者来说,这个体验非常接近真正的云端 CI/CD。
八、还能自动发布 GitHub Release
实际上我觉得 GitHub Actions 最有价值的地方,并不是“帮你编译”。
而是:
编译 + 自动发布,可以串起来。
例如:
git tag v1.0.0
↓
GitHub Actions
↓
构建
↓
EXE
DMG
APK
AppImage
↓
GitHub Release
↓
自动上传所有安装包
于是以后发布版本可能只需要:
git tag v1.0.0
git push origin v1.0.0
剩下的全部自动完成。
九、甚至可以做到“发布即构建”
例如 Workflow:
on:
push:
tags:
- 'v*'
意思就是:
当我推送
v1.0.0、v1.1.0这种版本标签的时候,自动开始发布。
流程:
修改代码
↓
git commit
↓
git push
↓
git tag v1.0.0
↓
git push --tags
↓
GitHub Actions
↓
自动构建
↓
自动发布
以后发布软件的体验会变成:
打一个 Tag = 发布一个版本。
十、GitHub Actions 最大的价值,其实是“临时开发环境”
以前软件开发经常是:
我要打 Android 包
↓
我的电脑必须装 Android 环境
现在可以变成:
我要打 Android 包
↓
GitHub 帮我开 Ubuntu
↓
安装需要的工具
↓
执行构建
↓
构建结束
↓
机器释放
这其实是一种思维方式的变化。
我不再需要:
“我的电脑必须具备完整的构建环境。”
而变成:
“我的代码只需要能够在 CI 环境中自动完成构建。”
十一、这对个人开发者尤其方便
对于公司来说,这种 CI/CD 很正常。
但是对于个人开发者,我以前反而容易忽略这一点。
例如:
只有 Windows
却想做:
Android
Windows
macOS
Linux
iOS
以前第一反应可能是:
Android → 安装 Android Studio
Windows → 配置 Windows 构建环境
macOS → 买 Mac
iOS → 买 Mac + Xcode
现在完全可以先考虑:
GitHub
↓
Actions
↓
云端 Runner
↓
不同平台分别构建
至少在构建环境这一层,GitHub 已经帮你解决掉了很大一部分问题。
十二、但不要把 GitHub Actions 理解成“万能免费电脑”
这里也有几个需要注意的地方。
1. Runner 是临时环境
每次执行通常都是一个新的构建环境。
所以不要把重要文件直接存在 Runner 里。
应该使用:
Artifacts
或者:
GitHub Releases
保存产物。
2. 构建时间会消耗 Actions 额度
GitHub Actions 并不是无限免费。
不同账号、仓库类型以及 Runner 类型,对应的免费额度和计费规则不同。
而且不同 Runner 的消耗倍率也可能不同。
所以如果项目需要频繁构建,比如:
每提交一次代码
↓
构建一次
一个月下来消耗还是可能很快的。
具体额度建议直接在 GitHub:
Settings → Billing & licensing → Usage
查看当前账号实际用量。
3. macOS Runner 成本通常更高
如果只是:
APK
一般没有必要使用 macOS Runner。
直接:
runs-on: ubuntu-latest
即可。
但如果需要:
DMG
IPA
Xcode
iOS
就需要考虑 macOS Runner。
因此可以根据平台合理拆分 Workflow。
十三、最适合我的工作流
如果以后我自己做一个跨平台软件,我可能会直接按照这种方式设计:
GitHub Repository
│
├── src/
├── package.json
└── .github/
└── workflows/
├── android.yml
├── windows.yml
├── macos.yml
└── ios.yml
然后:
GitHub Push / Tag
│
▼
GitHub Actions
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
Ubuntu Windows macOS
│ │ │
▼ ▼ ▼
APK EXE DMG / IPA
最后统一进入:
GitHub Release
这样一套完整的自动发布体系就建立起来了。
十四、写在最后
我以前一直觉得:
想做 macOS 软件,首先得买 Mac。
但实际上需要区分两个事情:
开发环境和构建环境并不是一回事。
我的本地电脑主要负责:
写代码
↓
测试
↓
提交 GitHub
真正的:
编译
↓
打包
↓
签名
↓
发布
完全可以大量交给 GitHub Actions。
所以 GitHub Actions 对个人开发者来说,真正有价值的地方并不只是“免费 CI”。
而是它让:
“我没有某个平台的电脑”
不再必然意味着:
“我无法构建某个平台的软件”。
特别是对于 Electron、Tauri、Flutter、React Native、Android、iOS 等项目,这种云端构建思路非常值得尝试。
以前看到 GitHub Actions,我想到的可能只是:
自动测试
自动部署
现在才发现,它其实还可以当成一套:
云端编译服务器
来使用。
对于个人开发者来说,这个能力确实非常实用。
更多推荐



所有评论(0)