以下为本文档的中文说明

Makepad 打包与部署技能,专门用于将 Makepad 应用程序打包并部署到所有支持的平台。Makepad 是一个跨平台的 Rust 原生 GUI 框架,本技能覆盖了其从桌面安装包到移动应用再到 WebAssembly 的全平台发布流程。使用场景非常明确:当需要将 Makepad 应用打包为桌面安装程序(.deb 用于 Linux、.nsis 用于 Windows、.dmg 用于 macOS)时;当需要构建 Android APK 文件时;当需要构建 iOS 应用包(.app 或 .ipa)时;当需要将应用编译为 WebAssembly 输出用于 Web 部署时;以及当需要在 GitHub Actions 中配置自动化发布流水线时。核心特点在于它对每个目标平台都有清晰的分步骤指南和工具链说明。桌面端使用 cargo-packager 工具生成各平台的安装包格式;Android 和 iOS 端使用 cargo-makepad 工具链进行交叉编译和打包;Web 端通过 cargo-makepad 生成 Wasm 文件及配套的 HTML/JS 胶水代码。技能还包含了 GitHub Actions 的配置示例(makepad-packaging-action),帮助开发者建立持续集成和自动发布的工作流。每个平台下都有详细的注意事项——如 iOS 需要 Apple 开发者证书和配置文件,Android 需要签名密钥的配置,WebAssembly 需要正确的 wasm-bindgen 版本匹配等。它为 Makepad 应用的发布提供了端到端的完整指导。


Makepad Packaging & Deployment

This skill covers packaging Makepad applications for all supported platforms.

When to Use

  • You need to package, distribute, or automate deployment of a Makepad application.
  • The task involves desktop installers, APK/IPA builds, WebAssembly output, or CI-based release artifacts.
  • You need guidance on cargo-packager, cargo-makepad, or GitHub Actions packaging flows for Makepad.

Quick Navigation

Platform Tool Output
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

GitHub Actions Packaging

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.

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.

Desktop Packaging

Desktop packaging uses cargo-packager with robius-packaging-commands for resource handling.

Install Tools

# Install cargo-packager
cargo install cargo-packager --locked

# Install 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

Configure Cargo.toml

Add packaging configuration to your 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"
# Note: long_description has 80 character max per line
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
"""

# 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
"""

Linux (Debian/Ubuntu)

# 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

# Build package
cargo packager --release

Output: .deb file in ./dist/

Windows

# Build NSIS installer
cargo packager --release --formats nsis

Output: .exe installer in ./dist/

macOS

# Build package
cargo packager --release

Output: .dmg file in ./dist/

Platform-Specific Configuration

# 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"
# Optional: signing identity for distribution
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",
]

Mobile Packaging

Mobile platforms use cargo-makepad for building and packaging.

Install cargo-makepad

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

Android

# Install Android toolchain
cargo makepad android install-toolchain

# Full NDK (recommended for complete support)
cargo makepad android install-toolchain --full-ndk

# Build APK
cargo makepad android build -p your-app --release

Output: .apk in ./target/makepad-android-app/

Run on device/emulator:

cargo makepad android run -p your-app --release

iOS

# Install iOS toolchain
cargo makepad apple ios install-toolchain

iOS Simulator:

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.

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:

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

Build your Makepad app for web browsers.

# Install Wasm 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:

cd ./target/makepad-wasm-app/release/your-app
python3 -m http.server 8080
# Open http://localhost:8080

Complete Example 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"]

Quick Reference

Task Command
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

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

iOS Provisioning

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

Android SDK Issues

# Reinstall toolchain with full NDK
cargo makepad android install-toolchain --full-ndk

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

External References

Limitations

  • Use this skill only when the task clearly matches the scope described above.
  • Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
  • Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐