makepad-deployment

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Makepad Packaging & Deployment

Makepad打包与部署

This skill covers packaging Makepad applications for all supported platforms.
本技能涵盖为所有支持的平台打包Makepad应用的方法。

Quick Navigation

快速导航

PlatformToolOutput
Desktop
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 assets

平台工具输出产物
桌面端
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 Packaging

GitHub Actions打包

Use
makepad-packaging-action
to package Makepad apps in CI. It wraps
cargo-packager
(desktop) and
cargo-makepad
(mobile), and can upload artifacts to GitHub Releases.
yaml
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
Notes:
  • 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
.
使用
makepad-packaging-action
在CI环境中打包Makepad应用。它封装了
cargo-packager
(桌面端)和
cargo-makepad
(移动端),并可将产物上传至GitHub Releases。
yaml
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.md

Desktop Packaging

桌面端打包

Desktop packaging uses
cargo-packager
with
robius-packaging-commands
for resource handling.
桌面端打包使用
cargo-packager
结合
robius-packaging-commands
处理资源文件。

Install Tools

安装工具

bash
undefined
bash
undefined

Install 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
undefined
cargo install --version 0.2.1 --locked
--git https://github.com/project-robius/robius-packaging-commands.git
robius-packaging-commands
undefined

Configure Cargo.toml

配置Cargo.toml

Add packaging configuration to your
Cargo.toml
:
toml
[package.metadata.packager]
product_name = "YourAppName"
identifier = "com.yourcompany.yourapp"
authors = ["Your Name or Team"]
description = "A brief description of your Makepad application"
Cargo.toml
中添加打包配置:
toml
[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 """
before-packaging-command = """ robius-packaging-commands before-packaging
--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 """
undefined
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 """
undefined

Linux (Debian/Ubuntu)

Linux(Debian/Ubuntu)

bash
undefined
bash
undefined

Install 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
sudo apt-get update sudo apt-get install libssl-dev libsqlite3-dev pkg-config
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
undefined
bash
undefined

Build NSIS installer

构建NSIS安装包

cargo packager --release --formats nsis

Output: `.exe` installer in `./dist/`
cargo packager --release --formats nsis

输出产物:`./dist/`目录下的`.exe`安装程序

macOS

macOS

bash
undefined
bash
undefined

Build package

构建包

cargo packager --release

Output: `.dmg` file in `./dist/`
cargo packager --release

输出产物:`./dist/`目录下的`.dmg`文件

Platform-Specific Configuration

平台专属配置

toml
undefined
toml
undefined

Linux (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
cargo-makepad
for building and packaging.
移动平台使用
cargo-makepad
进行构建和打包。

Install cargo-makepad

安装cargo-makepad

bash
cargo install --force --git https://github.com/makepad/makepad.git \
    --branch dev cargo-makepad
bash
cargo install --force --git https://github.com/makepad/makepad.git \
    --branch dev cargo-makepad

Android

Android

bash
undefined
bash
undefined

Install 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 --release
cargo makepad android build -p your-app --release

输出产物:`./target/makepad-android-app/`目录下的`.apk`文件

**在设备/模拟器上运行:**
```bash
cargo makepad android run -p your-app --release

iOS

iOS

bash
undefined
bash
undefined

Install 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 --release
Output:
.app
in
./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 --release
Output:
.app
in
./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 Payload

cargo 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/
目录下的
.app
文件
iOS设备(需要配置文件):
首先,在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 Payload

Wasm Packaging

WASM打包

Build your Makepad app for web browsers.
bash
undefined
为网页浏览器构建Makepad应用。
bash
undefined

Install 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 8080
cargo 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

快速参考

TaskCommand
Install desktop packager
cargo install cargo-packager --locked
Install resource helper
cargo install --version 0.2.1 --locked --git https://github.com/project-robius/robius-packaging-commands.git robius-packaging-commands
Install mobile packager
cargo install --force --git https://github.com/makepad/makepad.git --branch dev cargo-makepad
GitHub Actions packaging
uses: Project-Robius-China/makepad-packaging-action@v1
Package for Linux
cargo packager --release
Package for Windows
cargo packager --release --formats nsis
Package for macOS
cargo packager --release
Build Android APK
cargo makepad android build -p app --release
Build iOS (Simulator)
cargo makepad apple ios --org=x --app=y run-sim -p app --release
Build iOS (Device)
cargo makepad apple ios --org=x --app=y --profile=... --cert=... run-device -p app --release
Build Wasm
cargo makepad wasm run -p app --release

任务命令
安装桌面端打包工具
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

Troubleshooting

故障排除

Missing Resources

资源缺失

If app crashes with missing resources:
  1. Check
    resources
    array in Cargo.toml includes all Makepad resources
  2. Verify
    before-packaging-command
    runs successfully
  3. Check
    ./dist/resources/
    contains expected files
如果应用因资源缺失崩溃:
  1. 检查Cargo.toml中的
    resources
    数组是否包含所有Makepad内置资源
  2. 确认
    before-packaging-command
    执行成功
  3. 检查
    ./dist/resources/
    目录是否包含预期文件

iOS Provisioning

iOS配置文件问题

For iOS device deployment:
  1. Create empty app in Xcode with same org/app identifiers
  2. Run on physical device once to generate provisioning profile
  3. Note the profile path, certificate fingerprint
  4. Use
    --profile
    ,
    --cert
    ,
    --device
    flags
对于iOS设备部署:
  1. 在Xcode中创建与组织/应用标识符相同的空应用
  2. 在物理设备上运行一次以生成配置文件
  3. 记录配置文件路径、证书指纹
  4. 使用
    --profile
    --cert
    --device
    参数

Android SDK Issues

Android SDK问题

bash
undefined
bash
undefined

Reinstall toolchain with full NDK

重新安装包含完整NDK的工具链

cargo makepad android install-toolchain --full-ndk
undefined
cargo makepad android install-toolchain --full-ndk
undefined

Reference Files

参考文件

  • references/platform-troubleshooting.md
    - Platform-specific deployment issues
  • references/makepad-packaging-action.md
    - GitHub Actions packaging reference
  • community/dora-studio-package-workflow.md
    - Dora Studio CI packaging example
  • references/platform-troubleshooting.md
    - 平台专属部署问题
  • references/makepad-packaging-action.md
    - GitHub Actions打包参考
  • community/dora-studio-package-workflow.md
    - Dora Studio CI打包示例

External References

外部参考