名称:makepad-deployment 描述: | 关键:用于Makepad打包和部署。触发词: deploy, package, APK, IPA, 打包, 部署, cargo-packager, cargo-makepad, WASM, Android, iOS, distribution, installer, .deb, .dmg, .nsis, GitHub Actions, CI, action, marketplace
Makepad打包与部署
此技能涵盖为所有支持的平台打包Makepad应用程序。
快速导航
| 平台 | 工具 | 输出 |
|---|---|---|
| 桌面 | cargo-packager |
.deb, .nsis, .dmg |
| Android | cargo-makepad |
.apk |
| iOS | cargo-makepad |
.app, .ipa |
| Web | cargo-makepad |
Wasm + HTML/JS |
| CI/CD | makepad-packaging-action |
GitHub Release资产 |
GitHub Actions打包
使用makepad-packaging-action在CI中打包Makepad应用程序。它包装了
cargo-packager(桌面)和cargo-makepad(移动),并可以将工件上传到GitHub Releases。
jobs:
package:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: Project-Robius-China/makepad-packaging-action@v1
with:
args: --target x86_64-unknown-linux-gnu --release
注意事项:
- 桌面包必须在匹配的操作系统runner上运行(Linux/Windows/macOS)。
- iOS构建需要macOS runner。
- Android构建可以在任何操作系统runner上运行。
完整的输入/环境/输出和发布工作流见
references/makepad-packaging-action.md。
桌面打包
桌面打包使用cargo-packager和robius-packaging-commands处理资源。
安装工具
# 安装cargo-packager
cargo install cargo-packager --locked
# 安装robius-packaging-commands (v0.2.1)
cargo install --version 0.2.1 --locked \
--git https://github.com/project-robius/robius-packaging-commands.git \
robius-packaging-commands
配置Cargo.toml
将打包配置添加到您的Cargo.toml:
[package.metadata.packager]
product_name = "YourAppName"
identifier = "com.yourcompany.yourapp"
authors = ["Your Name or Team"]
description = "A brief description of your Makepad application"
# 注意:long_description每行最多80个字符
long_description = """
Your detailed description here.
Keep each line under 80 characters.
"""
icons = ["./assets/icon.png"]
out_dir = "./dist"
# 打包前命令收集资源
before-packaging-command = """
robius-packaging-commands before-packaging \
--force-makepad \
--binary-name your-app \
--path-to-binary ./target/release/your-app
"""
# 包含在包中的资源
resources = [
# Makepad内置资源(必需)
{ src = "./dist/resources/makepad_widgets", target = "makepad_widgets" },
{ src = "./dist/resources/makepad_fonts_chinese_bold", target = "makepad_fonts_chinese_bold" },
{ src = "./dist/resources/makepad_fonts_chinese_bold_2", target = "makepad_fonts_chinese_bold_2" },
{ src = "./dist/resources/makepad_fonts_chinese_regular", target = "makepad_fonts_chinese_regular" },
{ src = "./dist/resources/makepad_fonts_chinese_regular_2", target = "makepad_fonts_chinese_regular_2" },
{ src = "./dist/resources/makepad_fonts_emoji", target = "makepad_fonts_emoji" },
# 您的应用程序资源
{ src = "./dist/resources/your_app_resource", target = "your_app_resource" },
]
before-each-package-command = """
robius-packaging-commands before-each-package \
--force-makepad \
--binary-name your-app \
--path-to-binary ./target/release/your-app
"""
Linux (Debian/Ubuntu)
# 安装依赖
sudo apt-get update
sudo apt-get install libssl-dev libsqlite3-dev pkg-config \
binfmt-support libxcursor-dev libx11-dev libasound2-dev libpulse-dev
# 构建包
cargo packager --release
输出:.deb文件在./dist/中
Windows
# 构建NSIS安装程序
cargo packager --release --formats nsis
输出:.exe安装程序在./dist/中
macOS
# 构建包
cargo packager --release
输出:.dmg文件在./dist/中
平台特定配置
# Linux (Debian)
[package.metadata.packager.deb]
depends = "./dist/depends_deb.txt"
desktop_template = "./packaging/your-app.desktop"
section = "utils"
# macOS
[package.metadata.packager.macos]
minimum_system_version = "11.0"
frameworks = []
info_plist_path = "./packaging/Info.plist"
entitlements = "./packaging/Entitlements.plist"
# 可选:用于分发的签名身份
signing_identity = "Developer ID Application: Your Name (XXXXXXXXXX)"
# macOS DMG
[package.metadata.packager.dmg]
background = "./packaging/dmg_background.png"
window_size = { width = 960, height = 540 }
app_position = { x = 200, y = 250 }
application_folder_position = { x = 760, y = 250 }
# Windows NSIS
[package.metadata.packager.nsis]
appdata_paths = [
"$APPDATA/$PUBLISHER/$PRODUCTNAME",
"$LOCALAPPDATA/$PRODUCTNAME",
]
移动打包
移动平台使用cargo-makepad进行构建和打包。
安装cargo-makepad
cargo install --force --git https://github.com/makepad/makepad.git \
--branch dev cargo-makepad
Android
# 安装Android工具链
cargo makepad android install-toolchain
# 完整NDK(推荐以获得完全支持)
cargo makepad android install-toolchain --full-ndk
# 构建APK
cargo makepad android build -p your-app --release
输出:.apk在./target/makepad-android-app/中
在设备/模拟器上运行:
cargo makepad android run -p your-app --release
iOS
# 安装iOS工具链
cargo makepad apple ios install-toolchain
iOS模拟器:
cargo makepad apple ios \
--org=com.yourcompany \
--app=YourApp \
run-sim -p your-app --release
输出:.app在./target/makepad-apple-app/aarch64-apple-ios-sim/release/中
iOS设备(需要配置):
首先,在Xcode中创建一个空应用程序,并匹配org/app名称以生成配置配置文件。
cargo makepad apple ios \
--org=com.yourcompany \
--app=YourApp \
--profile=$YOUR_PROFILE_PATH \
--cert=$YOUR_CERT_FINGERPRINT \
--device=iPhone \
run-device -p your-app --release
输出:.app在./target/makepad-apple-app/aarch64-apple-ios/release/中
创建IPA用于分发:
cd ./target/makepad-apple-app/aarch64-apple-ios/release
mkdir Payload
cp -r your-app.app Payload/
zip -r your-app-ios.ipa Payload
Wasm打包
为Web浏览器构建您的Makepad应用程序。
# 安装Wasm工具链
cargo makepad wasm install-toolchain
# 构建和运行
cargo makepad wasm run -p your-app --release
输出在./target/makepad-wasm-app/release/your-app/中:
index.html- 入口点*.wasm- WebAssembly模块*.js- JavaScript桥接resources/- 静态资产
本地服务:
cd ./target/makepad-wasm-app/release/your-app
python3 -m http.server 8080
# 打开http://localhost:8080
完整的Cargo.toml示例
[package]
name = "my-makepad-app"
version = "1.0.0"
edition = "2024"
[dependencies]
makepad-widgets = { git = "https://github.com/makepad/makepad", branch = "dev" }
[profile.release]
opt-level = 3
[profile.release-lto]
inherits = "release"
lto = "thin"
[profile.distribution]
inherits = "release"
codegen-units = 1
lto = "fat"
[package.metadata.packager]
product_name = "My Makepad App"
identifier = "com.example.mymakepadapp"
authors = ["Your Name <you@example.com>"]
description = "A cross-platform Makepad application"
long_description = """
My Makepad App is a cross-platform application
built with the Makepad UI framework in Rust.
It runs on desktop, mobile, and web platforms.
"""
icons = ["./packaging/icon.png"]
out_dir = "./dist"
before-packaging-command = """
robius-packaging-commands before-packaging \
--force-makepad \
--binary-name my-makepad-app \
--path-to-binary ./target/release/my-makepad-app
"""
resources = [
{ src = "./dist/resources/makepad_widgets", target = "makepad_widgets" },
{ src = "./dist/resources/makepad_fonts_chinese_bold", target = "makepad_fonts_chinese_bold" },
{ src = "./dist/resources/makepad_fonts_chinese_bold_2", target = "makepad_fonts_chinese_bold_2" },
{ src = "./dist/resources/makepad_fonts_chinese_regular", target = "makepad_fonts_chinese_regular" },
{ src = "./dist/resources/makepad_fonts_chinese_regular_2", target = "makepad_fonts_chinese_regular_2" },
{ src = "./dist/resources/makepad_fonts_emoji", target = "makepad_fonts_emoji" },
{ src = "./dist/resources/my-makepad-app", target = "my-makepad-app" },
]
before-each-package-command = """
robius-packaging-commands before-each-package \
--force-makepad \
--binary-name my-makepad-app \
--path-to-binary ./target/release/my-makepad-app
"""
[package.metadata.packager.deb]
depends = "./dist/depends_deb.txt"
section = "utils"
[package.metadata.packager.macos]
minimum_system_version = "11.0"
[package.metadata.packager.nsis]
appdata_paths = ["$LOCALAPPDATA/$PRODUCTNAME"]
快速参考
| 任务 | 命令 |
|---|---|
| 安装桌面打包器 | cargo install cargo-packager --locked |
| 安装资源助手 | cargo install --version 0.2.1 --locked --git https://github.com/project-robius/robius-packaging-commands.git robius-packaging-commands |
| 安装移动打包器 | cargo install --force --git https://github.com/makepad/makepad.git --branch dev cargo-makepad |
| GitHub Actions打包 | uses: Project-Robius-China/makepad-packaging-action@v1 |
| Linux打包 | cargo packager --release |
| Windows打包 | cargo packager --release --formats nsis |
| macOS打包 | cargo packager --release |
| 构建Android APK | cargo makepad android build -p app --release |
| 构建iOS(模拟器) | cargo makepad apple ios --org=x --app=y run-sim -p app --release |
| 构建iOS(设备) | cargo makepad apple ios --org=x --app=y --profile=... --cert=... run-device -p app --release |
| 构建Wasm | cargo makepad wasm run -p app --release |
故障排除
缺少资源
如果应用程序因缺少资源而崩溃:
- 检查Cargo.toml中的
resources数组是否包含所有Makepad资源 - 验证
before-packaging-command成功运行 - 检查
./dist/resources/是否包含预期文件
iOS配置
对于iOS设备部署:
- 在Xcode中创建具有相同org/app标识符的空应用程序
- 在物理设备上运行一次以生成配置配置文件
- 记下配置文件路径、证书指纹
- 使用
--profile、--cert、--device标志
Android SDK问题
# 重新安装工具链并包含完整NDK
cargo makepad android install-toolchain --full-ndk
参考文件
references/platform-troubleshooting.md- 平台特定部署问题references/makepad-packaging-action.md- GitHub Actions打包参考community/dora-studio-package-workflow.md- Dora Studio CI打包示例