makepad-deployment
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseMakepad Packaging & Deployment
Makepad打包与部署
This skill covers packaging Makepad applications for all supported platforms.
本技能涵盖为所有支持的平台打包Makepad应用的方法。
Quick Navigation
快速导航
GitHub Actions Packaging
GitHub Actions打包
Use to package Makepad apps in CI. It wraps
(desktop) and (mobile), and can upload artifacts
to GitHub Releases.
makepad-packaging-actioncargo-packagercargo-makepadyaml
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 --releaseNotes:
- Desktop packages must run on matching OS runners (Linux/Windows/macOS).
- iOS builds require macOS runners.
- Android builds can run on any OS runner.
Full inputs/env/outputs and release workflows live in
.
references/makepad-packaging-action.md使用在CI环境中打包Makepad应用。它封装了(桌面端)和(移动端),并可将产物上传至GitHub Releases。
makepad-packaging-actioncargo-packagercargo-makepadyaml
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注意事项:
- 桌面端包必须在匹配的操作系统运行器上构建(Linux/Windows/macOS)。
- iOS构建需要macOS运行器。
- Android构建可在任意操作系统运行器上执行。
完整的输入/环境变量/输出参数以及发布工作流详情请查看。
references/makepad-packaging-action.mdDesktop Packaging
桌面端打包
Desktop packaging uses with for resource handling.
cargo-packagerrobius-packaging-commands桌面端打包使用结合处理资源文件。
cargo-packagerrobius-packaging-commandsInstall Tools
安装工具
bash
undefinedbash
undefinedInstall cargo-packager
安装cargo-packager
cargo install cargo-packager --locked
cargo install cargo-packager --locked
Install robius-packaging-commands (v0.2.1)
安装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
--git https://github.com/project-robius/robius-packaging-commands.git
robius-packaging-commands
undefinedcargo install --version 0.2.1 --locked
--git https://github.com/project-robius/robius-packaging-commands.git
robius-packaging-commands
--git https://github.com/project-robius/robius-packaging-commands.git
robius-packaging-commands
undefinedConfigure Cargo.toml
配置Cargo.toml
Add packaging configuration to your :
Cargo.tomltoml
[package.metadata.packager]
product_name = "YourAppName"
identifier = "com.yourcompany.yourapp"
authors = ["Your Name or Team"]
description = "A brief description of your Makepad application"在中添加打包配置:
Cargo.tomltoml
[package.metadata.packager]
product_name = "YourAppName"
identifier = "com.yourcompany.yourapp"
authors = ["Your Name or Team"]
description = "A brief description of your Makepad application"Note: long_description has 80 character max per line
注意:long_description每行最多80个字符
long_description = """
Your detailed description here.
Keep each line under 80 characters.
"""
icons = ["./assets/icon.png"]
out_dir = "./dist"
long_description = """
Your detailed description here.
Keep each line under 80 characters.
"""
icons = ["./assets/icon.png"]
out_dir = "./dist"
Pre-packaging command to collect resources
打包前收集资源的命令
before-packaging-command = """
robius-packaging-commands before-packaging
--force-makepad
--binary-name your-app
--path-to-binary ./target/release/your-app """
--force-makepad
--binary-name your-app
--path-to-binary ./target/release/your-app """
before-packaging-command = """
robius-packaging-commands before-packaging
--force-makepad
--binary-name your-app
--path-to-binary ./target/release/your-app """
--force-makepad
--binary-name your-app
--path-to-binary ./target/release/your-app """
Resources to include in package
要包含在包中的资源
resources = [
# Makepad built-in resources (required)
{ 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" },
# Your app resources
{ 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 """
--force-makepad
--binary-name your-app
--path-to-binary ./target/release/your-app """
undefinedresources = [
# 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 """
--force-makepad
--binary-name your-app
--path-to-binary ./target/release/your-app """
undefinedLinux (Debian/Ubuntu)
Linux(Debian/Ubuntu)
bash
undefinedbash
undefinedInstall dependencies
安装依赖
sudo apt-get update
sudo apt-get install libssl-dev libsqlite3-dev pkg-config
binfmt-support libxcursor-dev libx11-dev libasound2-dev libpulse-dev
binfmt-support libxcursor-dev libx11-dev libasound2-dev libpulse-dev
sudo apt-get update
sudo apt-get install libssl-dev libsqlite3-dev pkg-config
binfmt-support libxcursor-dev libx11-dev libasound2-dev libpulse-dev
binfmt-support libxcursor-dev libx11-dev libasound2-dev libpulse-dev
Build package
构建包
cargo packager --release
Output: `.deb` file in `./dist/`cargo packager --release
输出产物:`./dist/`目录下的`.deb`文件Windows
Windows
bash
undefinedbash
undefinedBuild NSIS installer
构建NSIS安装包
cargo packager --release --formats nsis
Output: `.exe` installer in `./dist/`cargo packager --release --formats nsis
输出产物:`./dist/`目录下的`.exe`安装程序macOS
macOS
bash
undefinedbash
undefinedBuild package
构建包
cargo packager --release
Output: `.dmg` file in `./dist/`cargo packager --release
输出产物:`./dist/`目录下的`.dmg`文件Platform-Specific Configuration
平台专属配置
toml
undefinedtoml
undefinedLinux (Debian)
Linux(Debian)
[package.metadata.packager.deb]
depends = "./dist/depends_deb.txt"
desktop_template = "./packaging/your-app.desktop"
section = "utils"
[package.metadata.packager.deb]
depends = "./dist/depends_deb.txt"
desktop_template = "./packaging/your-app.desktop"
section = "utils"
macOS
macOS
[package.metadata.packager.macos]
minimum_system_version = "11.0"
frameworks = []
info_plist_path = "./packaging/Info.plist"
entitlements = "./packaging/Entitlements.plist"
[package.metadata.packager.macos]
minimum_system_version = "11.0"
frameworks = []
info_plist_path = "./packaging/Info.plist"
entitlements = "./packaging/Entitlements.plist"
Optional: signing identity for distribution
可选:用于分发的签名身份
signing_identity = "Developer ID Application: Your Name (XXXXXXXXXX)"
signing_identity = "Developer ID Application: Your Name (XXXXXXXXXX)"
macOS DMG
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 }
[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
Windows NSIS
[package.metadata.packager.nsis]
appdata_paths = [
"$APPDATA/$PUBLISHER/$PRODUCTNAME",
"$LOCALAPPDATA/$PRODUCTNAME",
]
---[package.metadata.packager.nsis]
appdata_paths = [
"$APPDATA/$PUBLISHER/$PRODUCTNAME",
"$LOCALAPPDATA/$PRODUCTNAME",
]
---Mobile Packaging
移动端打包
Mobile platforms use for building and packaging.
cargo-makepad移动平台使用进行构建和打包。
cargo-makepadInstall cargo-makepad
安装cargo-makepad
bash
cargo install --force --git https://github.com/makepad/makepad.git \
--branch dev cargo-makepadbash
cargo install --force --git https://github.com/makepad/makepad.git \
--branch dev cargo-makepadAndroid
Android
bash
undefinedbash
undefinedInstall Android toolchain
安装Android工具链
cargo makepad android install-toolchain
cargo makepad android install-toolchain
Full NDK (recommended for complete support)
完整NDK(推荐用于完整支持)
cargo makepad android install-toolchain --full-ndk
cargo makepad android install-toolchain --full-ndk
Build APK
构建APK
cargo makepad android build -p your-app --release
Output: `.apk` in `./target/makepad-android-app/`
**Run on device/emulator:**
```bash
cargo makepad android run -p your-app --releasecargo makepad android build -p your-app --release
输出产物:`./target/makepad-android-app/`目录下的`.apk`文件
**在设备/模拟器上运行:**
```bash
cargo makepad android run -p your-app --releaseiOS
iOS
bash
undefinedbash
undefinedInstall iOS toolchain
安装iOS工具链
cargo makepad apple ios install-toolchain
**iOS Simulator:**
```bash
cargo makepad apple ios \
--org=com.yourcompany \
--app=YourApp \
run-sim -p your-app --releaseOutput: in
.app./target/makepad-apple-app/aarch64-apple-ios-sim/release/iOS Device (requires provisioning):
First, create an empty app in Xcode with matching org/app names to generate provisioning profile.
bash
cargo makepad apple ios \
--org=com.yourcompany \
--app=YourApp \
--profile=$YOUR_PROFILE_PATH \
--cert=$YOUR_CERT_FINGERPRINT \
--device=iPhone \
run-device -p your-app --releaseOutput: in
.app./target/makepad-apple-app/aarch64-apple-ios/release/Create IPA for distribution:
bash
cd ./target/makepad-apple-app/aarch64-apple-ios/release
mkdir Payload
cp -r your-app.app Payload/
zip -r your-app-ios.ipa Payloadcargo makepad apple ios install-toolchain
**iOS模拟器:**
```bash
cargo makepad apple ios \
--org=com.yourcompany \
--app=YourApp \
run-sim -p your-app --release输出产物:目录下的文件
./target/makepad-apple-app/aarch64-apple-ios-sim/release/.appiOS设备(需要配置文件):
首先,在Xcode中创建一个与组织/应用名称匹配的空应用,以生成配置文件。
bash
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输出产物:目录下的文件
./target/makepad-apple-app/aarch64-apple-ios/release/.app创建用于分发的IPA:
bash
cd ./target/makepad-apple-app/aarch64-apple-ios/release
mkdir Payload
cp -r your-app.app Payload/
zip -r your-app-ios.ipa PayloadWasm Packaging
WASM打包
Build your Makepad app for web browsers.
bash
undefined为网页浏览器构建Makepad应用。
bash
undefinedInstall Wasm toolchain
安装Wasm工具链
cargo makepad wasm install-toolchain
cargo makepad wasm install-toolchain
Build and run
构建并运行
cargo makepad wasm run -p your-app --release
Output in `./target/makepad-wasm-app/release/your-app/`:
- `index.html` - Entry point
- `*.wasm` - WebAssembly module
- `*.js` - JavaScript bridge
- `resources/` - Static assets
**Serve locally:**
```bash
cd ./target/makepad-wasm-app/release/your-app
python3 -m http.server 8080cargo makepad wasm run -p your-app --release
输出产物位于`./target/makepad-wasm-app/release/your-app/`目录:
- `index.html` - 入口文件
- `*.wasm` - WebAssembly模块
- `*.js` - JavaScript桥接文件
- `resources/` - 静态资源
**本地运行:**
```bash
cd ./target/makepad-wasm-app/release/your-app
python3 -m http.server 8080
---
---Complete Example Cargo.toml
完整的Cargo.toml示例
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"]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"]Quick Reference
快速参考
| Task | Command |
|---|---|
| Install desktop packager | |
| Install resource helper | |
| Install mobile packager | |
| GitHub Actions packaging | |
| Package for Linux | |
| Package for Windows | |
| Package for macOS | |
| Build Android APK | |
| Build iOS (Simulator) | |
| Build iOS (Device) | |
| Build Wasm | |
| 任务 | 命令 |
|---|---|
| 安装桌面端打包工具 | |
| 安装资源处理工具 | |
| 安装移动端打包工具 | |
| GitHub Actions打包 | |
| 为Linux打包 | |
| 为Windows打包 | |
| 为macOS打包 | |
| 构建Android APK | |
| 构建iOS(模拟器) | |
| 构建iOS(设备) | |
| 构建WASM | |
Troubleshooting
故障排除
Missing Resources
资源缺失
If app crashes with missing resources:
- Check array in Cargo.toml includes all Makepad resources
resources - Verify runs successfully
before-packaging-command - Check contains expected files
./dist/resources/
如果应用因资源缺失崩溃:
- 检查Cargo.toml中的数组是否包含所有Makepad内置资源
resources - 确认执行成功
before-packaging-command - 检查目录是否包含预期文件
./dist/resources/
iOS Provisioning
iOS配置文件问题
For iOS device deployment:
- Create empty app in Xcode with same org/app identifiers
- Run on physical device once to generate provisioning profile
- Note the profile path, certificate fingerprint
- Use ,
--profile,--certflags--device
对于iOS设备部署:
- 在Xcode中创建与组织/应用标识符相同的空应用
- 在物理设备上运行一次以生成配置文件
- 记录配置文件路径、证书指纹
- 使用、
--profile、--cert参数--device
Android SDK Issues
Android SDK问题
bash
undefinedbash
undefinedReinstall toolchain with full NDK
重新安装包含完整NDK的工具链
cargo makepad android install-toolchain --full-ndk
undefinedcargo makepad android install-toolchain --full-ndk
undefinedReference Files
参考文件
- - Platform-specific deployment issues
references/platform-troubleshooting.md - - GitHub Actions packaging reference
references/makepad-packaging-action.md - - Dora Studio CI packaging example
community/dora-studio-package-workflow.md
- - 平台专属部署问题
references/platform-troubleshooting.md - - GitHub Actions打包参考
references/makepad-packaging-action.md - - Dora Studio CI打包示例
community/dora-studio-package-workflow.md